Autenticación
Cada petición que se realice tendrá que incluir la autenticación del cliente. La API admite dos métodos de autenticación, que puedes utilizar indistintamente:
- Autenticación básica HTTP, con tu usuario y tu apiPassword.
- API Key, con la clave de API de tu cuenta.
Autenticación básica HTTP
La autenticación se incluye en la cabecera de la petición http utilizando la autenticación de acceso básica de HTTP.
La cabecera de autorización se construye combinando la cadena usuario:apiPassword y codificándola en base64. A esta cadena se antepone la cadena Authorization: Basic
Por ejemplo, para el usuario username y el password apiPassword la cabecera resultante sería:
Authorization: Basic dXNlcm5hbWU6YXBpUGFzc3dvcmQ=
Ejemplo de petición con autenticación básica HTTP:
curl -X GET '{{DASHBOARD_HOST}}/api/rest/account' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/account',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/account");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/account',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/account"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/account")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/account");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
API Key
Como alternativa a la autenticación básica, puedes autenticar tus peticiones con la API Key de tu cuenta. No es necesario indicar el usuario: la API Key identifica por sí sola a la cuenta.
La API Key se envía en la cabecera X-Api-Key de la petición http, tal cual, sin codificar.
Por ejemplo, para la API Key YOUR_API_KEY la cabecera resultante sería:
X-Api-Key: YOUR_API_KEY
Ejemplo de petición con API Key:
curl -X GET '{{DASHBOARD_HOST}}/api/rest/account' \
-H 'Content-Type: application/json' \
-H 'X-Api-Key: YOUR_API_KEY'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/account',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: YOUR_API_KEY',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/account");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("X-Api-Key", "YOUR_API_KEY");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/account',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'YOUR_API_KEY'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/account"
payload = {}
headers = {
'Content-Type': 'application/json',
'X-Api-Key': 'YOUR_API_KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/account")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["X-Api-Key"] = "YOUR_API_KEY"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/account");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("X-Api-Key", "YOUR_API_KEY");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Campañas
Remitentes verificados
Listado
Devuelve el listado de remitentes (alias) verificados y registrados en la cuenta, indicando el canal para el que están habilitados y el país al que corresponde el registro.
GET {{DASHBOARD_HOST}}/api/rest/senders
curl -X GET '{{DASHBOARD_HOST}}/api/rest/senders' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/senders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/senders");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/senders',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/senders"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/senders")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/senders");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"sender": "MYBRAND",
"type": "sms",
"countryIso": "ES"
}
]
}
Respuesta
| Campo | Descripción |
|---|---|
| sender | Nombre del remitente registrado. |
| type | Canal para el que está registrado el remitente. Valores posibles: sms, rcs. |
| countryIso | Código ISO de 2 letras del país para el que está registrado el remitente. |
Mensajes programados
Listado
GET {{DASHBOARD_HOST}}/api/rest/scheduled
curl -X GET '{{DASHBOARD_HOST}}/api/rest/scheduled' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/scheduled',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/scheduled");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/scheduled',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/scheduled"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/scheduled")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/scheduled");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
Multi GUID
{
"result": [
{
"guid": "100",
"type": "SMS",
"sending_id": 123,
"updated_at": "2017-09-18 10:49:12",
"scheduled_at": "2017-11-11 10:10:10"
},
{
"guid": "101",
"type": "SMS",
"sending_id": 123,
"created_at": "2017-09-18 10:49:12",
"updated_at": "2017-09-18 10:49:12",
"scheduled_at": "2017-11-11 10:10:10"
},
{
"guid": "102",
"type": "SMS",
"sending_id": 123,
"created_at": "2017-09-18 10:49:12",
"updated_at": "2017-09-18 10:49:12",
"scheduled_at": "2017-11-11 10:10:10"
}
],
"total": 3
}
Single GUID
{
"result": {
"guid": "100",
"type": "SMS",
"content": {
"to": "34666555444",
"from": "SAMPLE",
"encoding": "gsm",
"message": "This is a test",
"campaignId": 456,
"sendingId": 123
},
"created_at": "2017-09-18 10:49:12",
"updated_at": "2017-09-18 10:49:12",
"scheduled_at": "2017-11-11 10:10:10"
},
"total": 1
}
Lista todos los envíos programados. Puede filtrarse por tipo (SMS o MAILING) y puede especificarse un GUID, varios GUID o ningún GUID (para listar todos).
El contenido del mensaje no se muestra en la lista, a no ser que se especifique un único GUID.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| guid | integer, array | No | Identificador del mensaje o mensajes. Se le puede pasar un identificador, un array de identificadores o ninguno para mostrarlos todos. |
| type | string | No | SMS o MAILING |
| sendingId | integer | No | Identificador del envío. |
Actualizar
PUT {{DASHBOARD_HOST}}/api/rest/scheduled
curl -X PUT '{{DASHBOARD_HOST}}/api/rest/scheduled' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"guid": [100,101],
"scheduleDate": "20171011093000"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/scheduled',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => '{
"guid": [100,101],
"scheduleDate": "20171011093000"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/scheduled");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"guid\": [100,101], \"scheduleDate\": \"20171011093000\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'put',
url: '{{DASHBOARD_HOST}}/api/rest/scheduled',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "guid": [100,101], "scheduleDate": "20171011093000" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/scheduled"
payload = "{ \"guid\": [100,101], \"scheduleDate\": \"20171011093000\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/scheduled")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"guid\": [100,101], \"scheduleDate\": \"20171011093000\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/scheduled");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"guid\": [100,101], \"scheduleDate\": \"20171011093000\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"result": true,
"updated": 2
}
Actualiza la fecha de programación un envío, varios envíos o todos los envíos programados. Puede filtrarse por GUID y/o tipo.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| guid | integer, array | No | Identificador del mensaje o mensajes. Se le puede pasar un identificador, un array de identificadores o ninguno para mostrarlos todos. |
| type | string | No | SMS o MAILING |
| scheduleDate | string | Sí | Fecha de envío del mensaje en formato UTC. Si se necesita enviar mensajes programados se puede especificar la fecha de envío indicando la fecha en formato YYYYmmddHHiiss. Ejemplo: 20130215142000 sería el 15 de febrero de 2013 a las 14:20:00. En caso de envío inmediato no se tiene que especificar este parámetro. |
Eliminar
DELETE {{DASHBOARD_HOST}}/api/rest/scheduled
curl -X DELETE '{{DASHBOARD_HOST}}/api/rest/scheduled' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"guid": [100, 101]
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/scheduled',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_POSTFIELDS => '{
"guid": [100, 101]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/scheduled");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"guid\": [100, 101] }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'delete',
url: '{{DASHBOARD_HOST}}/api/rest/scheduled',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "guid": [100, 101] }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/scheduled"
payload = "{ \"guid\": [100, 101] }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/scheduled")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"guid\": [100, 101] }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/scheduled");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"guid\": [100, 101] }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"result": true,
"deleted": 2
}
Elimina un envío, varios envíos o todos los envíos programados. Puede filtrarse por GUID y/o tipo.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| guid | integer, array | No | Identificador del mensaje o mensajes. Se le puede pasar un identificador, un array de identificadores o ninguno para mostrarlos todos. |
| type | string | No | SMS o MAILING |
Listado de campañas
GET {{DASHBOARD_HOST}}/api/rest/campaigns
curl -X GET '{{DASHBOARD_HOST}}/api/rest/campaigns' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/campaigns',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/campaigns");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/campaigns',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/campaigns"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/campaigns")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/campaigns");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"id": 1,
"name": "My campaign",
"type": "basic",
"createdAt": "2018-12-27T11:31:16+00:00",
"updatedAt": "2018-12-27T11:31:16+00:00",
"links": {
"self": "{{DASHBOARD_HOST}}/api/rest/campaigns/1",
"sendings": "{{DASHBOARD_HOST}}/api/rest/campaigns/1/sendings"
},
"sendings": {
"data": [
{
"id": 1,
"campaignName": "My campaign",
"status": "OPENED",
"channel": "sms",
"total": 2,
"processed": 2,
"totalSmsParts": 4,
"cost": 0.02,
"currency": "EUR",
"tags": [],
"scheduledAt": null,
"expiresAt": null,
"startedAt": null,
"finishedAt": null,
"createdAt": "2018-12-27T11:31:16+00:00",
"updatedAt": "2018-12-27T11:31:22+00:00",
"events": {
"delivered": 2,
"opened": 0,
"opened_unique": 0,
"clicked": 0,
"clicked_unique": 0,
"unsubscribed": 0,
"hard_bounced": 0,
"complaint": 0,
"sent": 2,
"soft_bounced": 0,
"undelivered": 0,
"rejected": 0,
"expired": 0,
"unsubscribed_landing": 0
},
"links": {
"self": "{{DASHBOARD_HOST}}/api/rest/sendings/1",
"eventsReport": "{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events"
}
}
]
}
}
]
}
Filtros
| Parámetro | Descripción |
|---|---|
| name | Filtrar por nombre de campaña. Es posible utilizar el carácter "*" como "wildcard". Ejemplo: ?name=CAMPAIGN_2020_*. |
| channel | Filtrar por canal. Valores disponibles: sms, mailing, landing, text2speech, voice-interactive. Ejemplo: ?channel=sms. |
| beforeDate | Mostrar los resultados anteriores a la fecha de creación indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?beforeDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
| afterDate | Mostrar los resultados posteriores a la fecha de creación indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?afterDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
| updatedBeforeDate | Mostrar los resultados cuya última actualización sea anterior a la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?updatedBeforeDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
| updatedAfterDate | Mostrar los resultados cuya última actualización sea posterior a la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?updatedAfterDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar RFC 3986 para ser admitidos por el servidor.
Campos de la respuesta
| Parámetro | Descripción |
|---|---|
| name | Nombre asignado a la campaña. |
| type | Tipo de campaña. Posibles valores: basic, automatic, trigger, testab. |
| sendings | Listado de envíos asociado a la campaña. Para campañas de tipo basic y automatic el número de envíos siempre será 1. |
| sendings.*.status | Estado del envío. Posibles valores: PENDING: Envío programado para una fecha futura. SAVED: Envío guardado. No se enviará hasta que se confirme la campaña desde la plataforma. SENDING: Envío en progreso. PAUSED: Envío pausado. FINISHED: Envío finalizado. CANCELLED: Envío cancelado. EDITING: El envío está siendo editado desde la plataforma. OPENED: Los envíos por API reportarán este estado. Indica que el envío puede aceptar más mensajes. AUTOMATED: Envío automatizado a la espera de que se cumplan las condiciones de automatización. WAITING: Envío trigger a la espera de que se cumplan las condiciones de envío. |
| sendings.*.channel | Canal del envío. Posibles valores: sms, mailing, landing, text2speech, voice-interactive. |
| sendings.*.total | Total de mensajes a ser enviados. |
| sendings.*.processed | Total de mensajes enviados. |
| sendings.*.totalSmsParts | Solo aplicable a envíos SMS. Se indicará el total de partes de sms enviadas para envíos concatenados. |
| sendings.*.cost | Coste del envío. |
| sendings.*.currency | Código de moneda para el coste. |
| sendings.*.tags | Etiquetas asignadas al envío. |
| sendings.*.scheduledAt | Fecha de programación de la campaña. No se enviará ningún mensaje antes de esta fecha. |
| sendings.*.expiresAt | Fecha de expiración de la campaña. Pasada esta fecha no se enviarán más mensajes. |
| sendings.*.events | Resumen de totales de eventos producidos en el envío. Eventos: delivered: El mensaje ha sido entregado al contacto. opened: El contacto ha abierto el mensaje. No aplicable a sms y voz. opened_unique: Total de aperturas únicas. No aplicable a sms y voz. clicked: El contacto ha hecho click en un enlace del mensaje. No aplicable a sms y voz. clicked_unique: Total de clicks únicos. No aplicable a sms y voz. unsubscribed: El contacto se ha dado de baja de la lista. hard_bounced: Total hard bounces generados por el envío. Solo aplicable a mailing. complaint: El contacto ha marcado el mensaje como no deseado. sent: El mensaje ha sido enviado al contacto. soft_bounced: Total soft bounces generados por el envío. Solo aplicable a mailing. undelivered: No ha sido posible entregar el mensaje al contacto. rejected: Se ha rechazado el intento de envío del mensaje. expired: El mensaje ha sido rechazado por cumplirse la fecha de expiración de la campaña. unsubscribed_landing: El contacto se ha dado de baja de la lista desde la landing page incluida en el mensaje. |
Bases de datos
Contactos
Listado de contactos
GET {{DASHBOARD_HOST}}/api/rest/contacts
curl -X GET '{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields,groups");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"id": 1,
"email": "email@example.com",
"phone": "34666666666",
"countryIso": "ES",
"landline": "900222222",
"name": "Name",
"surname": "Last name",
"createdAt": "2018-03-13T14:32:25+00:00",
"updatedAt": "2018-07-04T13:57:09+00:00",
"customFields": {
"data": [
{
"key": "color",
"type": "string",
"value": "green"
}
]
},
"groups": {
"data": [
{
"id": 1,
"name": "My Contact List"
}
]
}
}
],
"meta": {
"pagination": {
"total": 500,
"count": 100,
"per_page": 100,
"current_page": 1,
"total_pages": 5,
"links": {
"next": "{{DASHBOARD_HOST}}/api/rest/contacts?include=customFields%2Cgroups&page=2"
}
}
}
}
Filtros
| Parámetro | Descripción |
|---|---|
| limit | Total de contactos a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000. |
| include | Incluir los subrecursos asociados en la respuesta. Es posible especificar varios valores separándolos por comas. Valores disponibles: customFields, groups. |
| Filtrar los contactos por el email especificado: Ejemplo: email=myemail@example.com. | |
| phone | Filtrar los contactos por el teléfono especificado: Ejemplo: phone=34666666666. |
| landline | Filtrar los contactos por el teléfono fijo especificado: Ejemplo: landline=900222222. |
| countryIso | Filtrar los contactos por el país especificado: Ejemplo: countryIso=ES. |
| externalId | Filtrar los contactos por el externalId especificado: Ejemplo: externalId=EXT1. |
Mostrar un contacto
GET {{DASHBOARD_HOST}}/api/rest/contacts/<ID>
curl -X GET '{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/contacts/1?include=customFields,groups");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": {
"id": 1,
"email": "email@example.com",
"phone": "34666666666",
"countryIso": "ES",
"landline": "900222222",
"name": "Name",
"surname": "Last name",
"createdAt": "2018-03-13T14:32:25+00:00",
"updatedAt": "2018-07-04T13:57:09+00:00",
"customFields": {
"data": [
{
"key": "color",
"type": "string",
"value": "green"
}
]
},
"groups": {
"data": [
{
"id": 1,
"name": "My Contact List"
}
]
}
}
}
Filtros
| Parámetro | Descripción |
|---|---|
| include | Incluir los subrecursos asociados en la respuesta. Es posible especificar varios valores separándolos por comas. Valores disponibles: customFields, groups. |
Crear un nuevo contacto
POST {{DASHBOARD_HOST}}/api/rest/contacts
curl -X POST '{{DASHBOARD_HOST}}/api/rest/contacts' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"email": "new.contact@example.com",
"phone": "3466666666",
"countryIso": "ES",
"groupsNames": ["My contact list"],
"customFields": [
{
"key": "company",
"value": "ACME inc."
}
]
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"email": "new.contact@example.com",
"phone": "3466666666",
"countryIso": "ES",
"groupsNames": ["My contact list"],
"customFields": [
{
"key": "company",
"value": "ACME inc."
}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/contacts");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/contacts',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "email": "new.contact@example.com", "phone": "3466666666", "countryIso": "ES", "groupsNames": ["My contact list"], "customFields": [ { "key": "company", "value": "ACME inc." } ] }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/contacts"
payload = "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/contacts")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/contacts");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 201)
{
"data": {
"id": 1,
"email": "new.contact@example.com",
"phone": "3466666666",
"countryIso": "ES",
"landline": null,
"name": null,
"surname": null,
"createdAt": "2018-03-13T14:32:25+00:00",
"updatedAt": "2018-03-13T14:32:25+00:00",
"links": {
"self": "{{DASHBOARD_HOST}}/api/rest/contacts/1"
}
}
}
Error response
{
"error": {
"code": 422,
"description": "The email field is required."
}
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| string | Obligatorio cuando no se especifica phone o landline |
Email del nuevo contacto. | |
| phone | string | Obligatorio cuando no se especifica email o landline |
Número de teléfono móvil del contacto. |
| landline | string | Obligatorio cuando no se especifica email o phone |
Número de teléfono fijo del contacto. |
| countryIso | string | Obligatorio cuando se especifica phone o landline |
ISO code de 2 letras del país del contacto. |
| groupsIds | array | Obligatorio si no se especifica groupsNames |
Lista de grupos en los que se añadirá el nuevo contacto. Para obtener las ids de grupos consultar la documentación para el endpoint correspondiente. |
| groupsNames | array | Obligatorio si no se especifica groupsIds |
Alternativamente, si no se dispone del listado de IDs de grupos, se puede especificar un listado con los nombres de los grupos a los que añadir el contacto. |
| name | string | No | Nombre del contacto. |
| surname | string | No | Apellidos del contacto. |
| customFields[]key | string | No | Nombre del campo personalizado a añadir. |
| customFields[]type | string | No | Tipo del campo personalizado. Posibles valores: string, date, decimal. Para utilizar un campo fecha el valor debe estar en formato ISO8601. Valor por defecto: string. |
| customFields[]value | string | No | Valor del campo personalizado. |
Actualizar un contacto
PUT {{DASHBOARD_HOST}}/api/rest/contacts/<ID>
curl -X PUT '{{DASHBOARD_HOST}}/api/rest/contacts/1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"email": "new.contact@example.com",
"phone": "3466666666",
"countryIso": "ES",
"groupsNames": ["My contact list"],
"customFields": [
{
"key": "company",
"value": "ACME inc."
}
]
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/contacts/1',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => '{
"email": "new.contact@example.com",
"phone": "3466666666",
"countryIso": "ES",
"groupsNames": ["My contact list"],
"customFields": [
{
"key": "company",
"value": "ACME inc."
}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/contacts/1");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'put',
url: '{{DASHBOARD_HOST}}/api/rest/contacts/1',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "email": "new.contact@example.com", "phone": "3466666666", "countryIso": "ES", "groupsNames": ["My contact list"], "customFields": [ { "key": "company", "value": "ACME inc." } ] }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/contacts/1"
payload = "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/contacts/1")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/contacts/1");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"email\": \"new.contact@example.com\", \"phone\": \"3466666666\", \"countryIso\": \"ES\", \"groupsNames\": [\"My contact list\"], \"customFields\": [ { \"key\": \"company\", \"value\": \"ACME inc.\" } ] }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 200)
{
"data": {
"id": 1,
"email": "new.contact@example.com",
"phone": "3466666666",
"countryIso": "ES",
"landline": null,
"name": null,
"surname": null,
"createdAt": "2018-03-13T14:32:25+00:00",
"updatedAt": "2018-03-13T14:32:25+00:00",
"links": {
"self": "{{DASHBOARD_HOST}}/api/rest/contacts/1"
}
}
}
Error response
{
"error": {
"code": 422,
"description": "The email field is required."
}
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| string | Obligatorio cuando no se especifica phone o landline |
Email del nuevo contacto. | |
| phone | string | Obligatorio cuando no se especifica email o landline |
Número de teléfono móvil del contacto. |
| landline | string | Obligatorio cuando no se especifica email o phone |
Número de teléfono fijo del contacto. |
| countryIso | string | Obligatorio cuando se especifica phone o landline |
ISO code de 2 letras del país del contacto. |
| groupsIds | array | Obligatorio si no se especifica groupsNames |
Lista de grupos en los que se añadirá el nuevo contacto. Para obtener las ids de grupos consultar la documentación para el endpoint correspondiente. |
| groupsNames | array | Obligatorio si no se especifica groupsIds |
Alternativamente, si no se dispone del listado de IDs de grupos, se puede especificar un listado con los nombres de los grupos a los que añadir el contacto. |
| name | string | No | Nombre del contacto. |
| surname | string | No | Apellidos del contacto. |
| customFields[]key | string | No | Nombre del campo personalizado a añadir. |
| customFields[]type | string | No | Tipo del campo personalizado. Posibles valores: string, date, decimal. Para utilizar un campo fecha el valor debe estar en formato ISO8601. Valor por defecto: string. |
| customFields[]value | string | No | Valor del campo personalizado. |
Eliminar un contacto
DELETE {{DASHBOARD_HOST}}/api/rest/contacts/<ID>
curl -X DELETE '{{DASHBOARD_HOST}}/api/rest/contacts/1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/contacts/1',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/contacts/1");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'delete',
url: '{{DASHBOARD_HOST}}/api/rest/contacts/1',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/contacts/1"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/contacts/1")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/contacts/1");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Si la petición ha sido correcta se responderá con un código HTTP 204.
Grupos
Listado de grupos
GET {{DASHBOARD_HOST}}/api/rest/groups
curl -X GET '{{DASHBOARD_HOST}}/api/rest/groups' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/groups");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/groups',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/groups"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/groups")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/groups");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"id": 1,
"name": "My contact list"
}
],
"meta": {
"pagination": {
"total": 500,
"count": 100,
"per_page": 100,
"current_page": 1,
"total_pages": 5,
"links": {
"next": "{{DASHBOARD_HOST}}/api/rest/groups?page=2"
}
}
}
}
Filtros
| Parámetro | Descripción |
|---|---|
| limit | Total de contactos a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000. |
Mostrar un grupo
GET {{DASHBOARD_HOST}}/api/rest/groups/<ID>
curl -X GET '{{DASHBOARD_HOST}}/api/rest/groups/1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/groups/1',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/groups/1");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/groups/1',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/groups/1"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/groups/1")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/groups/1");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": {
"id": 1,
"name": "My contact list"
}
}
Crear un nuevo grupo
POST {{DASHBOARD_HOST}}/api/rest/groups
curl -X POST '{{DASHBOARD_HOST}}/api/rest/groups' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"name": "My new contact list"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"name": "My new contact list"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/groups");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"name\": \"My new contact list\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/groups',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "name": "My new contact list" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/groups"
payload = "{ \"name\": \"My new contact list\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/groups")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"name\": \"My new contact list\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/groups");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"name\": \"My new contact list\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 201)
{
"data": {
"id": 1,
"name": "My new contact list"
}
}
Error response
{
"error": {
"code": 422,
"description": "The name field is required."
}
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| name | string | Sí | Nombre del nuevo grupo. |
Actualizar un grupo
PUT {{DASHBOARD_HOST}}/api/rest/groups/<ID>
curl -X PUT '{{DASHBOARD_HOST}}/api/rest/groups' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"name": "My new contact list"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => '{
"name": "My new contact list"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/groups");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"name\": \"My new contact list\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'put',
url: '{{DASHBOARD_HOST}}/api/rest/groups',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "name": "My new contact list" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/groups"
payload = "{ \"name\": \"My new contact list\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/groups")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"name\": \"My new contact list\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/groups");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"name\": \"My new contact list\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 200)
{
"data": {
"id": 1,
"name": "My new contact list"
}
}
Error response
{
"error": {
"code": 422,
"description": "The name field is required."
}
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| name | string | Sí | Nombre del nuevo grupo. |
Eliminar un grupo
DELETE {{DASHBOARD_HOST}}/api/rest/groups/<ID>
curl -X DELETE '{{DASHBOARD_HOST}}/api/rest/groups/1' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/groups/1',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/groups/1");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'delete',
url: '{{DASHBOARD_HOST}}/api/rest/groups/1',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/groups/1"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/groups/1")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/groups/1");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Si la petición ha sido correcta se responderá con un código HTTP 204.
Lista negra
Listado de contactos en lista negra
GET {{DASHBOARD_HOST}}/api/rest/v2/blacklist/{type}
curl -X GET '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"type": "sms",
"recipient": "99000000000",
"isDefinitive": false,
"sendingId": 123,
"campaignName": "TEST_CAMPAIGN",
"createdAt": "2020-01-01T00:00:00+00:00"
}
],
"meta": {
"pagination": {
"total": 500,
"count": 100,
"per_page": 100,
"current_page": 1,
"total_pages": 5,
"links": {
"next": "{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms?page=2"
}
}
}
}
Parámetros URL
| Parámetro | Descripción |
|---|---|
| type | Tipo de blacklist: sms, mailing, voice. |
Filtros
| Parámetro | Descripción |
|---|---|
| limit | Total de contactos a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000. |
| recipient | Filtrar por destinatario. Ejemplo: ?recipient=test%40example.com |
| sendingId | Filtrar por sendingId. Ejemplo: ?sendingId=123 |
Añadir contacto a la lista negra
PUT {{DASHBOARD_HOST}}/api/rest/v2/blacklist/{type}
curl -X PUT '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"recipient": "99000000000"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => '{
"recipient": "99000000000"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"recipient\": \"99000000000\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'put',
url: '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "recipient": "99000000000" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms"
payload = "{ \"recipient\": \"99000000000\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"recipient\": \"99000000000\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"recipient\": \"99000000000\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 200)
{
"data": {
"type": "sms",
"recipient": "99000000000",
"isDefinitive": false,
"campaignName": null,
"createdAt": "2020-01-01T00:00:00+00:00"
}
}
Parámetros URL
| Parámetro | Descripción |
|---|---|
| type | Tipo de blacklist: sms, mailing, voice. |
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| recipient | string | Sí | Destinatario a añadir en la lista negra. |
Eliminar un contacto de la lista negra
DELETE {{DASHBOARD_HOST}}/api/rest/v2/blacklist/{type}
curl -X DELETE '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"recipient": "99000000000"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_POSTFIELDS => '{
"recipient": "99000000000"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"recipient\": \"99000000000\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'delete',
url: '{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "recipient": "99000000000" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms"
payload = "{ \"recipient\": \"99000000000\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"recipient\": \"99000000000\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/v2/blacklist/sms");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"recipient\": \"99000000000\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Parámetros URL
| Parámetro | Descripción |
|---|---|
| type | Tipo de blacklist: sms, mailing, voice. |
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| recipient | string | Sí | Destinatario a eliminar de la lista negra. |
Si la petición ha sido correcta se responderá con un código HTTP 204.
Plantillas y archivos
Acortador de urls
Generación de urls cortas
POST {{DASHBOARD_HOST}}/api/rest/shortener/shorten
Request
curl -X POST '{{DASHBOARD_HOST}}/api/rest/shortener/shorten' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"urls": [
{"longUrl": "https://example.com/test1"},
{"longUrl": "https://example.com/test2"},
{"longUrl": "invalidUrl"}
]
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/shortener/shorten',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"urls": [
{"longUrl": "https://example.com/test1"},
{"longUrl": "https://example.com/test2"},
{"longUrl": "invalidUrl"}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/shortener/shorten");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"urls\": [ {\"longUrl\": \"https://example.com/test1\"}, {\"longUrl\": \"https://example.com/test2\"}, {\"longUrl\": \"invalidUrl\"} ] }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/shortener/shorten',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "urls": [ {"longUrl": "https://example.com/test1"}, {"longUrl": "https://example.com/test2"}, {"longUrl": "invalidUrl"} ] }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/shortener/shorten"
payload = "{ \"urls\": [ {\"longUrl\": \"https://example.com/test1\"}, {\"longUrl\": \"https://example.com/test2\"}, {\"longUrl\": \"invalidUrl\"} ] }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/shortener/shorten")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"urls\": [ {\"longUrl\": \"https://example.com/test1\"}, {\"longUrl\": \"https://example.com/test2\"}, {\"longUrl\": \"invalidUrl\"} ] }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/shortener/shorten");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"urls\": [ {\"longUrl\": \"https://example.com/test1\"}, {\"longUrl\": \"https://example.com/test2\"}, {\"longUrl\": \"invalidUrl\"} ] }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"longUrl": "https://example.com/test1",
"shortUrl": "https://sms.tl/dvRINN",
"error": false
},
{
"longUrl": "https://example.com/test2",
"shortUrl": "https://sms.tl/GFA6Fm",
"error": false
},
{
"longUrl": "invalidUrl",
"shortUrl": null,
"error": true
}
]
}
Generador de imágenes
Generación de imágenes
POST {{DASHBOARD_HOST}}/api/rest/images/generate
Request
curl -X POST '{{DASHBOARD_HOST}}/api/rest/images/generate' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"images": [
{
"externalId": "test1",
"extension": "jpg",
"base64": "BASE64_ENCODED_STRING"
},
{
"externalId": "test2",
"extension": "png",
"base64": "BASE64_ENCODED_STRING"
}
]
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/images/generate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"images": [
{
"externalId": "test1",
"extension": "jpg",
"base64": "BASE64_ENCODED_STRING"
},
{
"externalId": "test2",
"extension": "png",
"base64": "BASE64_ENCODED_STRING"
}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/images/generate");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"images\": [ { \"externalId\": \"test1\", \"extension\": \"jpg\", \"base64\": \"BASE64_ENCODED_STRING\" }, { \"externalId\": \"test2\", \"extension\": \"png\", \"base64\": \"BASE64_ENCODED_STRING\" } ] }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/images/generate',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "images": [ { "externalId": "test1", "extension": "jpg", "base64": "BASE64_ENCODED_STRING" }, { "externalId": "test2", "extension": "png", "base64": "BASE64_ENCODED_STRING" } ] }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/images/generate"
payload = "{ \"images\": [ { \"externalId\": \"test1\", \"extension\": \"jpg\", \"base64\": \"BASE64_ENCODED_STRING\" }, { \"externalId\": \"test2\", \"extension\": \"png\", \"base64\": \"BASE64_ENCODED_STRING\" } ] }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/images/generate")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"images\": [ { \"externalId\": \"test1\", \"extension\": \"jpg\", \"base64\": \"BASE64_ENCODED_STRING\" }, { \"externalId\": \"test2\", \"extension\": \"png\", \"base64\": \"BASE64_ENCODED_STRING\" } ] }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/images/generate");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"images\": [ { \"externalId\": \"test1\", \"extension\": \"jpg\", \"base64\": \"BASE64_ENCODED_STRING\" }, { \"externalId\": \"test2\", \"extension\": \"png\", \"base64\": \"BASE64_ENCODED_STRING\" } ] }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"externalId": "test1",
"imageUrl": "{{DASHBOARD_HOST}}/uploads/UCuh4pdOsW58ZEXX/1b4f0e9851971998e732078544c96b36c3d01cedf7caa332359d6f1d83567014.jpg",
"error": false
},
{
"externalId": "test2",
"imageUrl": "{{DASHBOARD_HOST}}/uploads/UCuh4pdOsW58ZEXX/60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752.jpg",
"error": false
}
]
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| externalId | string | Sí | ID externo para identificar la imagen en la respuesta. |
| extension | string | Sí | Extensión de la imagen. Extensiones permitidas: jpg, png. |
| base64 | string | Sí | Imagen codificada en Base64. |
Eventos
Notificaciones de eventos
Introducción
El servicio de notificación de estados tiene como objetivo informar al servidor del cliente de los eventos que se generan en el servicio de 360nrs. Las notificaciones se realizarán para los envíos realizados por cualquier tipo de canal. De esta forma el cliente podrá trackear en tiempo real cada envío realizado.
Un solo envío puede provocar múltiples eventos, por lo que un envío masivo puede generar un número importante de notificaciones hacia el servidor cliente. Para evitar la saturación del servidor, los eventos a notificar se encolan en 360nrs, por lo que se pueden producir retrasos en la entrega de notificaciones si el servidor cliente es incapaz de gestionar el volumen de notificaciones generadas.
Para poder activar esta funcionalidad el cliente debe facilitar una URL donde se realizarán las peticiones HTTP POST para notificar un evento.
Recibir una nueva notificación de evento
HTTP METHOD: POST Content-Type: application/x-www-form-urlencoded
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
| id | string | Identificador alfanumérico que se entregó en el envío por API del mensaje. Si el mensaje se ha enviado por la web, no tendrá valor. |
| channel | string | Indica a qué canal pertenece el envío al que hace referencia la notificación. Los valores posibles son: sms, mailing, landing, text2speech. |
| contactId | integer | Identificador único del contacto. |
| campaignId | integer | Identificador de la campaña. |
| formId | integer | Identificador único de formulario. (Únicamente para eventos de formulario). |
| campaignName | string | Nombre de campaña. |
| event | string | Indica el evento que se ha producido. Los valores posibles son: delivered, opened, clicked, unsubscribed, hard_bounced, complaint, sent, soft_bounced, undelivered, rejected, expired, unsubscribed_landing, form_opened, form_submitted, form_rejected. |
| extra | string | Parámetro extra con información adicional del evento en formato JSON. El evento "form_submitted" contendrá los valores introducidos en el formulario por el usuario en el siguiente formato: {"formValues":{"param1":"value1", "param2": "value2", ...}} El evento "clicked" contendrá la url a la que se ha dado clic: {"url":"url_encoded"}. |
| smtpResponse | string | Variable opcional que está definida para channel mailing y los eventos delivered, hard_bounced, soft_bounced. Se retorna la respuesta del servidor SMTP del mail destinatario. |
| eventDate | string | Fecha en la que ocurrió el evento. |
Las notificaciones se reintentarán hasta en 5 ocasiones en caso de que el servidor del cliente responda con un código HTTP distinto a 200 OK.
El tiempo de espera entre notificaciones es progresivo, de manera que el primer reintento se realizará en 1 minuto, el segundo a los 2 minutos del reintento anterior, el tercero a los 3 minutos, etc.
Reporte de eventos por envío
Reporte de eventos
GET {{DASHBOARD_HOST}}/api/rest/sendings/<sendingId>/reports/events
curl -X GET '{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events',
headers: {
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events"
payload = {}
headers = {
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/events");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Filtros
| Parámetro | Descripción |
|---|---|
| beforeDate | Mostrar los resultados anteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601. |
| afterDate | Mostrar los resultados posteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601. |
| showCustomFields | Si se indica con valor 1 muestra los campos personalizado utilizados. |
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar RFC 3986 para ser admitidos por el servidor. Por ejemplo, para consultar el reporte de eventos entre las fechas 2019-01-01T00:00:00+00:00 y 2019-02-01T00:00:00+00:00:
{{DASHBOARD_HOST}}/api/rest/sendings/{sendingId}/reports/events?afterDate=2019-01-01T00%3A00%3A00%2B00%3A00&beforeDate=2019-02-01T00%3A00%3A00%2B00%3A00
Obtener el reporte detallado de eventos generados por un envío. La respuesta será en formato text/csv y contendrá las siguientes columnas:
Para envíos de voz:
campaignName ,campaignId, sendingId, contactId, event, phone, email, landline, countryIso, callDurationSeconds, createdAt
Para el resto de canales:
campaignName, campaignId, sendingId, contactId, event, phone, email, landline, countryIso, browser, os, url, createdAt
Reporte de pulsaciones
Introducción
Devuelve un informe con los números de teléfono junto a la tecla pulsada y el mensaje de la locución.
Url
GET {{DASHBOARD_HOST}}/api/rest/sendings/<sendingId>/reports/keys
curl -X GET '{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys',
headers: {
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys"
payload = {}
headers = {
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/sendings/1/reports/keys");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Filtros
| Parámetro | Descripción |
|---|---|
| beforeDate | Mostrar los resultados anteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601. |
| afterDate | Mostrar los resultados posteriores a la fecha indicada. La fecha se debe especificar en formato ISO 8601. |
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar RFC 3986 para ser admitidos por el servidor. Por ejemplo, para consultar el reporte de pulsaciones de tecla entre las fechas 2019-01-01T00:00:00+00:00 y 2019-02-01T00:00:00+00:00:
{{DASHBOARD_HOST}}/api/rest/sendings/{sendingId}/reports/keys?afterDate=2019-01-01T00%3A00%3A00%2B00%3A00&beforeDate=2019-02-01T00%3A00%3A00%2B00%3A00
Obtener el reporte detallado de pulsaciones de tecla en un envío de voz interactiva. La respuesta será en formato text/csv y contendrá las siguientes columnas: phonenumber, key, message
OTP
Generar código
POST {{DASHBOARD_HOST}}/api/rest/otp/generate
curl -X POST '{{DASHBOARD_HOST}}/api/rest/otp/generate' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"recipient": "34666555444"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/otp/generate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"recipient": "34666555444"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/otp/generate");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"recipient\": \"34666555444\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/otp/generate',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "recipient": "34666555444" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/otp/generate"
payload = "{ \"recipient\": \"34666555444\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/otp/generate")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"recipient\": \"34666555444\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/otp/generate");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"recipient\": \"34666555444\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
HTTP Response Code 200 (OK)
{
"data": {
"recipient": "34666555444",
"code": "1234",
"attempts": 0,
"maxAttempts": 3,
"maxSecondsValidity": 60,
"appId": "",
"createdAt": "2020-01-01T12:00:00+00:00",
"updatedAt": "2020-01-01T12:00:00+00:00",
"expiresAt": "2020-01-01T12:01:00+00:00"
}
}
Error response (HTTP 422)
{
"error": {
"code": 422,
"description": "The recipient field must be a valid phone or email."
}
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| recipient | string | Sí | Número de teléfono o email del usuario. |
| alpha | boolean | No | Indica si el código es alfanumérico o numérico. El valor por defecto es false. |
| length | integer | No | Tamaño del código. El valor mínimo es 3 y el valor máximo es 10.El valor por defecto es 4. |
| maxAttempts | integer | No | Número máximo de reintentos. El valor mínimo es 1 y el valor máximo es 10.El valor por defecto es 3. |
| maxSecondsValidity | integer | No | Número máximo de segundos entre la generación y la validación del código. El valor mínimo es 30 y el valor máximo es 600.El valor por defecto es 60. |
| appId | string | No | Un mismo teléfono o email puede validarse a la vez siempre que sea con un appId distinto.El valor por defecto es "". |
| rejectIfPendingCode | boolean | No | Evita la generación de un nuevo código OTP si existe uno anterior en estado pendiente. El valor por defecto es false. |
Comprobar código
POST {{DASHBOARD_HOST}}/api/rest/otp/check
curl -X POST '{{DASHBOARD_HOST}}/api/rest/otp/check' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"recipient": "34666555444",
"code": "1234"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/otp/check',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"recipient": "34666555444",
"code": "1234"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/otp/check");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"recipient\": \"34666555444\", \"code\": \"1234\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/otp/check',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "recipient": "34666555444", "code": "1234" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/otp/check"
payload = "{ \"recipient\": \"34666555444\", \"code\": \"1234\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/otp/check")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"recipient\": \"34666555444\", \"code\": \"1234\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/otp/check");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"recipient\": \"34666555444\", \"code\": \"1234\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
HTTP Response Code 200 (OK)
{
"data": {
"valid": true,
"reason": "Valid",
"otp": {
"data": {
"recipient": "34666555444",
"code": "1234",
"attempts": 1,
"maxAttempts": 3,
"maxSecondsValidity": 60,
"appId": "",
"createdAt": "2020-01-01T12:00:00+00:00",
"updatedAt": "2020-01-01T12:00:00+00:00",
"expiresAt": "2020-01-01T12:01:00+00:00"
}
}
}
}
{
"data": {
"valid": false,
"reason": "Expired",
"otp": {
"data": {
"recipient": "34666555444",
"code": "1234",
"attempts": 1,
"maxAttempts": 3,
"maxSecondsValidity": 60,
"appId": "",
"createdAt": "2020-01-01T12:00:00+00:00",
"updatedAt": "2020-01-01T12:00:00+00:00",
"expiresAt": "2020-01-01T12:01:00+00:00"
}
}
}
}
Error response (HTTP 422)
{
"error": {
"code": 422,
"description": "The recipient field is required."
}
}
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| recipient | string | Sí | Número de teléfono o email del usuario. |
| code | string | Sí | Código a comprobar. |
| caseSensitive | boolean | No | Distingue entre mayúsculas y minúsculas en la comparación del código. El valor por defecto es false. |
| appId | string | No | Un mismo teléfono o email puede validarse a la vez siempre que sea con un appId distinto.El valor por defecto es "". |
Respuestas
| Motivo | Válido | Descripción |
|---|---|---|
| Valid | Sí | El código es válido. |
| Invalid code | No | El código no es válido. |
| Maximum attempts reached | No | El número de intentos ha superado el máximo. |
| Expired | No | El tiempo de validación ha superado el máximo. |
Cuenta
Devuelve información de la cuenta como username, email, zona horaria, idioma, saldo, fecha de creación, país y moneda.
GET {{DASHBOARD_HOST}}/api/rest/account
curl -X GET '{{DASHBOARD_HOST}}/api/rest/account' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/account',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/account");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/account',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/account"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/account")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/account");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Organización
Las APIs de organización permiten gestionar los usuarios que forman parte de la organización del usuario autenticado: invitar a nuevos usuarios, consultarlos, activarlos, desactivarlos o eliminarlos, repartir saldo entre ellos y consultar las campañas de toda la organización.
Para utilizarlas, el usuario autenticado debe pertenecer a una organización y tener el permiso de gestión de usuarios que requiere cada operación. Son los mismos permisos que se aplican en la gestión de usuarios de la plataforma:
| Operación | Permiso necesario |
|---|---|
| Listado de invitaciones | Ver invitaciones |
| Crear y reenviar invitaciones | Crear invitaciones |
| Cancelar invitaciones | Eliminar invitaciones |
| Listado de usuarios | Ver usuarios |
| Activar y desactivar usuarios | Editar usuarios |
| Eliminar usuarios | Eliminar usuarios |
| Transferir saldo | Editar usuarios |
| Listado de campañas de la organización | Ver usuarios y Ver estadísticas |
Si el usuario no pertenece a una organización se responderá con un código HTTP 403 y la descripción User does not belong to an organization. Si no tiene el permiso necesario se responderá con un código HTTP 403 y la descripción User is not allowed to perform this action.
Las operaciones sobre un recurso concreto (una invitación o un usuario) solo pueden realizarse sobre recursos de la propia organización. Si el identificador no existe o pertenece a otra organización se responderá con un código HTTP 404.
Los listados están paginados. Con el parámetro limit se indica el total de resultados por página (valor por defecto: 100, máximo: 1000) y con el parámetro page la página a consultar. La respuesta incluye la información de paginación en el campo meta.pagination.
Invitaciones
Listado de invitaciones
GET {{DASHBOARD_HOST}}/api/rest/organization/invitations
curl -X GET '{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/invitations?status=pending");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"id": 12,
"email": "john.doe@example.com",
"role": "user",
"status": "pending",
"createdAt": "2026-10-13T09:30:00+00:00",
"expiresAt": "2026-10-14T09:30:00+00:00"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
Devuelve las invitaciones de la organización en cualquier estado, incluidas las canceladas, ordenadas de la más reciente a la más antigua.
Filtros
| Parámetro | Descripción |
|---|---|
| limit | Total de invitaciones a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000. |
| status | Filtrar por estado de la invitación. Valores disponibles: pending, accepted, cancelled, expired. Ejemplo: ?status=pending. |
| Filtrar por el email invitado. Debe coincidir exactamente. Ejemplo: ?email=john.doe%40example.com. | |
| role | Filtrar por el rol de la invitación. Valores disponibles: admin, user. Ejemplo: ?role=admin. |
| beforeDate | Mostrar las invitaciones creadas antes de la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?beforeDate=2026-01-01T00%3A00%3A00%2B00%3A00. |
| afterDate | Mostrar las invitaciones creadas después de la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?afterDate=2026-01-01T00%3A00%3A00%2B00%3A00. |
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar RFC 3986 para ser admitidos por el servidor.
Campos de la respuesta
| Parámetro | Descripción |
|---|---|
| id | Identificador de la invitación. |
| Email al que se ha enviado la invitación. | |
| role | Rol que tendrá el usuario al aceptar la invitación. Posibles valores: admin, user. |
| status | Estado de la invitación. Posibles valores: pending: Invitación enviada, pendiente de aceptar y sin caducar. accepted: El destinatario ha aceptado la invitación. cancelled: La invitación ha sido cancelada. expired: La invitación ha caducado sin ser aceptada. |
| createdAt | Fecha de creación de la invitación. |
| expiresAt | Fecha de caducidad de la invitación. Pasada esta fecha ya no se puede aceptar. |
Crear una invitación
POST {{DASHBOARD_HOST}}/api/rest/organization/invitations
curl -X POST '{{DASHBOARD_HOST}}/api/rest/organization/invitations' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"email": "john.doe@example.com",
"role": "user"
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/invitations',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"email": "john.doe@example.com",
"role": "user"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/invitations");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"email\": \"john.doe@example.com\", \"role\": \"user\" }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/organization/invitations',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "email": "john.doe@example.com", "role": "user" }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/invitations"
payload = "{ \"email\": \"john.doe@example.com\", \"role\": \"user\" }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/invitations")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"email\": \"john.doe@example.com\", \"role\": \"user\" }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/invitations");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"email\": \"john.doe@example.com\", \"role\": \"user\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 201)
{
"data": {
"id": 12,
"email": "john.doe@example.com",
"role": "user",
"status": "pending",
"createdAt": "2026-10-13T09:30:00+00:00",
"expiresAt": "2026-10-14T09:30:00+00:00"
}
}
Error response (HTTP 429)
{
"error": {
"code": 429,
"description": "Too many invitation emails to this address, try again later"
}
}
Invita a un nuevo usuario a unirse a la organización. El destinatario recibirá un email con un enlace para aceptar la invitación, configurar su contraseña y completar su perfil. La invitación caduca a las 24 horas.
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| string | Sí | Email del usuario a invitar. Longitud máxima: 255 caracteres. No puede tener otra invitación pendiente en la organización ni estar en uso por otro usuario de la plataforma. | |
| role | string | Sí | Rol que tendrá el usuario al aceptar la invitación. Valores disponibles: admin, user. |
Si la invitación se ha creado correctamente se responderá con un código HTTP 201 y la invitación creada. Los campos de la respuesta son los mismos que los del listado de invitaciones.
Si algún parámetro no es válido se responderá con un código HTTP 422.
Límites de envío
Para evitar el envío masivo de emails, el envío de invitaciones está limitado:
- Se puede enviar un email de invitación cada 10 minutos a un mismo destinatario. El límite se aplica tanto al crear como al reenviar invitaciones, también si se vuelve a invitar a un email cuya invitación se acaba de cancelar.
- Cada organización puede enviar un máximo de 25 emails de invitación por hora.
Si se supera alguno de estos límites, no se creará ni reenviará la invitación y se responderá con un código HTTP 429. La cabecera Retry-After indica los segundos que hay que esperar antes de volver a intentarlo.
Cancelar una invitación
POST {{DASHBOARD_HOST}}/api/rest/organization/invitations/<ID>/cancel
curl -X POST '{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/cancel");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Error response (HTTP 409)
{
"error": {
"code": 409,
"description": "Only pending invitations can be cancelled"
}
}
Cancela una invitación pendiente. El enlace enviado al destinatario deja de ser válido, pero la invitación se mantiene en el listado de invitaciones con el estado cancelled.
Parámetros URL
| Parámetro | Descripción |
|---|---|
| ID | Identificador de la invitación. |
Si la petición ha sido correcta se responderá con un código HTTP 204.
Solo se pueden cancelar invitaciones en estado pending. En cualquier otro caso se responderá con un código HTTP 409.
Reenviar una invitación
POST {{DASHBOARD_HOST}}/api/rest/organization/invitations/<ID>/resend
curl -X POST '{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/invitations/12/resend");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Error response (HTTP 409)
{
"error": {
"code": 409,
"description": "Only pending invitations can be resent"
}
}
Vuelve a enviar el email de invitación al destinatario y renueva su caducidad: la invitación caducará a las 24 horas del reenvío.
Parámetros URL
| Parámetro | Descripción |
|---|---|
| ID | Identificador de la invitación. |
Si la petición ha sido correcta se responderá con un código HTTP 204.
Solo se pueden reenviar invitaciones en estado pending. En cualquier otro caso se responderá con un código HTTP 409. Para volver a invitar a un email cuya invitación ha caducado o se ha cancelado, crea una nueva invitación.
El reenvío está sujeto a los mismos límites de envío que la creación de invitaciones.
Usuarios
Listado de usuarios
GET {{DASHBOARD_HOST}}/api/rest/organization/users
curl -X GET '{{DASHBOARD_HOST}}/api/rest/organization/users' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/users',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/users");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/organization/users',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/users"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/users")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/users");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"id": 101,
"username": "john",
"email": "john@example.com",
"roles": [
"admin"
],
"status": "active",
"balance": 125.5,
"balance_limit": 0,
"effective_balance": 125.5,
"language": "es",
"createdAt": "2026-01-15T10:00:00+00:00"
},
{
"id": 102,
"username": "alice",
"email": "alice@example.com",
"roles": [
"user"
],
"status": "active",
"balance": 48.2,
"balance_limit": 0,
"effective_balance": 48.2,
"language": "en",
"createdAt": "2026-03-02T08:45:00+00:00"
}
],
"meta": {
"pagination": {
"total": 2,
"count": 2,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
Devuelve los usuarios activos y desactivados de la organización, incluido el usuario autenticado. Los usuarios eliminados no se incluyen.
Filtros
| Parámetro | Descripción |
|---|---|
| limit | Total de usuarios a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000. |
| role | Filtrar por rol. Ejemplo: ?role=admin. |
| status | Filtrar por estado. Valores disponibles: active, disabled. Ejemplo: ?status=active. |
| search | Buscar por nombre de usuario o email. Devuelve los usuarios cuyo nombre de usuario o email contenga el texto indicado. Ejemplo: ?search=alice. |
Campos de la respuesta
| Parámetro | Descripción |
|---|---|
| id | Identificador del usuario. |
| username | Nombre de usuario. |
| Email del usuario. | |
| roles | Roles asignados al usuario. Ejemplo: ["admin"]. |
| status | Estado del usuario. Posibles valores: active: El usuario puede acceder a la plataforma y a la API. disabled: El usuario está desactivado y no puede acceder a la plataforma ni a la API. |
| balance | Saldo de la cuenta del usuario. En usuarios pospago puede ser negativo, ya que refleja el consumo realizado. |
| balance_limit | Límite de crédito del usuario. En usuarios pospago es un valor negativo que indica el crédito concedido. En usuarios prepago es 0. |
| effective_balance | Saldo disponible para realizar envíos. En usuarios prepago coincide con balance. En usuarios pospago es el crédito disponible: balance menos balance_limit. |
| language | Idioma del usuario. Ejemplo: es. |
| createdAt | Fecha de creación del usuario. |
Desactivar un usuario
POST {{DASHBOARD_HOST}}/api/rest/organization/users/<ID>/deactivate
curl -X POST '{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/users/102/deactivate");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Error response (HTTP 409)
{
"error": {
"code": 409,
"description": "Users can not deactivate themselves"
}
}
Desactiva un usuario de la organización. Mientras esté desactivado no podrá acceder a la plataforma ni a la API. El usuario mantiene su saldo y su límite de crédito.
Parámetros URL
| Parámetro | Descripción |
|---|---|
| ID | Identificador del usuario. |
Si la petición ha sido correcta se responderá con un código HTTP 204. Desactivar un usuario que ya está desactivado no produce ningún cambio.
Un usuario no puede desactivarse a sí mismo. En ese caso se responderá con un código HTTP 409.
Activar un usuario
POST {{DASHBOARD_HOST}}/api/rest/organization/users/<ID>/activate
curl -X POST '{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/users/102/activate");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Vuelve a activar un usuario desactivado, que podrá acceder de nuevo a la plataforma y a la API.
Parámetros URL
| Parámetro | Descripción |
|---|---|
| ID | Identificador del usuario. |
Si la petición ha sido correcta se responderá con un código HTTP 204. Activar un usuario que ya está activo no produce ningún cambio.
Eliminar un usuario
DELETE {{DASHBOARD_HOST}}/api/rest/organization/users/<ID>
curl -X DELETE '{{DASHBOARD_HOST}}/api/rest/organization/users/102' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/users/102',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/users/102");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'delete',
url: '{{DASHBOARD_HOST}}/api/rest/organization/users/102',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/users/102"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/users/102")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/users/102");
client.Timeout = -1;
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Error response (HTTP 409)
{
"error": {
"code": 409,
"description": "Users can not remove themselves from the organization"
}
}
Elimina un usuario de la organización. El usuario eliminado no podrá acceder a la plataforma ni a la API.
El saldo y el límite de crédito que le queden al usuario eliminado se transfieren al usuario que realiza la petición. Sus campañas se siguen mostrando en el listado de campañas de la organización.
Parámetros URL
| Parámetro | Descripción |
|---|---|
| ID | Identificador del usuario. |
Si la petición ha sido correcta se responderá con un código HTTP 204.
Un usuario no puede eliminarse a sí mismo. En ese caso se responderá con un código HTTP 409.
Transferencias de saldo
Transferir saldo entre usuarios
POST {{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance
curl -X POST '{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN' \
-d '{
"fromUserId": 101,
"toUserId": 102,
"amount": 50
}'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"fromUserId": 101,
"toUserId": 102,
"amount": 50
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
String requestBody = "{ \"fromUserId\": 101, \"toUserId\": 102, \"amount\": 50 }";
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(requestBody);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'post',
url: '{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
},
data: '{ "fromUserId": 101, "toUserId": 102, "amount": 50 }'
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance"
payload = "{ \"fromUserId\": 101, \"toUserId\": 102, \"amount\": 50 }"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
request.body = "{ \"fromUserId\": 101, \"toUserId\": 102, \"amount\": 50 }"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/transfers/effective-balance");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{ \"fromUserId\": 101, \"toUserId\": 102, \"amount\": 50 }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response (HTTP 201)
{
"data": {
"id": 98765,
"status": "completed",
"fromUserId": 101,
"toUserId": 102,
"amount": 50,
"createdAt": "2026-10-13T11:15:00+00:00"
}
}
Error response (HTTP 402)
{
"error": {
"code": 111,
"description": "Not enough credits"
}
}
Transfiere saldo disponible para envíos (effective_balance) de un usuario de la organización a otro. El usuario de origen puede ser cualquier usuario de la organización, incluido el usuario autenticado.
La forma de transferir el saldo depende del tipo de facturación de los usuarios:
- Prepago: se transfiere saldo de la cuenta (
balance). - Pospago: se transfiere límite de crédito (
balance_limit). El usuario de origen no puede transferir más límite de crédito del que tiene.
Ambos usuarios deben tener el mismo tipo de facturación. La transferencia queda registrada en el historial de movimientos de los dos usuarios.
Parámetros
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| fromUserId | integer | Sí | Identificador del usuario de origen. Debe pertenecer a la organización. |
| toUserId | integer | Sí | Identificador del usuario de destino. Debe pertenecer a la organización y ser distinto del usuario de origen. |
| amount | number | Sí | Importe a transferir, en la moneda de la cuenta. Debe ser mayor que 0 y tener como máximo 2 decimales. |
Campos de la respuesta
Si la transferencia se ha realizado correctamente se responderá con un código HTTP 201 y los siguientes campos:
| Parámetro | Descripción |
|---|---|
| id | Identificador de la transferencia. |
| status | Estado de la transferencia. Las transferencias se realizan de forma inmediata, por lo que su valor es siempre completed. |
| fromUserId | Identificador del usuario de origen. |
| toUserId | Identificador del usuario de destino. |
| amount | Importe transferido. |
| createdAt | Fecha de la transferencia. |
Errores de la transferencia
| Código HTTP | Código de error | Descripción |
|---|---|---|
| 402 | 111 | Not enough credits: El usuario de origen no tiene saldo disponible suficiente. |
| 409 | 409 | Balance can only be transferred between users with the same billing type (prepaid or postpaid): Los usuarios tienen distinto tipo de facturación. |
| 409 | 409 | Balance can not be transferred between these users: No es posible transferir saldo entre los usuarios indicados. |
| 422 | 422 | Algún parámetro no es válido. |
Campañas de la organización
Listado de campañas de la organización
GET {{DASHBOARD_HOST}}/api/rest/organization/campaigns
curl -X GET '{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/organization/campaigns?userId=102");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"id": 1,
"name": "My campaign",
"type": "basic",
"createdAt": "2026-10-01T11:31:16+00:00",
"updatedAt": "2026-10-01T11:31:16+00:00",
"sendings": {
"data": [
{
"id": 1,
"campaignName": "My campaign",
"status": "OPENED",
"channel": "sms",
"total": 2,
"processed": 2,
"totalSmsParts": 4,
"cost": 0.02,
"currency": "EUR",
"tags": [],
"scheduledAt": null,
"expiresAt": null,
"startedAt": null,
"finishedAt": null,
"createdAt": "2026-10-01T11:31:16+00:00",
"updatedAt": "2026-10-01T11:31:22+00:00",
"events": {
"delivered": 2,
"opened": 0,
"opened_unique": 0,
"clicked": 0,
"clicked_unique": 0,
"unsubscribed": 0,
"hard_bounced": 0,
"complaint": 0,
"sent": 2,
"soft_bounced": 0,
"undelivered": 0,
"rejected": 0,
"expired": 0,
"unsubscribed_landing": 0
}
}
]
},
"owner": {
"data": {
"id": 102,
"username": "alice",
"email": "alice@example.com"
}
}
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 100,
"current_page": 1,
"total_pages": 1,
"links": []
}
}
}
Devuelve las campañas de todos los usuarios de la organización, ordenadas de la más reciente a la más antigua. Se incluyen también las campañas de los usuarios eliminados.
Filtros
| Parámetro | Descripción |
|---|---|
| limit | Total de campañas a mostrar en una única petición. Valor por defecto: 100. Máximo: 1000. |
| userId | Filtrar por el usuario propietario de la campaña. Ejemplo: ?userId=102. |
| name | Filtrar por nombre de campaña. Es posible utilizar el carácter "*" como "wildcard". Ejemplo: ?name=CAMPAIGN_2020_*. |
| channel | Filtrar por canal. Valores disponibles: sms, mailing, landing, text2speech, voice-interactive. Ejemplo: ?channel=sms. |
| beforeDate | Mostrar los resultados anteriores a la fecha de creación indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?beforeDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
| afterDate | Mostrar los resultados posteriores a la fecha de creación indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?afterDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
| updatedBeforeDate | Mostrar los resultados cuya última actualización sea anterior a la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?updatedBeforeDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
| updatedAfterDate | Mostrar los resultados cuya última actualización sea posterior a la fecha indicada. La fecha se debe especificar en formato ISO 8601. Ejemplo: ?updatedAfterDate=2019-01-01T00%3A00%3A00%2B00%3A00. |
Los parámetros deben estar codificados correctamente (urlencode) respecto al estándar RFC 3986 para ser admitidos por el servidor.
Campos de la respuesta
Los campos de cada campaña son los mismos que los del listado de campañas, salvo los enlaces links de las campañas y de sus envíos, que no se incluyen. Además, se incluye el siguiente campo adicional:
| Parámetro | Descripción |
|---|---|
| owner.data.id | Identificador del usuario propietario de la campaña. |
| owner.data.username | Nombre de usuario del propietario de la campaña. |
| owner.data.email | Email del propietario de la campaña. |
Cobertura
Devuelve la cobertura SMS completa por operadora.
GET {{DASHBOARD_HOST}}/api/rest/sms/coverage
curl -X GET '{{DASHBOARD_HOST}}/api/rest/sms/coverage' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/sms/coverage',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/sms/coverage");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/sms/coverage',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/sms/coverage"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/sms/coverage")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/sms/coverage");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"countryIso": "AD",
"countryName": "Andorra",
"networkName": "Default",
"mcc": "213",
"mnc": null,
"cost": 0.065,
"currencyCode": "EUR",
"currencySymbol": "€"
},
{
"countryIso": "AD",
"countryName": "Andorra",
"networkName": "Servei De Tele. DAndorra",
"mcc": "213",
"mnc": "003",
"cost": 0.065,
"currencyCode": "EUR",
"currencySymbol": "€"
},
{
"countryIso": "AE",
"countryName": "United Arab Emirates",
"networkName": "Default",
"mcc": "424",
"mnc": null,
"cost": 0.0868,
"currencyCode": "EUR",
"currencySymbol": "€"
}
]
}
Devuelve la cobertura SMS agrupada por país indicando el coste mínimo y máximo de cada país.
GET {{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry
curl -X GET '{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic YOUR_AUTH_TOKEN'
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic YOUR_AUTH_TOKEN',
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpsURLConnection;
public class App {
public static void main(String[] args) {
try {
URL url = new URL("{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic YOUR_AUTH_TOKEN");
connection.setRequestProperty("Accept", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
} catch (Exception e) {
// TODO: handle exception
}
}
}
var axios = require('axios');
var config = {
method: 'get',
url: '{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
import requests
url = "{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry"
payload = {}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_AUTH_TOKEN'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
require "uri"
require "net/http"
url = URI("{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Basic YOUR_AUTH_TOKEN"
response = https.request(request)
puts response.read_body
using System;
using RestSharp;
namespace HelloWorldApplication {
class HelloWorld {
static void Main(string[] args) {
var client = new RestClient("{{DASHBOARD_HOST}}/api/rest/sms/coverageByCountry");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic YOUR_AUTH_TOKEN");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
}
}
}
Response
{
"data": [
{
"countryIso": "AD",
"countryName": "Andorra",
"networks": [
"Servei De Tele. DAndorra"
],
"minCost": 0.065,
"maxCost": 0.065,
"currencyCode": "EUR",
"currencySymbol": "€"
},
{
"countryIso": "AE",
"countryName": "United Arab Emirates",
"networks": [
"DU",
"Etisalat"
],
"minCost": 0.0868,
"maxCost": 0.0868,
"currencyCode": "EUR",
"currencySymbol": "€"
}
]
}
Errores
| Error Code | HTTP Code | Description |
|---|---|---|
| 0 | 202 | Accepted for delivery |
| 101 | 500 | Internal Database error |
| 102 | 400 | No valid recipients |
| 103 | 401 | Username or password unknown |
| 104 | 400 | Text message missing |
| 105 | 400 | Text message too long |
| 106 | 400 | Sender missing |
| 107 | 400 | Sender too long |
| 108 | 400 | No valid Datetime for send |
| 109 | 400 | Notification URL incorrect |
| 110 | 400 | Exceeded maximum parts allowed or incorrect number of parts |
| 111 | 402 | Not enough credits |
| 112 | 401 | IP address not allowed |
| 113 | 400 | Invalid coding |
| 114 | 400 | Invalid subject |
| 115 | 400 | Sender is not verified |
| 116 | 400 | Invalid replyTo |
| 117 | 400 | ReplyTo is not verified |
| 118 | 401 | Email blocked for exceeding the hard-bounced limit allowed |
| 119 | 400 | Invalid expiration date |
| 120 | 400 | Invalid GUID |
| 121 | 400 | Invalid scheduled date |
| 122 | 500 | Update error |
| 123 | 500 | Delete error |
| 125 | 400 | Invalid JSON |
| 126 | 400 | Empty campaign name |
| 130 | 400 | Invalid voice language |
| 131 | 400 | Invalid voice gender |
| 132 | 400 | Invalid voice caller |
| 133 | 400 | Invalid audio URL |
| 134 | 400 | Unsupported audio format |
| 140 | 400 | Template missing |
| 141 | 400 | Missing landing placeholder |
| 142 | 400 | Can't split variable placeholders |
| 150 | 400 | Missing billing profile |
| 151 | 400 | Error retrieving TPV url |
| 152 | 400 | Invalid VAT |
| 153 | 400 | Invalid method |
| 154 | 400 | Invalid conversion rate |
| 155 | 400 | Max limit reached |
| 156 | 400 | Min limit reached |
| 157 | 400 | Error generating invoice |
| 160 | 400 | Invalid voice interactive language |
| 161 | 400 | Invalid voice interactive gender |
| 162 | 400 | Invalid voice interactive caller |
| 163 | 400 | Invalid voice interactive audio URL |
| 164 | 400 | Unsupported voice interactive audio format |
| 165 | 400 | Invalid voice interactive speech type |
| 166 | 400 | Ivalid voice interactive menu option type |
| 167 | 400 | Trying to save an existing campaign |
| 168 | 400 | Empty speech type |
| 169 | 400 | Empty menu |
| 170 | 400 | Empty phone key |
| 171 | 400 | Phone Key is not a number |
| 172 | 400 | Phone key out of range |
| 173 | 400 | Empty menu options for sub menu |
| 174 | 400 | Empty phone prefix for call transfer |
| 175 | 400 | Empty phone for call transfer |
| 176 | 400 | Call retries value is not an integer |
| 177 | 400 | Call retries value out of range |
| 178 | 400 | Cost limit value is not an integer |
| 179 | 400 | Speech retries value is not an integer |
| 180 | 400 | Speech retries value out of range |
| 181 | 400 | Speech timeout seconds value is not an integer |
| 182 | 400 | Speech timeout seconds value out of range |
| 183 | 400 | Available times value is not an array |
| 184 | 400 | Available times day is not an integer |
| 185 | 400 | Available times day out of range |
| 186 | 400 | Available times from hour format error |
| 187 | 400 | Available times to hour format error |
| 188 | 400 | Available times from hour is greater than to hour |
| 189 | 400 | Missing available time object property |
| 190 | 400 | Call Retries is specified but its value is empty |
| 191 | 400 | Cost limit is specified but its value is empty |
| 192 | 400 | Speech Retries is specified but its value is empty |
| 193 | 400 | Speech timeout seconds is specified but its value is empty |
| 194 | 400 | Available times is specified but its value is empty |
| 195 | 400 | No valid contacts external IDs |
| 196 | 400 | Available times range is too short |
| 422 | 422 | Input validation error |
Anexos
Rango de IPs
Para evitar problemas, si espera tráfico de nuestra API (notificaciones de informes de entrega), debería añadir los siguientes rangos de IP a su firewall:
- 89.17.205.192/26
- 89.17.219.128/26
Conjunto de caracteres GSM
Conjunto de caracteres GSM básicos
| 0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | |
| 0x00 | @ | Δ | SP | 0 | ¡ | P | ¿ | p |
| 0x01 | £ | _ | ! | 1 | A | Q | a | q |
| 0x02 | $ | Φ | " | 2 | B | R | b | r |
| 0x03 | ¥ | Γ | # | 3 | C | S | c | s |
| 0x04 | è | Λ | ¤ | 4 | D | T | d | t |
| 0x05 | é | Ω | % | 5 | E | U | e | u |
| 0x06 | ù | Π | & | 6 | F | V | f | v |
| 0x07 | ì | Ψ | ' | 7 | G | W | g | w |
| 0x08 | ò | Σ | ( | 8 | H | X | h | x |
| 0x09 | Ç | Θ | ) | 9 | I | Y | i | y |
| 0x0A | LF | Ξ | * | : | J | Z | j | z |
| 0x0B | Ø | ESC | + | ; | K | Ä | k | ä |
| 0x0C | ø | Æ | , | < | L | Ö | l | ö |
| 0x0D | CR | æ | - | = | M | Ñ | m | ñ |
| 0x0E | Å | ß | . | > | N | Ü | n | ü |
| 0x0F | å | É | / | ? | O | § | o | à |
* Caracteres especiales
Conjunto de caracteres GSM extendidos
| 0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | |
| 0x00 | | | |||||||
| 0x01 | ||||||||
| 0x02 | ||||||||
| 0x03 | ||||||||
| 0x04 | ^ | |||||||
| 0x05 | € | |||||||
| 0x06 | ||||||||
| 0x07 | ||||||||
| 0x08 | { | |||||||
| 0x09 | } | |||||||
| 0x0A | FF | |||||||
| 0x0B | SS2 | |||||||
| 0x0C | [ | |||||||
| 0x0D | CR2 | ~ | ||||||
| 0x0E | ] | |||||||
| 0x0F | \ |
* Caracteres especiales
Conjunto de caracteres GSM-PT
Conjunto de caracteres GSM-PT básicos
| 0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | |
| 0x00 | @ | Δ | SP | 0 | Í | P | ~ | p |
| 0x01 | £ | _ | ! | 1 | A | Q | a | q |
| 0x02 | $ | ª | " | 2 | B | R | b | r |
| 0x03 | ¥ | Ç | # | 3 | C | S | c | s |
| 0x04 | ê | À | º | 4 | D | T | d | t |
| 0x05 | é | ∞ | % | 5 | E | U | e | u |
| 0x06 | ú | ^ | & | 6 | F | V | f | v |
| 0x07 | í | \ | ' | 7 | G | W | g | w |
| 0x08 | ó | € | ( | 8 | H | X | h | x |
| 0x09 | ç | Ó | ) | 9 | I | Y | i | y |
| 0x0A | LF | | | * | : | J | Z | j | z |
| 0x0B | Ô | ESC | + | ; | K | Ã | k | ã |
| 0x0C | ô | Â | , | < | L | Õ | l | õ |
| 0x0D | CR | â | - | = | M | Ú | m | ` |
| 0x0E | Á | Ê | . | > | N | Ü | n | ü |
| 0x0F | á | É | / | ? | O | § | o | à |
* Caracteres especiales
** Caracteres distintos respecto a GSM
Conjunto de caracteres GSM-PT extendidos
| 0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | |
| 0x00 | | | |||||||
| 0x01 | À | Â | ||||||
| 0x02 | Φ | |||||||
| 0x03 | Γ | |||||||
| 0x04 | ^ | |||||||
| 0x05 | ê | Ω | Ú | € | ú | |||
| 0x06 | Π | |||||||
| 0x07 | Ψ | |||||||
| 0x08 | Σ | { | ||||||
| 0x09 | ç | Θ | } | Í | í | |||
| 0x0A | FF | |||||||
| 0x0B | Ô | SS2 | Ã | ã | ||||
| 0x0C | ô | [ | Õ | õ | ||||
| 0x0D | CR2 | ~ | ||||||
| 0x0E | Á | ] | ||||||
| 0x0F | á | Ê | \ | Ó | ó | â |
* Caracteres especiales
** Caracteres distintos respecto a GSM
Restricciones de envío por país
En muchos países existen normativas diseñadas para proteger a los usuarios frente a comunicaciones no deseadas, tanto por SMS como por llamadas de voz. Para garantizar que tus campañas lleguen correctamente a su destino y evitar bloqueos o sanciones, es imprescindible ajustarse a estas reglas.
Cada país define sus propias condiciones y restricciones en materia de comunicaciones comerciales, por lo que es importante conocer y respetar las particularidades de cada uno. Es importante tener en cuenta que estas condiciones y restricciones están sujetas a la legislación vigente de cada país, y pueden experimentar modificaciones. {{NAME}} no se hace responsable del incumplimiento de las políticas, la responsabilidad recae sobre el cliente.
A continuación, encontrarás las restricciones de los principales países, para que puedas operar con seguridad y eficacia. En caso de tener alguna duda o que el país destinatario no forme parte de los listados a continuación, te recomendamos que contactes con nuestro equipo de atención al cliente.
Consideraciones previas
- En todos los países es obligatorio contar con el consentimiento del cliente para recibir SMS o llamadas de voz.
- En caso de tratarse de SMS promocional, es obligatorio incluir una opción para que el usuario pueda cancelar la suscripción en el contenido de su SMS.
🇫🇷 Francia
Los mensajes SMS con fines comerciales o promocionales enviados a Francia deben cumplir con determinadas normativas legales, que se describen a continuación. En cambio, los mensajes de tipo transaccional no están sujetos a estas restricciones.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de azar o promociones no solicitadas.
Restricciones horarias
Los SMS de marketing solo pueden enviarse de lunes a sábado, entre las 08:00 y las 22:00 horas. Cualquier mensaje enviado fuera de este horario será automáticamente bloqueado y programado para su reenvío en la siguiente franja permitida. Es decir, si intentas enviar un SMS un domingo a las 14:00, no se enviará hasta el lunes a 8:00.
Condiciones del Remitente
Contacta con {{SUPPORT_EMAIL}} para obtener más información y validar tu remitente.
Baja del destinatario
Es obligatorio añadir la mención STOP au [STOP_CODE] como instrucción de cancelación de suscripción voluntaria al final de tus mensajes SMS de marketing para Francia.
🇪🇸 España
Los mensajes SMS enviados a España tienen ciertas condiciones legales. Cualquier SMS identificado como contenido de marketing estará sujeto a las condiciones enumeradas en las secciones a continuación.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de azar o promociones no solicitadas.
🇬🇧 Reino Unido
Los mensajes SMS enviados al Reino Unido están limitados a ciertas condiciones regulatorias. Cualquier SMS identificado como contenido de marketing estará sujeto a las condiciones enumeradas a continuación.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos o promociones no solicitadas.
Si envía contenido para adultos o de juegos de azar, debe asegurarse de que la edad de su destinatario se haya verificado en cumplimiento con las Directrices de PSA y Ofcom.
🇺🇸 Estados Unidos
Los mensajes SMS con fines comerciales o promocionales enviados a Estados Unidos deben cumplir con determinadas normativas legales, que se describen a continuación. En cambio, los mensajes de tipo transaccional no están sujetos a estas restricciones.
Contenido restringido
No está permitido el uso de acortadores de URL públicos, como bit.ly o tinyurl. Sin embargo, se admite el uso de dominios personalizados dentro de estos servicios. Por lo que podrá usar el acortador de url propio de {{NAME}}.
Además, está estrictamente prohibido enviar mensajes que contengan contenido de carácter sexual o pornográfico, material abusivo o acosador, información relacionada con armas de fuego, incluidos fuegos artificiales, así como referencias a alcohol, tabaco o drogas ilegales. También se prohíbe el envío de mensajes sobre juegos de azar, oportunidades de inversión, envío o recepción repetitiva de códigos de acceso de un solo uso (OTP) en nombre de otros proveedores, actividades consideradas de alto riesgo financiero, préstamos o condonación de préstamos, servicios de reparación de crédito, cobro de deudas o asuntos relacionados con impuestos. Igualmente, no se permite contenido vinculado a criptomonedas, incluidas aquellas relacionadas con OTP, consultas inmobiliarias no solicitadas como las del tipo WeBuyHomes, ni promociones asociadas al marketing multinivel.
Condiciones del Remitente
Contacta con {{SUPPORT_EMAIL}} para obtener más información y validar tu remitente.
🇨🇴 Colombia
Restricciones horarias
Los SMS de marketing solo pueden enviarse de lunes a viernes, entre las 07:00 y las 19:00 horas, y los sábados de 8:00 a 15:00. Los domingos y festivos no está permitido enviar mensajes promocionales. Cualquier mensaje enviado fuera de este horario será automáticamente bloqueado y programado para su reenvío en la siguiente franja permitida. Es decir, si intentas envías un SMS un domingo a las 14:00, no se enviará hasta el lunes a 8:00.
Contenido restringido
El contenido de los mensajes SMS promocionales puede requerir, en algunos casos, un registro previo antes de su envío. Adicionalmente, la plataforma {{NAME}} podría añadir automáticamente el nombre del remitente al inicio del mensaje o incorporar una URL al final del mismo, según las condiciones del canal o del país de destino.
Contenido prohibido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de apuestas o promociones no solicitadas.
🇮🇪 Irlanda
Antes de enviar cualquier tráfico de marketing, se requiere el consentimiento expreso (opt-in) de los usuarios de dispositivos móviles.
Contenido restringido
Está estrictamente prohibido el envío de mensajes relacionados con temas políticos, religiosos, juegos de apuestas o promociones no solicitadas.
Condiciones del Remitente
Contacta con {{SUPPORT_EMAIL}} para obtener más información y validar tu remitente.























