Create and send campaigns
This method creates a campaign in the brand your API key belongs to. By default it saves a draft; it can also send the campaign straight away (send_campaign=1) or schedule it (schedule_date_time). To send or schedule a draft you created earlier, use Send or Schedule instead.
The campaign is always created in the brand tied to your API key. When sending or scheduling, every list and segment you pass must belong to that same brand, and the from_email domain must be one of the brand's allowed From domains.
URL
https://dashboard.skry.be/api/campaigns/create.php
PARAMETERS(POST)
api_keyyour API key.from_namethe 'From name' of your campaignfrom_emailthe 'From email' of your campaignreply_tothe 'Reply to' of your campaigntitlethe 'Title' (dashboard label) of your campaign (optional)subjectthe 'Subject' of your campaignplain_textthe 'Plain text version' of your campaign (optional)html_textthe 'HTML version' of your campaignlist_idsList IDs, single or comma-separated. Use the encrypted IDs shown under View all lists in the ID column (the same IDs Get lists returns). Required when sending or scheduling, unlesssegment_idsis passed.segment_idsSegment IDs (whole numbers), single or comma-separated. Segment IDs can be found in the segments setup page. Required when sending or scheduling, unlesslist_idsis passed.exclude_list_idsLists to exclude from your campaign. Encrypted list IDs, single or comma-separated. (optional)exclude_segments_idsSegments to exclude from your campaign. Segment IDs, single or comma-separated. (optional)query_stringeg. Google Analytics tags (optional)track_opensSet to 0 to disable, 1 to enable and 2 for anonymous opens tracking. Default is 1.track_clicksSet to 0 to disable, 1 to enable and 2 for anonymous clicks tracking. Default is 1.send_campaignSet to 1 if you want to send the campaign as well and not just create a draft. Default is 0.schedule_date_timeCampaign will be scheduled if a valid date/time is passed, eg.June 15, 2027 6:05pm. Any format PHP'sstrtotime()understands is accepted.schedule_timezoneEg.America/New_York. See the list of PHP's supported timezones. This parameter only applies if you're scheduling your campaign withschedule_date_time. Skrybe will use your default timezone if this parameter is empty.jsonSet to 1 to get a JSON response containing the new campaign's ID. Only applies when creating a draft (nosend_campaign, noschedule_date_time). (optional)
List and segment IDs are only checked when you send or schedule; a draft doesn't store recipients. You pick them when you send or schedule the draft.
RESPONSE (Plain text)
Every response is returned with HTTP status 200, so check the body.
Success: Campaign created
Success (draft with json=1):
{"status":"Campaign created", "campaign_id": "1234"}
Success: Campaign created and now sending
Success: Campaign scheduled
Error: No data passed
Error: API key not passed
Error: Invalid API key
Error: From name not passed
Error: From email not passed
Error: Reply to email not passed
Error: Subject not passed
Error: HTML not passed
Error: List or segment ID(s) not passed
Error: Brand ID not passed. (the API key isn't tied to a brand)
Error: One or more list IDs are invalid (also returned for an invalid exclude_list_ids entry)
Error: One or more segment IDs are invalid (also returned for an invalid exclude_segments_ids entry)
Error: Unauthorised From email domain
Error: schedule_date_time is invalid
Error: Unable to calculate totals
Error: Unable to create campaign
Error: Unable to create and send campaign
Error: Unable to schedule campaign
After 10 failed API key attempts within 15 minutes, requests from your IP address are blocked for 15 minutes. While blocked, every request gets Invalid API key, even with a valid key.
EXAMPLES
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("api_key", "<YOUR_API_KEY>");
urlencoded.append("from_name", "Mayo");
urlencoded.append("from_email", "contact@example.com");
urlencoded.append("reply_to", "contact@example.com");
urlencoded.append("title", "October newsletter");
urlencoded.append("subject", "What's new this October");
urlencoded.append("html_text", "<html><body>Hello there!</body></html>");
urlencoded.append("list_ids", "<YOUR_LIST_ID>");
urlencoded.append("track_opens", "1");
urlencoded.append("track_clicks", "1");
urlencoded.append("send_campaign", "1");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("https://dashboard.skry.be/api/campaigns/create.php", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
const axios = require('axios');
const qs = require('qs');
let data = qs.stringify({
'api_key': '<YOUR_API_KEY>',
'from_name': 'Mayo',
'from_email': 'contact@example.com',
'reply_to': 'contact@example.com',
'title': 'October newsletter',
'subject': 'What\'s new this October',
'html_text': '<html><body>Hello there!</body></html>',
'list_ids': '<YOUR_LIST_ID>',
'track_opens': '1',
'track_clicks': '1',
'send_campaign': '1'
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://dashboard.skry.be/api/campaigns/create.php',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});