Create the Bulk
POST /bulks
Create a bulk SMS campaign by sending a POST request with message details and recipient information.
Authorizations
Section titled “Authorizations ”Code Samples
Section titled “ Code Samples ”#!/usr/bin/env bashcurl -X POST https://api.lox24.eu/bulks \ -H 'Content-Type: application/json' \ -H 'X-LOX24-AUTH-TOKEN: 1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx' \ -d '{ "sender_id": "testbulk", "text": "test bulk text", "service_code": "direct", "phones": ["+49751234567"], "msg_groups": [7117], "delivery_at": 1573724611, "is_unicode": true, "source": 1234, "voice_lang": "DE" }'using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.Text;
namespace Lox24.Api{ class client { static void Main() { string key = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx"; string url = "https://api.lox24.eu/bulks";
var data = new { sender_id = "My Sender", text = "Test message!", service_code = "direct", phones = new string[]{"+49751234567", "+49751234568"}, msg_groups = new int[]{14514}, delivery_at = 1573724611, is_unicode = true, voice_lang = "DE" };
string postdata = JsonConvert.SerializeObject(data);
Console.WriteLine("Post data: {0}", postdata);
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ReadWriteTimeout = 100000; httpWebRequest.ContentType = "application/json; charset=utf-8"; httpWebRequest.Accept = "application/json"; // or application/ld+json httpWebRequest.Method = "POST"; httpWebRequest.KeepAlive = true; httpWebRequest.Headers.Add("X-LOX24-AUTH-TOKEN", key); httpWebRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(postdata); streamWriter.Flush(); streamWriter.Close(); } try { using (HttpWebResponse resp = (HttpWebResponse)httpWebRequest.GetResponse()) {
if(resp.StatusCode == HttpStatusCode.Created) { Console.WriteLine("Success:{0} {1}", (int)resp.StatusCode, "bulks resource created"); } else { Console.WriteLine("Error: wrong response code {0} on create bulk", (int)resp.StatusCode); }
Stream respStream = resp.GetResponseStream(); using (StreamReader sr = new StreamReader(respStream, Encoding.UTF8)) { string responseText = sr.ReadToEnd(); Console.WriteLine("responseText : {0}", responseText); } }
} catch (System.Net.WebException ex) { var webResponse = ex.Response as System.Net.HttpWebResponse; Console.WriteLine("Error:{0}", webResponse.StatusCode);
switch (webResponse.StatusCode) { case HttpStatusCode.BadRequest: // 400 Console.WriteLine("Error:400 Invalid input"); break; case HttpStatusCode.Unauthorized: // 401 Console.WriteLine("Error:401 Client ID or API key isn't active or invalid!"); break; case HttpStatusCode.Forbidden: // 403 Console.WriteLine("Error:403 Account isn't activated. Please wait or contact to support!"); break; case HttpStatusCode.NotFound: // 404 Console.WriteLine("Error:404 Resource not found"); break; case HttpStatusCode.InternalServerError: // 500 case HttpStatusCode.BadGateway: //502 case HttpStatusCode.ServiceUnavailable: // 503 case HttpStatusCode.GatewayTimeout: // 504 Console.WriteLine("System error! Please contact to LOX24 support!"); break; } } } }package main
import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http")
func main() {
const Method = "POST" const URL = "https://api.lox24.eu/bulks" const Token = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx"
payload := map[string]interface{}{ "sender_id": "testbulk", "text": "test bulk text", "service_code": "direct", "phones": []string{"+49751234567"}, "msg_groups": []int{7117}, "delivery_at": 1593724611, "is_unicode": true, "source": 1234, "voice_lang": "DE", }
jsonPayload, _ := json.Marshal(payload)
client := &http.Client{}
req, err := http.NewRequest(Method, URL, bytes.NewBuffer(jsonPayload)) if err != nil { log.Fatal(err) }
req.Header.Add("X-LOX24-AUTH-TOKEN", Token) req.Header.Add("Content-Type", "application/json") req.Header.Add("Accept", "application/json")
res, err := client.Do(req) if err != nil { log.Fatal(err) }
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) }
switch res.StatusCode { case 201: fmt.Println((string(body))) case 400: fmt.Println("Error: code = 400 - Invalid input") case 401: fmt.Println("Error: code = 401 - Client ID or API key isn't active or invalid!") case 403: fmt.Println("Error: code = 403 - Account isn't activated. Please wait or contact to support!") default: fmt.Printf("Error: code = %d\n", res.StatusCode) }}package eu.lox24.doc.bulks;
import org.json.JSONObject;
import java.io.IOException;import java.net.HttpURLConnection;import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class PostBulksCollection {
public static void main(String[] args) {
var key = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx"; var url = "https://api.lox24.eu/bulks";
var json = new JSONObject(); json.put("sender_id", "My Sender"); json.put("text", "Test message!"); json.put("service_code", "direct"); json.put("phones", new String[]{"+49751234567", "+49751234568", "+49751234569"}); json.put("msg_groups", new int[]{7116, 7117}); json.put("delivery_at", 1573724611); json.put("is_unicode", true); json.put("voice_lang", "DE");
var postData = json.toString();
System.out.println("Post data: " + postData);
var httpRequest = HttpRequest.newBuilder(URI.create(url)) .timeout(Duration.ofMillis(100000)) .setHeader("Content-Type", "application/json; charset=utf-8") .setHeader("Accept", "application/json") // or application/ld+json .setHeader("X-LOX24-AUTH-TOKEN", key) .POST(HttpRequest.BodyPublishers.ofString(postData)) .build();
var client = HttpClient.newBuilder() .version(HttpClient.Version.HTTP_1_1) // Http 1.1 clients are kept alive be default .build();
try { var httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
if (httpResponse.statusCode() == HttpURLConnection.HTTP_CREATED) { System.out.println("Success:" + httpResponse.statusCode() + " " + "bulks resource created"); System.out.println("Response text : \n" + httpResponse.body());
} else {
System.out.println("Error: wrong response code " + httpResponse.statusCode() + " on create bulk"); System.out.println("Response text : \n" + httpResponse.body());
switch (httpResponse.statusCode()) {
case HttpURLConnection.HTTP_BAD_REQUEST: // 400 System.out.println("Error:400 Invalid input"); break; case HttpURLConnection.HTTP_UNAUTHORIZED: // 401 System.out.println("Error:401 Client ID or API key isn't active or invalid!"); break; case HttpURLConnection.HTTP_FORBIDDEN: // 403 System.out.println("Error:403 Account isn't activated. Please wait or contact to support!"); break; case HttpURLConnection.HTTP_INTERNAL_ERROR: // 500 case HttpURLConnection.HTTP_BAD_GATEWAY: //502 case HttpURLConnection.HTTP_UNAVAILABLE: // 503 case HttpURLConnection.HTTP_GATEWAY_TIMEOUT: // 504 System.out.println("System error! Please contact to LOX24 support!"); break; }
}
} catch (IOException | InterruptedException e) { e.printStackTrace(); } }}const host = 'api.lox24.eu';const token = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx";
var postObj = { sender_id: 'My Sender', text: 'Test message', service_code: 'direct', phones: ['+49751234567', '+344354634'], msg_groups: [7117], delivery_at: 1573724611, is_unicode: true, voice_lang: 'DE',};
var postdata = JSON.stringify(postObj);
const https = require('https');const options = { hostname: host, path: '/bulks', method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Content-Length': postdata.length, 'X-LOX24-AUTH-TOKEN': token }}
const req = https.request(options, res => { if (res.statusCode == 201) { console.log("Success: code = 201 - bulks resource created"); res.on('data', d => { process.stdout.write(d) }) } else if (res.statusCode == 400) { console.log("Error: code = 400 - Invalid input"); } else if (res.statusCode == 401) { console.log("Error: code = 401 - Client ID or API key isn't active or invalid!"); } else if (res.statusCode == 403) { console.log("Error: code = 403 - Account isn't activated. Please wait or contact to support!"); } else { console.log("Error: code = " + res.statusCode ); }});
req.on('error', error => { console.error(error)});
req.write(postdata);req.end();<?php
$uri = 'https://api.lox24.eu/bulks';
$token = '1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx';
$body = [ 'sender_id' => 'testbulk', 'text' => 'test bulk text', 'service_code' => 'direct', 'phones' => ['+49751234567'], 'msg_groups' => [7117], 'delivery_at' => 1573724611, 'is_unicode' => true, 'source' => 1234, 'voice_lang' => 'DE',];
if(!$body = json_encode($body)) { die('JSON encoding error!');}
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_POST => true, CURLOPT_URL => $uri, CURLOPT_POSTFIELDS => $body, CURLOPT_HTTPHEADER => [ "X-LOX24-AUTH-TOKEN: {$token}", 'Accept: application/json', // or application/ld+json 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,]);
$response = curl_exec($curl);$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);curl_close($curl);
$data = json_decode($response, JSON_OBJECT_AS_ARRAY);
if(201 === $code) { echo 'Success: response data = ' . var_export($data, true);} else { echo "Error: code = {$code}, data = " . var_export($data, true);}import jsonimport requests
token = "1234567:e3f3a759b6677959b6ebfcxxxxxxxxxx"
url = "https://api.lox24.eu/bulks"
data = { 'sender_id': "My Sender", 'text' : "Test message", 'service_code' : "direct", 'phones': ["+49751234567", "+49751234568"], 'msg_groups': [14514], 'delivery_at': 1573724611, 'is_unicode': True, 'voice_lang' : "DE"}
headers = { 'Accept': 'application/json', # or application/ld+json 'Content-Type': 'application/json', 'X-LOX24-AUTH-TOKEN': token,}
print("Post data: ", json.dumps(data, indent=4))
try: # timeout is 100 seconds res = requests.post(url, headers=headers, json=data, timeout=100) if res.status_code != 201: # Created res.raise_for_status() else: print(f'Success: code = {res.status_code} - bulks resource created') print("Response: ", json.dumps(res.json(), indent=4))
except requests.HTTPError: if res.status_code == 400: print("Error:400 Invalid input") elif res.status_code == 401: print("Error: code = 401 - Client ID or API key isn't active or invalid!") elif res.status_code == 403: print("Error: code = 403 - Account isn't activated. Please wait or contact to support!") elif res.status_code in (500, 502, 503, 504): print("System error! Please contact to LOX24 support!") else: print(f"Error: code {res.status_code}") print("Response: ", json.dumps(res.json(), indent=4))Request Body required
Section titled “Request Body required ”The new bulks resource
object
List of the recipients (international) numbers:
- +491701234567 (E.164)
- 00491701234567
- 491701234567
- 01701234567 (if the account is registered in Germany) will be convert to +491701234567
If the number is not in an E.164 format then the service will convert it based on user’s address. To avoid problems with the converting please use E.164 preferentially.
object
List of the recipients groups
Responses
Section titled “ Responses ”Bulks resource created
object
JSON-LD ID
JSON-LD type
Unique entity UUID
Scheduled delivery timestamp
Sender ID or phone number
Max text length is 1785 character. But don’t forget that the final message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8.
List of the recipients (international) numbers:
- +491701234567 (E.164)
- 00491701234567
- 491701234567
- 01701234567 (if the account is registered in Germany) will be convert to +491701234567
If the number is not in an E.164 format then the service will convert it based on user’s address. To avoid problems with the converting please use E.164 preferentially.
List of the recipients groups
Bulk’s status:
0- new and not processed5- bulks in progress10- bulks was successfully processed15- bulk’s processing was canceled by the user20- system error201- error: no recipients found
Count of the messages created by the bulk
Timestamp when the entity was added to the system by the user
Timestamp of last changes
IP address of the host which sent request
Example
192.168.1.1True if message contains Unicode characters, False otherwise
Type of the bulk ‘dryrun’ or not
Service or gateway code
API key identifier
Message source or origin
Voice message language. Possible values: null (auto-detection) or one of: EN (English), DE (German), FR (French), IT (Italian), ES (Spanish), PL (Polish), NL (Dutch), RO (Romanian), PT (Portuguese), CS (Czech), HU (Hungarian), SV (Swedish), DA (Danish), FI (Finnish), SK (Slovak), HR (Croatian), TR (Turkish), RU (Russian), BG (Bulgarian), UK (Ukrainian).
True if message text was deleted, False otherwise
Cost of the messages created by the bulk
object
Unique entity UUID
Scheduled delivery timestamp
Sender ID or phone number
Max text length is 1785 character. But don’t forget that the final message text can have a length of up to 1530 characters. With a Unicode SMS, the maximum character length is reduced to 670 characters. Internal encoding is UTF-8.
List of the recipients (international) numbers:
- +491701234567 (E.164)
- 00491701234567
- 491701234567
- 01701234567 (if the account is registered in Germany) will be convert to +491701234567
If the number is not in an E.164 format then the service will convert it based on user’s address. To avoid problems with the converting please use E.164 preferentially.
List of the recipients groups
Bulk’s status:
0- new and not processed5- bulks in progress10- bulks was successfully processed15- bulk’s processing was canceled by the user20- system error201- error: no recipients found
Count of the messages created by the bulk
Timestamp when the entity was added to the system by the user
Timestamp of last changes
IP address of the host which sent request
Example
192.168.1.1True if message contains Unicode characters, False otherwise
Type of the bulk ‘dryrun’ or not
Service or gateway code
API key identifier
Message source or origin
Voice message language. Possible values: null (auto-detection) or one of: EN (English), DE (German), FR (French), IT (Italian), ES (Spanish), PL (Polish), NL (Dutch), RO (Romanian), PT (Portuguese), CS (Czech), HU (Hungarian), SV (Swedish), DA (Danish), FI (Finnish), SK (Slovak), HR (Croatian), TR (Turkish), RU (Russian), BG (Bulgarian), UK (Ukrainian).
True if message text was deleted, False otherwise
Cost of the messages created by the bulk
Invalid input
Client ID or API key isn’t active or invalid!
Account isn’t activated. Please wait or contact to support!
The request was well-formed but was unable to be followed due to semantic errors
IP address was temporary blocked, because during short time from it was sent many request with invalid credentials. Please wait and try later.