MENU navbar-image

Introduction

Wavo Platform API reference

The Wavo Platform provides a modern REST API.

Requests support standard HTTP methods (GET, POST, PUT, DELETE). The API responses are JSON objects using standard HTTP status codes.

Authenticating requests

Authenticate requests to this API's endpoints by sending an Authorization header with the value "Bearer {ACCESS_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard Settings, Third Party Integrations and Generate API token.

Campaigns

APIs for managing campaigns.

Display a listing of campaigns

requires authentication

Return all campaigns accessible by a user. If used by an agency with white-label dashboard subscription, an optional client_id parameter can be defined to return the campaigns of a specific client.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/campaigns?client_id=ah83445df46as5432mga" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/campaigns"
);

const params = {
    "client_id": "ah83445df46as5432mga",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/campaigns',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'client_id' => 'ah83445df46as5432mga',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/campaigns'
params = {
  'client_id': 'ah83445df46as5432mga',
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "3q4gezj87m5gn65x9rpo",
            "name": "Cremin LLC 13",
            "timezone": "US/Mountain",
            "status": "DRAFT",
            "created_at": 1677779927,
            "client": {
                "id": "xvey7lp3gzxew408zr9n",
                "name": "Cremin LLC",
                "max_emails": 3,
                "created_at": 1677779927
            }
        },
        {
            "id": "9zk26m1el250lpj8xvr3",
            "name": "Brekke LLC 4",
            "timezone": "US/Mountain",
            "status": "DRAFT",
            "created_at": 1677779927,
            "client": {
                "id": "dxj2z7kno39yo9lyv5qp",
                "name": "Brekke LLC",
                "max_emails": 3,
                "created_at": 1677779927
            }
        }
    ]
}
 

Request   

GET api/v1/campaigns

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

client_id   string  optional  

The id of a client. Example: ah83445df46as5432mga

Create a new campaign

requires authentication

Create a new campaign for a client.

Example request:
curl --request POST \
    "https://app.wavo.co/api/v1/campaigns" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"aut\",
    \"client_id\": \"4a83445df46as5432mga\",
    \"timezone\": \"US\\/Mountain\"
}"
const url = new URL(
    "https://app.wavo.co/api/v1/campaigns"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "aut",
    "client_id": "4a83445df46as5432mga",
    "timezone": "US\/Mountain"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://app.wavo.co/api/v1/campaigns',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'aut',
            'client_id' => '4a83445df46as5432mga',
            'timezone' => 'US/Mountain',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/campaigns'
payload = {
    "name": "aut",
    "client_id": "4a83445df46as5432mga",
    "timezone": "US\/Mountain"
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "data": {
        "id": "8rp5dxyqljmol4mv0goe",
        "name": "Satterfield and Sons 11",
        "timezone": "US/Mountain",
        "status": "DRAFT",
        "created_at": 1677779927,
        "client": {
            "id": "26mzne14wynrokl5djpq",
            "name": "Satterfield and Sons",
            "max_emails": 3,
            "created_at": 1677779927
        }
    }
}
 

Request   

POST api/v1/campaigns

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The campaign name. Example: aut

client_id   string   

The id of the client. Example: 4a83445df46as5432mga

timezone   string   

The timezone that the campaign's schedule should use. Example: US/Mountain

Fetch the daily campaign stats of a campaign

requires authentication

Return all daily campaign stats of a campaign. To limit results, a query parameter start can be sent, so that the response contains only stats for days after a specific timestamp.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/campaigns/1/daily-stats?start=1662940800" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/campaigns/1/daily-stats"
);

const params = {
    "start": "1662940800",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/campaigns/1/daily-stats',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'start' => '1662940800',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/campaigns/1/daily-stats'
params = {
  'start': '1662940800',
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "day": "2022-09-12T00:00:00.000000Z",
            "contacted": 11,
            "replied": 1,
            "autoreplied": 0,
            "bounced": 4,
            "positive": 1,
            "neutral": 0,
            "negative": 4,
            "messages_clicked": 5,
            "messages_opened": 0,
            "messages_sent": 15
        },
        {
            "day": "2022-09-13T00:00:00.000000Z",
            "contacted": 15,
            "replied": 3,
            "autoreplied": 1,
            "bounced": 2,
            "positive": 2,
            "neutral": 1,
            "negative": 2,
            "messages_clicked": 6,
            "messages_opened": 0,
            "messages_sent": 17
        }
    ]
}
 

Request   

GET api/v1/campaigns/{campaign_id}/daily-stats

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

campaign_id   integer   

The ID of the campaign. Example: 1

Query Parameters

start   string  optional  

The timestamp after which to show stats. Example: 1662940800

Fetch the total stats of a campaign

requires authentication

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/campaigns/1/stats" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/campaigns/1/stats"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/campaigns/1/stats',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/campaigns/1/stats'
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "contacted": 5,
        "replied": 1,
        "autoreplied": 0,
        "bounced": 0,
        "positive": 1,
        "neutral": 0,
        "negative": 0,
        "messages_clicked": 0,
        "messages_opened": 0,
        "messages_sent": 5,
        "campaign_steps": [
            {
                "number": 1,
                "sent": 5,
                "queued": 0,
                "contacted": 5,
                "replied": 1,
                "positive": 1,
                "bounced": 0,
                "messages_clicked": 0,
                "messages_opened": 0
            },
            {
                "number": 2,
                "sent": 0,
                "queued": 4,
                "contacted": 0,
                "replied": 0,
                "positive": 0,
                "bounced": 0,
                "messages_clicked": 0,
                "messages_opened": 0
            }
        ]
    }
}
 

Request   

GET api/v1/campaigns/{campaign_id}/stats

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

campaign_id   integer   

The ID of the campaign. Example: 1

Clients

APIs for managing clients.

Display a user's accessible clients

requires authentication

This will return an array of 1 or more clients (for users on white-label dashboard subscription).

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/clients" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/clients"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/clients',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/clients'
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "kn9x5qyro086w4z6pd37",
            "name": "Roberts PLC",
            "max_emails": 3,
            "created_at": 1677779927
        },
        {
            "id": "41z52kqnwjepoxplrv80",
            "name": "Feeney LLC",
            "max_emails": 3,
            "created_at": 1677779927
        }
    ]
}
 

Request   

GET api/v1/clients

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create a new client

requires authentication

Add a new client to the user's agency

Example request:
curl --request POST \
    "https://app.wavo.co/api/v1/clients" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Thompson LLC\",
    \"max_emails\": 3
}"
const url = new URL(
    "https://app.wavo.co/api/v1/clients"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Thompson LLC",
    "max_emails": 3
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://app.wavo.co/api/v1/clients',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Thompson LLC',
            'max_emails' => 3,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/clients'
payload = {
    "name": "Thompson LLC",
    "max_emails": 3
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": {
        "id": "l8re092o9qv7w745jmpk",
        "name": "Thompson LLC",
        "max_emails": 3,
        "created_at": 1580411327
    }
}
 

Request   

POST api/v1/clients

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The client name or title. Example: Thompson LLC

max_emails   integer   

The amount of max emails the client can add manually. Example: 3

Display a client's users

requires authentication

Show all active users of a client as well as pending user invitations, with their assigned roles.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users'
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "users": [
            {
                "name": "Mike Jones",
                "email": "mike@wavo.co",
                "created_at": 1580412998,
                "roles": [
                    "view_campaigns"
                ]
            },
            {
                "name": "Bill Scott",
                "email": "bill@wavo.co",
                "created_at": 1580412998,
                "roles": [
                    "view_campaigns",
                    "create_campaigns"
                ]
            }
        ],
        "invitations": [
            {
                "email": "mike1@wavo.co",
                "created_at": 1580412998,
                "roles": [
                    "create_campaigns",
                    "export_data",
                    "view_campaigns"
                ]
            }
        ]
    }
}
 

Request   

GET api/v1/clients/{client_id}/users

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client_id   string   

The id of a client. Example: a83445df46as5432mga

Add a new client user

requires authentication

Add a new user to a client. Specify the user's email address and the roles he should have. Available roles are:

Example request:
curl --request POST \
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"mike@wavo.co\",
    \"view_campaigns\": true,
    \"create_campaigns\": true,
    \"export_campaigns\": true
}"
const url = new URL(
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "mike@wavo.co",
    "view_campaigns": true,
    "create_campaigns": true,
    "export_campaigns": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'email' => 'mike@wavo.co',
            'view_campaigns' => true,
            'create_campaigns' => true,
            'export_campaigns' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users'
payload = {
    "email": "mike@wavo.co",
    "view_campaigns": true,
    "create_campaigns": true,
    "export_campaigns": true
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "message": "An invitation was sent to mike@wavo.co"
}
 

Request   

POST api/v1/clients/{client_id}/users

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client_id   string   

The id of a client. Example: a83445df46as5432mga

Body Parameters

email   string   

The email address of the user. Example: mike@wavo.co

view_campaigns   boolean  optional  

Whether the user will be able to view campaigns. Example: true

create_campaigns   boolean  optional  

Whether the user will be able to create new campaigns. Example: true

export_campaigns   boolean  optional  

Whether the user will be able export campaign contacts. Example: true

Update a client user

requires authentication

Update a client user's roles. Can update roles of active users or user invitations. Available roles are:

Example request:
curl --request PUT \
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"mike@wavo.co\",
    \"view_campaigns\": true,
    \"create_campaigns\": true,
    \"export_campaigns\": true
}"
const url = new URL(
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "mike@wavo.co",
    "view_campaigns": true,
    "create_campaigns": true,
    "export_campaigns": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'email' => 'mike@wavo.co',
            'view_campaigns' => true,
            'create_campaigns' => true,
            'export_campaigns' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users'
payload = {
    "email": "mike@wavo.co",
    "view_campaigns": true,
    "create_campaigns": true,
    "export_campaigns": true
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "message": "Success. Updated user roles."
}
 

Request   

PUT api/v1/clients/{client_id}/users

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client_id   string   

The id of a client. Example: a83445df46as5432mga

Body Parameters

email   string   

The email address of the user. Example: mike@wavo.co

view_campaigns   boolean  optional  

Whether the user will be able to view campaigns. Example: true

create_campaigns   boolean  optional  

Whether the user will be able to create new campaigns. Example: true

export_campaigns   boolean  optional  

Whether the user will be able export campaign contacts. Example: true

Delete a client user

requires authentication

Remove a user from a client.

Example request:
curl --request DELETE \
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users?email=mike%40wavo.co" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"daugherty.elsie@example.org\"
}"
const url = new URL(
    "https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users"
);

const params = {
    "email": "mike@wavo.co",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "daugherty.elsie@example.org"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'email' => 'mike@wavo.co',
        ],
        'json' => [
            'email' => 'daugherty.elsie@example.org',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/clients/a83445df46as5432mga/users'
payload = {
    "email": "daugherty.elsie@example.org"
}
params = {
  'email': 'mike@wavo.co',
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers, json=payload, params=params)
response.json()

Example response (204):

[Empty response]
 

Request   

DELETE api/v1/clients/{client_id}/users

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

client_id   string   

The id of a client. Example: a83445df46as5432mga

Query Parameters

email   string   

The email address of the user. Example: mike@wavo.co

Body Parameters

email   string   

Must be a valid email address. Must not be greater than 255 characters. Example: daugherty.elsie@example.org

Contacts

APIs for managing contacts.

Create a new contact

requires authentication

A new contact can be attached to an existing campaign. As such the campaign_id is required

Example request:
curl --request POST \
    "https://app.wavo.co/api/v1/contacts" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"campaign_id\": \"fkjtf4390kfgu8903nsk\",
    \"email\": \"daugherty.elsie@example.org\",
    \"first_name\": \"aut\",
    \"last_name\": \"aut\",
    \"company\": \"aut\",
    \"industry\": \"aut\",
    \"website\": \"aut\",
    \"title\": \"aut\",
    \"phone\": \"aut\",
    \"address\": \"aut\",
    \"city\": \"aut\",
    \"state\": \"aut\",
    \"country\": \"aut\",
    \"custom_merge_fields[]\": [
        \"aut\"
    ]
}"
const url = new URL(
    "https://app.wavo.co/api/v1/contacts"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "campaign_id": "fkjtf4390kfgu8903nsk",
    "email": "daugherty.elsie@example.org",
    "first_name": "aut",
    "last_name": "aut",
    "company": "aut",
    "industry": "aut",
    "website": "aut",
    "title": "aut",
    "phone": "aut",
    "address": "aut",
    "city": "aut",
    "state": "aut",
    "country": "aut",
    "custom_merge_fields[]": [
        "aut"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://app.wavo.co/api/v1/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'campaign_id' => 'fkjtf4390kfgu8903nsk',
            'email' => 'daugherty.elsie@example.org',
            'first_name' => 'aut',
            'last_name' => 'aut',
            'company' => 'aut',
            'industry' => 'aut',
            'website' => 'aut',
            'title' => 'aut',
            'phone' => 'aut',
            'address' => 'aut',
            'city' => 'aut',
            'state' => 'aut',
            'country' => 'aut',
            'custom_merge_fields[]' => [
                'aut',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/contacts'
payload = {
    "campaign_id": "fkjtf4390kfgu8903nsk",
    "email": "daugherty.elsie@example.org",
    "first_name": "aut",
    "last_name": "aut",
    "company": "aut",
    "industry": "aut",
    "website": "aut",
    "title": "aut",
    "phone": "aut",
    "address": "aut",
    "city": "aut",
    "state": "aut",
    "country": "aut",
    "custom_merge_fields[]": [
        "aut"
    ]
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": [
        {
            "id": "we52o4rv130mz1qxyzk8pmljd",
            "email": "aditya.kohler@example.org",
            "first_name": "Aditya",
            "last_name": "Kohler",
            "company": "Gerlach, Ziemann and Reilly",
            "industry": "Nonprofit Organization Management",
            "website": "kunde.com",
            "title": "Ms.",
            "phone": "219-959-5166",
            "address": "41164 Osvaldo Row",
            "city": "Baileyborough",
            "state": "New Hampshire",
            "country": "US",
            "custom_merge_fields": {
                "fav color": "purple",
                "sport": "running",
                "os": "Windows NT 5.0"
            },
            "timezone": "US/Mountain",
            "status": "OK",
            "interest": null,
            "emails_sent": 0,
            "completed_steps": 0,
            "is_missing_data": false,
            "is_suppressed": false,
            "created_at": 1579888600,
            "campaign": {
                "id": "fkjtf4390kfgu8903nsk",
                "name": "Grady-Runolfsson 16",
                "timezone": "US/Mountain",
                "status": "DRAFT",
                "created_at": 1579888600,
                "client": {
                    "id": "a83445df46as5432mga",
                    "name": "Grady-Runolfsson",
                    "created_at": 1579888600
                }
            }
        }
    ]
}
 

Request   

POST api/v1/contacts

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

campaign_id   string   

The id of the campaign. Example: fkjtf4390kfgu8903nsk

email   string   

The email address of the contact. Example: daugherty.elsie@example.org

custom_merge_fields   object  optional  
first_name   string  optional  

The first name of the contact. Example: aut

last_name   string  optional  

The last name of contact. Example: aut

company   string  optional  

The company of the contact. Example: aut

industry   string  optional  

The industry of the contact. Example: aut

website   string  optional  

The website of the contact. Example: aut

title   string  optional  

The job title of the contact. Example: aut

phone   string  optional  

The phone of the contact. Example: aut

address   string  optional  

The address of the contact. Example: aut

city   string  optional  

The city of the contact. Example: aut

state   string  optional  

The state of the contact. Example: aut

country   string  optional  

The country of the contact. Example: aut

custom_merge_fields[]   string[]  optional  

An array of merge data to be used in email messages.

Display a contact

requires authentication

Find a contact by id and display its details.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/contacts/we52o4rv130mz1qxyzk8pmljd" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/contacts/we52o4rv130mz1qxyzk8pmljd"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/contacts/we52o4rv130mz1qxyzk8pmljd',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/contacts/we52o4rv130mz1qxyzk8pmljd'
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "we52o4rv130mz1qxyzk8pmljd",
        "email": "aditya.kohler@example.org",
        "first_name": "Aditya",
        "last_name": "Kohler",
        "company": "Gerlach, Ziemann and Reilly",
        "industry": "Nonprofit Organization Management",
        "website": "kunde.com",
        "title": "Ms.",
        "phone": "219-959-5166",
        "address": "41164 Osvaldo Row",
        "city": "Baileyborough",
        "state": "New Hampshire",
        "country": "US",
        "custom_merge_fields": {
            "fav color": "purple",
            "sport": "running",
            "os": "Windows NT 5.0"
        },
        "timezone": "US/Mountain",
        "status": "OK",
        "interest": null,
        "emails_sent": 0,
        "completed_steps": 0,
        "is_missing_data": false,
        "is_suppressed": false,
        "created_at": 1579888600,
        "campaign": {
            "id": "fkjtf4390kfgu8903nsk",
            "name": "Grady-Runolfsson 16",
            "timezone": "US/Mountain",
            "status": "DRAFT",
            "created_at": 1579888600,
            "client": {
                "id": "a83445df46as5432mga",
                "name": "Grady-Runolfsson",
                "created_at": 1579888600
            }
        }
    }
}
 

Request   

GET api/v1/contacts/{contact_id}

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_id   string   

The id of the contact. Example: we52o4rv130mz1qxyzk8pmljd

Update contact interest

requires authentication

Set a contact's interest to a value of POSITIVE, NEUTRAL, or NEGATIVE.

Example request:
curl --request PUT \
    "https://app.wavo.co/api/v1/contact-interest" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"contact_id\": \"fkjtf4390kfgu8903nsk\",
    \"interest\": \"POSITIVE\"
}"
const url = new URL(
    "https://app.wavo.co/api/v1/contact-interest"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "contact_id": "fkjtf4390kfgu8903nsk",
    "interest": "POSITIVE"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://app.wavo.co/api/v1/contact-interest',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'contact_id' => 'fkjtf4390kfgu8903nsk',
            'interest' => 'POSITIVE',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/contact-interest'
payload = {
    "contact_id": "fkjtf4390kfgu8903nsk",
    "interest": "POSITIVE"
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "message": "Interest updated."
}
 

Request   

PUT api/v1/contact-interest

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

contact_id   string   

The contact ID. Example: fkjtf4390kfgu8903nsk

interest   string   

The interest to set. Example: POSITIVE

Remove contact interest

requires authentication

Set a contact's interest to UNMARKED.

Example request:
curl --request DELETE \
    "https://app.wavo.co/api/v1/contact-interest" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"contact_id\": \"fkjtf4390kfgu8903nsk\"
}"
const url = new URL(
    "https://app.wavo.co/api/v1/contact-interest"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "contact_id": "fkjtf4390kfgu8903nsk"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://app.wavo.co/api/v1/contact-interest',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'contact_id' => 'fkjtf4390kfgu8903nsk',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/contact-interest'
payload = {
    "contact_id": "fkjtf4390kfgu8903nsk"
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "message": "Interest UNMARKED."
}
 

Request   

DELETE api/v1/contact-interest

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

contact_id   string   

The contact ID. Example: fkjtf4390kfgu8903nsk

Display a listing of contacts

requires authentication

Return all contacts of a campaign.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/contacts?status=replied&is_missing_data=0&is_suppressed=1&interest=positive&emails_sent=3&limit=2&offset=0" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/contacts"
);

const params = {
    "status": "replied",
    "is_missing_data": "0",
    "is_suppressed": "1",
    "interest": "positive",
    "emails_sent": "3",
    "limit": "2",
    "offset": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'status' => 'replied',
            'is_missing_data' => '0',
            'is_suppressed' => '1',
            'interest' => 'positive',
            'emails_sent' => '3',
            'limit' => '2',
            'offset' => '0',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/contacts'
params = {
  'status': 'replied',
  'is_missing_data': '0',
  'is_suppressed': '1',
  'interest': 'positive',
  'emails_sent': '3',
  'limit': '2',
  'offset': '0',
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "j5ropgvndm6l1v0z7lwe9481y",
            "email": "corwin.velda@example.com",
            "first_name": "Vincent",
            "last_name": "Kemmer",
            "company": "Hartmann, Lockman and Thompson",
            "industry": "Luxury Goods & Jewelry",
            "website": "mosciski.com",
            "title": "Mr.",
            "phone": "1-213-895-2923",
            "address": "6166 Jakubowski Cliff Suite 605",
            "city": "Port Reidville",
            "state": "North Carolina",
            "country": "US",
            "custom_merge_fields": {
                "fav color": "teal",
                "sport": "tennis",
                "os": "Windows NT 6.2"
            },
            "timezone": "US/Mountain",
            "status": "OK",
            "interest": null,
            "emails_sent": 1,
            "completed_steps": 1,
            "is_missing_data": 1,
            "is_suppressed": 0,
            "created_at": 1579888424
        },
        {
            "id": "ny4j2vd8k56248q1wzgeo9r3p",
            "email": "mschowalter@example.com",
            "first_name": "Jacquelyn",
            "last_name": "Okuneva",
            "company": "Armstrong, Ferry and Nolan",
            "industry": "Design",
            "website": "sanford.com",
            "title": "Prof.",
            "phone": "(828) 344-5044 x05539",
            "address": "1971 Colten Ways",
            "city": "Batzland",
            "state": "Kansas",
            "country": "US",
            "custom_merge_fields": {
                "fav color": "silver",
                "sport": "tennis",
                "os": "Windows 95"
            },
            "timezone": "US/Mountain",
            "status": "REPLIED",
            "interest": "POSITIVE",
            "emails_sent": 2,
            "completed_steps": 2,
            "is_missing_data": 1,
            "is_suppressed": 0,
            "created_at": 1579888424
        }
    ]
}
 

Request   

GET api/v1/campaigns/{campaign_id}/contacts

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

campaign_id   string   

The id of a campaign. Example: fkjtf4390kfgu8903nsk

Query Parameters

status   string  optional  

Get contacts of a specific status. Can be one of: ok, replied, unsubscribed, bounced, autoreplied, stopped. Example: replied

is_missing_data   string  optional  

Get contacts with missing data. Example: 0

is_suppressed   string  optional  

Get contacts that are suppressed. Example: 1

interest   string  optional  

Get contacts that have a specific interest level. Can be one of: unmarked, positive, neutral, negative. Example: positive

emails_sent   integer  optional  

Get contacts that have been contacted a specific number of times. Example: 3

limit   integer  optional  

The number of objects to return. Defaults to 100. Maximum 500. Example: 2

offset   string  optional  

The zero-based offset for the default object sorting. Example: 0

Search for contacts

requires authentication

Find contacts of a specific email address.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/contacts?email=aditya.kohler%40example.org&client_id=a83445df46as5432mga&campaign_id=fkjtf4390kfgu8903nsk" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"daugherty.elsie@example.org\"
}"
const url = new URL(
    "https://app.wavo.co/api/v1/contacts"
);

const params = {
    "email": "aditya.kohler@example.org",
    "client_id": "a83445df46as5432mga",
    "campaign_id": "fkjtf4390kfgu8903nsk",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "daugherty.elsie@example.org"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'email' => 'aditya.kohler@example.org',
            'client_id' => 'a83445df46as5432mga',
            'campaign_id' => 'fkjtf4390kfgu8903nsk',
        ],
        'json' => [
            'email' => 'daugherty.elsie@example.org',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/contacts'
payload = {
    "email": "daugherty.elsie@example.org"
}
params = {
  'email': 'aditya.kohler@example.org',
  'client_id': 'a83445df46as5432mga',
  'campaign_id': 'fkjtf4390kfgu8903nsk',
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "we52o4rv130mz1qxyzk8pmljd",
            "email": "aditya.kohler@example.org",
            "first_name": "Aditya",
            "last_name": "Kohler",
            "company": "Gerlach, Ziemann and Reilly",
            "industry": "Nonprofit Organization Management",
            "website": "kunde.com",
            "title": "Ms.",
            "phone": "219-959-5166",
            "address": "41164 Osvaldo Row",
            "city": "Baileyborough",
            "state": "New Hampshire",
            "country": "US",
            "custom_merge_fields": {
                "fav color": "purple",
                "sport": "running",
                "os": "Windows NT 5.0"
            },
            "timezone": "US/Mountain",
            "status": "OK",
            "interest": null,
            "emails_sent": 0,
            "completed_steps": 0,
            "is_missing_data": 0,
            "is_suppressed": 0,
            "created_at": 1579888600,
            "campaign": {
                "id": "fkjtf4390kfgu8903nsk",
                "name": "Grady-Runolfsson 16",
                "timezone": "US/Mountain",
                "status": "DRAFT",
                "created_at": 1579888600,
                "client": {
                    "id": "a83445df46as5432mga",
                    "name": "Grady-Runolfsson",
                    "created_at": 1579888600
                }
            }
        }
    ]
}
 

Request   

GET api/v1/contacts

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

email   string   

The email address we are searching for. Example: aditya.kohler@example.org

client_id   string  optional  

The id of a client. Example: a83445df46as5432mga

campaign_id   string  optional  

The id of a campaign. Example: fkjtf4390kfgu8903nsk

Body Parameters

email   string   

Must be a valid email address. Must not be greater than 255 characters. Example: daugherty.elsie@example.org

Email Messages

APIs for managing email messages.

Display a listing of a campaign's replies.

requires authentication

Return all email message replies of a campaign.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/replies?limit=2&offset=0" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/replies"
);

const params = {
    "limit": "2",
    "offset": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/replies',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'limit' => '2',
            'offset' => '0',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/campaigns/fkjtf4390kfgu8903nsk/replies'
params = {
  'limit': '2',
  'offset': '0',
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "2dpkq21yvjn4r530y56gzwlm3e08ox",
            "thread_id": "l12zpqxdn36mwrog08e5mwrkj",
            "contact_id": "83jm7zlgve0nlzq4d15orxywn",
            "from_email": "john.jacksom@example.com",
            "to_email": "corwin.velda@example.com",
            "from_name": "John Jackson",
            "to_name": "Corwin Velda",
            "submitted_at": 1597066351,
            "created_at": 1597066376,
            "subject": "Re: Test message subject",
            "snippet": "Short Message Body...",
            "message_body": "Message body text...",
            "message_raw": "Raw Message text with html tags..."
        },
        {
            "id": "66lgem812pz0w7y6g9yoj3nr4kvqdx",
            "thread_id": "rdle34wnjy94qj6m178p0gz5v",
            "contact_id": "8j5orm17lnqgpkqvg9pk4z3ew",
            "from_email": "ella.jones@example.com",
            "to_email": "corwin.velda@example.com",
            "from_name": "Ella Jones",
            "to_name": "Corwin Velda",
            "submitted_at": 1597066351,
            "created_at": 1597066376,
            "subject": "Re: Test message subject",
            "snippet": "Short Message Body...",
            "message_body": "Message body text...",
            "message_raw": "Raw Message text with html tags..."
        }
    ]
}
 

Request   

GET api/v1/campaigns/{campaign_id}/replies

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

campaign_id   string   

The id of a campaign. Example: fkjtf4390kfgu8903nsk

Query Parameters

limit   integer  optional  

The number of objects to return. Defaults to 10. Maximum 20. Example: 2

offset   string  optional  

The zero-based offset for the default object sorting. Example: 0

Display a listing of a contact's replies.

requires authentication

Return all email message replies of a contact.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/contacts/83jm7zlgve0nlzq4d15orxywn/replies" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/contacts/83jm7zlgve0nlzq4d15orxywn/replies"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/contacts/83jm7zlgve0nlzq4d15orxywn/replies',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/contacts/83jm7zlgve0nlzq4d15orxywn/replies'
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "2dpkq21yvjn4r530y56gzwlm3e08ox",
            "thread_id": "l12zpqxdn36mwrog08e5mwrkj",
            "contact_id": "83jm7zlgve0nlzq4d15orxywn",
            "from_email": "john.jacksom@example.com",
            "to_email": "corwin.velda@example.com",
            "from_name": "John Jackson",
            "to_name": "Corwin Velda",
            "submitted_at": 1597066351,
            "created_at": 1597066376,
            "subject": "Re: Test message subject",
            "snippet": "Short Message Body...",
            "message_body": "Message body text...",
            "message_raw": "Raw Message text with html tags..."
        },
        {
            "id": "rgr8yd4lkzvp05dw29nxe1w62m3qoj",
            "thread_id": "l12zpqxdn36mwrog08e5mwrkj",
            "contact_id": "83jm7zlgve0nlzq4d15orxywn",
            "from_email": "john.jacksom@example.com",
            "to_email": "corwin.velda@example.com",
            "from_name": "John Jackson",
            "to_name": "Corwin Velda",
            "submitted_at": 1597066499,
            "created_at": 1597066528,
            "subject": "Re: Test message subject",
            "snippet": "Short Message Body...",
            "message_body": "Message body text...",
            "message_raw": "Raw Message text with html tags..."
        }
    ]
}
 

Request   

GET api/v1/contacts/{contact_id}/replies

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

contact_id   string   

The id of a contact. Example: 83jm7zlgve0nlzq4d15orxywn

Display an email thread.

requires authentication

Return an email thread with all its messages.

Example request:
curl --request GET \
    --get "https://app.wavo.co/api/v1/email-threads/rdle34wnjy94qj6m178p0gz5v" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.wavo.co/api/v1/email-threads/rdle34wnjy94qj6m178p0gz5v"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://app.wavo.co/api/v1/email-threads/rdle34wnjy94qj6m178p0gz5v',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/email-threads/rdle34wnjy94qj6m178p0gz5v'
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "rdle34wnjy94qj6m178p0gz5v",
        "campaign_id": "jxv8qkeml4ml1g69y3w5",
        "contact_id": "8j5orm17lnqgpkqvg9pk4z3ew",
        "email_messages": [
            {
                "id": "2dpkq21yvjn4r530y56gzwlm3e08ox",
                "thread_id": "l12zpqxdn36mwrog08e5mwrkj",
                "contact_id": "83jm7zlgve0nlzq4d15orxywn",
                "from_email": "corwin.velda@example.com",
                "to_email": "ella.jones@example.com",
                "from_name": "Corwin Velda",
                "to_name": "Ella Jones",
                "submitted_at": 1597066219,
                "created_at": 1597066208,
                "subject": "Test message subject",
                "snippet": "Short Message Body...",
                "message_body": "Message body text...",
                "message_raw": "Raw Message text with html tags..."
            },
            {
                "id": "66lgem812pz0w7y6g9yoj3nr4kvqdx",
                "thread_id": "rdle34wnjy94qj6m178p0gz5v",
                "contact_id": "8j5orm17lnqgpkqvg9pk4z3ew",
                "from_email": "ella.jones@example.com",
                "to_email": "corwin.velda@example.com",
                "from_name": "Ella Jones",
                "to_name": "Corwin Velda",
                "submitted_at": 1597066351,
                "created_at": 1597066376,
                "subject": "Re: Test message subject",
                "snippet": "Short Message Body...",
                "message_body": "Message body text...",
                "message_raw": "Raw Message text with html tags..."
            }
        ]
    }
}
 

Request   

GET api/v1/email-threads/{email_thread_id}

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

email_thread_id   string   

The id of the email thread. Example: rdle34wnjy94qj6m178p0gz5v

Suppression

APIs for managing suppression list.

Add new email address to suppression list

requires authentication

This will add new email addresses to a client's suppression list. Any contacts matching these emails, will be set as unsubscribed.

Example request:
curl --request POST \
    "https://app.wavo.co/api/v1/suppressions/emails" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_id\": \"a83445df46as5432mga\",
    \"emails\": [
        \"alicia.hammes@example.com\",
        \"douglas.herman@example.com\"
    ]
}"
const url = new URL(
    "https://app.wavo.co/api/v1/suppressions/emails"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "client_id": "a83445df46as5432mga",
    "emails": [
        "alicia.hammes@example.com",
        "douglas.herman@example.com"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://app.wavo.co/api/v1/suppressions/emails',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_id' => 'a83445df46as5432mga',
            'emails' => [
                'alicia.hammes@example.com',
                'douglas.herman@example.com',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/suppressions/emails'
payload = {
    "client_id": "a83445df46as5432mga",
    "emails": [
        "alicia.hammes@example.com",
        "douglas.herman@example.com"
    ]
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": [
        "alicia.hammes@example.com",
        "douglas.herman@example.com"
    ]
}
 

Request   

POST api/v1/suppressions/emails

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

client_id   string   

The id of a client. Example: a83445df46as5432mga

emails   string[]   

List of emails that should be put on client's suppression list.

Add new domain address to suppression list

requires authentication

This will add new domains to a client's suppression list. Any contacts matching these domains, will be set as unsubscribed.

Example request:
curl --request POST \
    "https://app.wavo.co/api/v1/suppressions/domains" \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_id\": \"a83445df46as5432mga\",
    \"domains\": [
        \"domain1.com\",
        \"domain2.com\"
    ]
}"
const url = new URL(
    "https://app.wavo.co/api/v1/suppressions/domains"
);

const headers = {
    "Authorization": "Bearer {token}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "client_id": "a83445df46as5432mga",
    "domains": [
        "domain1.com",
        "domain2.com"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://app.wavo.co/api/v1/suppressions/domains',
    [
        'headers' => [
            'Authorization' => 'Bearer {token}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_id' => 'a83445df46as5432mga',
            'domains' => [
                'domain1.com',
                'domain2.com',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.wavo.co/api/v1/suppressions/domains'
payload = {
    "client_id": "a83445df46as5432mga",
    "domains": [
        "domain1.com",
        "domain2.com"
    ]
}
headers = {
  'Authorization': 'Bearer {token}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201):


{
    "data": [
        "domain1.com",
        "domain2.com"
    ]
}
 

Request   

POST api/v1/suppressions/domains

Headers

Authorization      

Example: Bearer {token}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

client_id   string   

The id of a client. Example: a83445df46as5432mga

domains   string[]   

List of domains that should be put on client's suppression list.