shell ruby python javascript

Introduction

Ejemplo de consulta con las 2 keys dentro de los headers

curl --location --request GET 'https://api-example.loyal.ink/api/v2/others' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/others")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/others", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/others", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Todas las peticiones a la API requieren llevar en el header 2 parametros, PUBLIC_KEY y LOYALINK_SIGNATURE.

Ambas credenciales deben ser solicitadas a soporte@alco.cl

Essential Get

Get All Structures

curl --location --request GET 'https://api-example.loyal.ink/api/v2/structures' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/structures")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/structures", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/structures", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

El comando retorna un json de este tipo:

{
    "status": 200,
    "data": [
        {
            "code": "bo_test_structure_17"
        },
        {
            "code": "bo_test_structure_18"
        },
        {
            "code": "bo_test_structure_19"
        },
        {
            "code": "bo_test_structure_21"
        }
    ]
}

Este endpoint obtiene únicamente el campo code de la tabla structures, y su request http es GET https://api-example.loyal.ink/api/v2/structures.

Get Structures Tree with filters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/structures/results?id_level_6=271&status=0' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/structures/results?id_level_6=271&status=0")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/structures/results?id_level_6=271&status=0", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/structures/results?id_level_6=271&status=0", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

El comando retorna un json de este tipo:

{
    "status": 200,
    "total": 1,
    "data": [
        {
            "level_2": "name_level_2_from_structure_with_id_level_6_271",
            "level_3": "name_level_3_from_structure_with_id_level_6_271",
            "level_4": "name_level_4_from_structure_with_id_level_6_271",
            "level_5": "name_level_5_from_structure_with_id_level_6_271",
            "level_6": "name_level_6_from_structure_with_id_level_6_271",
            "level_7": "",
            "id_level_2": "103",
            "id_level_3": "863",
            "id_level_4": "864",
            "id_level_5": "865",
            "id_level_6": "271",
            "id_level_7": "",
            "code": "code_from_structure_with_id_level_6_271"
        }
    ]
}

Parameters active & emails

Parameter Required Description
status false 1 para estructuras activas (son las que están visibles en los filtros de la aplicación loyalink) y 0 para estructuras inactivas (la omisión del parámetro implica que se obtendrá toda la lista sin discriminar el status).
id_level_2 false Admite ids de estructuras de nivel 2.
id_level_3 false Admite ids de estructuras de nivel 3.
id_level_4 false Admite ids de estructuras de nivel 4.
id_level_5 false Admite ids de estructuras de nivel 5.
id_level_6 false Admite ids de estructuras de nivel 6.
id_level_7 false Admite ids de estructuras de nivel 7.

Este endpoint obtiene el árbol de estructuras para todas las que coincidan con el criterio filtrado, y su request http es GET https://api-example.loyal.ink/api/v2/structures/results.

Get All Segments

curl --location --request GET 'https://api-example.loyal.ink/api/v2/segments' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/segments")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/segments", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/segments", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

El comando retorna un json de este tipo:

{
    "status": 200,
    "data": [
        {
            "id": 101,
            "code_2": "seg_genero",
            "code_3": "",
            "level": 2
        },
        {
            "id": 102,
            "code_2": "seg_genero",
            "code_3": "gen_1",
            "level": 3
        },
        {
            "id": 103,
            "code_2": "seg_genero",
            "code_3": "gen_2",
            "level": 3
        },
        {
            "id": 104,
            "code_2": "seg_genero",
            "code_3": "gen_3",
            "level": 3
        },
        {
            "id": 105,
            "code_2": "seg_edad",
            "code_3": "",
            "level": 2
        },
        {
            "id": 106,
            "code_2": "seg_edad",
            "code_3": "edad_1",
            "level": 3
        }
    ]
}

Este endpoint obtiene los campos id, code_2, code_3 y level de la tabla segments, y su request http es GET https://api-example.loyal.ink/api/v2/segments.

Get All Others

curl --location --request GET 'https://api-example.loyal.ink/api/v2/others' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/others")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/others", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/others", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

El comando retorna un json de este tipo:

{ 
    "status": 200,
    "data": [
        {
            "id": 101,
            "code": "otros_example1"
        },
        {
            "id": 102,
            "code": "otros_example2"
        },
        {
            "id": 103,
            "code": "otros_example3"
        }
    ]
}

Este endpoint obtiene los campos id y code de la tabla others, y su request http es GET https://api-example.loyal.ink/api/v2/others.

Get All Polls

curl --location --request GET 'https://api-example.loyal.ink/api/v2/polls' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/polls")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/polls", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/polls", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

El comando retorna un json de este tipo:

{
    "status": 200,
    "data": [
        {
            "code": "TEST_CODE_1"
        },
        {
            "code": "TEST_CODE_2"
        },
        {
            "code": "TEST_CODE_3"
        }
    ]
}

Este endpoint obtiene únicamente el campo code de la tabla polls, y su request http es GET https://api-example.loyal.ink/api/v2/polls.

Get Unsubscribed emails

Get Unsubscribed Emails

Este endpoint obtiene la lista de correos desuscritos, y su request http es GET https://api-example.loyal.ink/api/v2/emails/unsubscribed?from=<START_DATE>&to=<END_DATE>.

Parameters from & to

Parameter Required Description
from true Fecha en formato YYYY-MM-DD.
to true Fecha en formato YYYY-MM-DD.

Example HTTP Request With Parameters

GET https://api-example.loyal.ink/api/v2/emails/unsubscribed?from=2019-05-15&to=2019-05-29

Request Restrictions

  1. El rango de días entre from y to puede ser de a lo más 15 días.
  2. Para consultar todos correos desuscritos de un solo día, se debe enviar como parametros from y to con el mismo valor.

Response Sample 1

Respuesta obtenida:

{
    "status": 400,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 601,
        "detailed_message": "Falta un campo requerido.",
        "wrong_field": "from",
        "index_register": 0,
        "trace_id": "5f23850f44664734925461"
    }
}

Petición sin los parametros from y to.

GET https://api-example.loyal.ink/api/v2/emails/unsubscribed

Response Sample 2

Respuesta obtenida:

{
    "status": 400,
    "message": "Campo con error de formato.",
    "error": {
        "internal_code": 603,
        "detailed_message": "Error de formato en la fecha (formato aceptado YYYY-MM-DD).",
        "wrong_field": "to",
        "index_register": 0,
        "trace_id": "5f238d1944664171760529"
    }
}

Petición de formato invalido.

GET https://api-example.loyal.ink/api/v2/emails/unsubscribed?from=2018-05-15&to=322322sa

Response Sample 3

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "id": 18,
            "email": "example@gmail.com",
            "type": 1
        },
        {
            "id": 19,
            "email": "example2@gmail.com",
            "type": 1
        }
    ]
}

Petición exitosa.

Post emails to unsubscribe

Post emails

curl --location --request POST 'https://api-example.loyal.ink/api/v2/users/unsubscribe' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: text/plain' \
--data-raw '{
    "emails": "example1@loyal.ink,example2@loyal.ink"
}'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/users/unsubscribe")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "text/plain"
request.body = "{\r\n    \"emails\": \"example1@loyal.ink,example2@loyal.ink\"\r\n}"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "{\r\n    \"emails\": \"example1@loyal.ink,example2@loyal.ink\"\r\n}"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'text/plain'
}
conn.request("POST", "/api/v2/users/unsubscribe", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "text/plain");

var raw = "{\r\n    \"emails\": \"example1@loyal.ink,example2@loyal.ink\"\r\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/users/unsubscribe", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Este endpoint permite añadir correos a la lista de desuscritos incluyéndolos como data-raw, y su request http es POST https://api-example.loyal.ink/api/v2/users/unsubscribe.

Response Sample 1

Respuesta obtenida:

{
    "status": 400,
    "message": "Registros ya existentes.",
    "error": {
        "internal_code": 626,
        "detailed_message": "Ningun registro pudo ser insertado, estos ya han sido desuscritos.",
        "trace_id": "603e9fa0168f0518125454"
    }
}

En caso de que se intente añadir solo correos preexistentes en la lista (basta con que se logre insertar un correo para que la respuesta sea 200).

Response Sample 2

Respuesta obtenida:

{
    "status": 200,
    "message": "Los registros han sido insertados exitosamente."
}

Post exitoso para al menos uno de los correos que se intentó desuscribir.

Get Unsubscribed Phones

Get Unsubscribed Phones

Este endpoint obtiene la lista de teléfonos desuscritos, y su request http es:
GET https://api-example.loyal.ink/api/v2/phones/unsubscribed?from=<START_DATE>&to=<END_DATE>.

Parameters from & to

Parameter Required Description
from true Fecha en formato YYYY-MM-DD.
to true Fecha en formato YYYY-MM-DD.

Example HTTP Request With Parameters

Ejemplo de la url con parámetros:
GET https://api-example.loyal.ink/api/v2/phones/unsubscribed?from=2023-05-15&to=2023-05-29

Request Restrictions

Response Sample 1

Petición sin los parametros from y to.
GET https://api-example.loyal.ink/api/v2/phones/unsubscribed

Respuesta obtenida:

{
    "status": 400,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 601,
        "detailed_message": "Falta un campo requerido.",
        "wrong_field": "from",
        "index_register": 0,
        "trace_id": "6490b99c1bcb8356421489"
    }
}

Response Sample 2

Petición de formato inválido.
GET https://api-example.loyal.ink/api/v2/phones/unsubscribed?from=2023-05-15&to=322322sa

Respuesta obtenida:

{
    "status": 400,
    "message": "Campo con error de formato.",
    "error": {
        "internal_code": 603,
        "detailed_message": "Error de formato en la fecha (formato aceptado YYYY-MM-DD).",
        "wrong_field": "to",
        "index_register": 0,
        "trace_id": "6490b9e11bcb8166600487"
    }
}

Response Sample 3

Petición exitosa.

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "id": 1,
            "phone": "123456",
            "Created": "2023-05-30T00:00:00Z"
        },
        {
            "id": 2,
            "phone": "654321",
            "Created": "2023-05-30T00:00:00Z"
        }
    ]
}

Get Users

Get Users

Este endpoint obtiene los campos email, active y profile_name de la tabla users, y su request http es GET https://api-example.loyal.ink/api/v2/users?active=<ACTIVE_STATUS>&emails=<EMAILS_LIST>.

Parameters active & emails

Parameter Required Description
active false Estado de los usuarios que se desea obtener en la respuesta (ej: active=0 => usuarios 100% inactivos, active=1 => usuarios activos más los pendientes de activación vía correo que se verán reflejados con active=2)
emails false Lista de correos a consultar separados por coma (ej: emails=email1@test.com,email2@test.com,email3@test.com)

Example HTTP Request With Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,email2@test.com,email3@test.com&active=1' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,email2@test.com,email3@test.com&active=1")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/users?emails=email1@test.com,email2@test.com,email3@test.com&active=1", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,email2@test.com,email3@test.com&active=1", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,email2@test.com,email3@test.com&active=1

Request Restrictions

  1. Los valores aceptados en el campo active pueden ser únicamente 0 o 1, donde 1 incluye los pendientes de activación vía correo ya que en cualquier momento podrían pasar a ser usuarios activos.
  2. Los valores dentro del campo emails deben ser separados por una coma (,) y deben ser correos validos.

Response Sample 1

Respuesta obtenida:

{
    "status": 200,
    "total": 4,
    "data": [
        {
            "email": "email1@test.com",
            "active": 2,
            "profile_name": "profile1312"
        },
        {
            "email": "email2@test.com",
            "active": 1,
            "profile_name": "profile1312"
        },
        {
            "email": "email3@test.com",
            "active": 0,
            "profile_name": "profile1312"
        },
        {
            "email": "email4@test.com",
            "active": 1,
            "profile_name": "profile1312"
        }            
    ]
}

Lo que se obtiene al consultar la lista completa de usuarios con GET https://api-example.loyal.ink/api/v2/users (distintos estados para cada usuario).

Response Sample 2

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "email": "email1@test.com",
            "active": 2,
            "profile_name": "profile1312"
        },
        {
            "email": "email2@test.com",
            "active": 1,
            "profile_name": "profile1312"
        },
        {
            "email": "email4@test.com",
            "active": 1,
            "profile_name": "profile1312"
        }            
    ]
}

Lo que se obtiene al utilizar el parámetro active=1 (GET https://api-example.loyal.ink/api/v2/users?active=1, solo usuarios con estado 1 o 2).

Response Sample 3

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "email": "email1@test.com",
            "active": 2,
            "profile_name": "profile1312"
        },
        {
            "email": "email3@test.com",
            "active": 0,
            "profile_name": "profile1312"
        }        
    ]
}

Obtener usuarios basados en una lista de correos utilizando GET https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,email3@test.com,email5@test.com (email5@test.com no existe por lo tanto no es retornado).

Response Sample 4

Respuesta obtenida:

{
    "status": 200,
    "total": 1,
    "data": [
        {
            "email": "email1@test.com",
            "active": 2,
            "profile_name": "profile1312"
        }
    ]
}

Obtener usuarios basados en el parámetro active y además una lista de correos utilizando GET https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,email3@test.com&active=1 (email3@test.com tiene active=0 por lo que no se retorna).

Response Sample 5

Respuesta obtenida:

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 610,
        "detailed_message": "El valor de active contiene un valor incorrecto.",
        "wrong_field": "active",
        "index_register": 0,
        "trace_id": "5fc9328a634e9907586162"
    }
}

Petición con el campo active incorrecto utilizando GET https://api-example.loyal.ink/api/v2/users?active=5.

Response Sample 6

Respuesta obtenida:

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 612,
        "detailed_message": "Unos de los emails presenta un formato incorrecto",
        "wrong_field": "emails",
        "index_register": 0,
        "trace_id": "5fc932e5634e9182441142"
    }
}

Petición con algún email incorrecto utilizando GET https://api-example.loyal.ink/api/v2/users?emails=email1@test.com,wrongemail2test.com,email3@test.com.

Edit Users Status

PUT Edit Users Status

Este endpoint permite cambiar el estado de los usuarios, y su request http es PUT http://api-example.loyal.ink/api/v2/users.

Accepted Parameters In Body

Parameter Required Description
active true Admite los valores 0 ("active":0 => para desactivar usuarios) y 1 ("active":1 => para activar usuarios)
emails true Lista de correos que se desea desactivar/activar (ej: "emails":"email1@test.com,email2@test.com,email3@test.com")

Example With Parameters

curl --location --request PUT 'PUT https://api-example.loyal.ink/api/v2/users' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: text/plain' \
--data-raw '{
    "emails": "email1@test.com,email2@test.com,email3@test.com",
    "active": 0
}'
require "uri"
require "net/http"

url = URI("PUT https://api-example.loyal.ink/api/v2/users")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Put.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "text/plain"
request.body = "{\r\n    \"emails\": \"email1@test.com,email2@test.com,email3@test.com\",\r\n    \"active\": 0\r\n}"

response = http.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "{\r\n    \"emails\": \"email1@test.com,email2@test.com,email3@test.com\",\r\n    \"active\": 0\r\n}"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'text/plain'
}
conn.request("PUT", "/api/v2/users", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "text/plain");

var raw = "{\r\n    \"emails\": \"email1@test.com,email2@test.com,email3@test.com\",\r\n    \"active\": 0\r\n}";

var requestOptions = {
  method: 'PUT',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("PUT https://api-example.loyal.ink/api/v2/users", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Endpoint PUT http://api-example.loyal.ink/api/v2/users con los parámetros "emails" y "active" en el body.

Response Sample 1

Respuesta obtenida:

{
    "status": 400,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 601,
        "detailed_message": "Falta un campo requerido.",
        "wrong_field": "emails",
        "index_register": 0,
        "trace_id": "5ff784dd57d5a238106423"
    }
}

Respuesta que se obtiene al no enviar el campo "emails" en el body.

Response Sample 2

Respuesta obtenida:

{
    "status": 400,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 601,
        "detailed_message": "Falta un campo requerido.",
        "wrong_field": "active",
        "index_register": 0,
        "trace_id": "5ff7858757d5a986338318"
    }
}

Respuesta que se obtiene al no enviar el campo "active" en el body.

Response Sample 3

Respuesta obtenida:

{
    "status": 400,
    "message": "Error al actualizar.",
    "error": {
        "internal_code": 627,
        "detailed_message": "Ninguno de los emails esta asociado a algun usuario.",
        "trace_id": "5ff785e957d5a354633538"
    }
}

Respuesta que se obtiene cuando ninguno de los correos existe en la lista de usuarios.

Response Sample 4

Respuesta obtenida:

{
    "status": 200,
    "message": "El registro ha sido actualizado exitosamente."
}

Respuesta exitosa.

Get Results Number of Pages

Get Results Number of Pages

Este endpoint permite obtener la cantidad de páginas en lotes de a 100 registros que hay en un determinado rango de fechas cuando se desea consultar resultados, y su request http es GET https://api-example.loyal.ink/api/v2/surveys/results/number-of-pages?from=<from>&to=<to>&date_type=<date_type>.

Accepted Parameters

Parameter Required Description
from true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 00:00:00".
to true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 59:59:59".
date_type true Admite los valores created (fecha de creación/inserción del registro en la bd), date_poll (fecha de encuesta) o date_exp (fecha de experiencia/interacción).
id_level_2 false Admite ids de estructuras con nivel 2 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_3 false Admite ids de estructuras con nivel 3 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_4 false Admite ids de estructuras con nivel 4 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_5 false Admite ids de estructuras con nivel 5 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_6 false Admite ids de estructuras con nivel 6 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_7 false Admite ids de estructuras con nivel 7 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).

Request Restrictions

  1. La diferencia entre from y to no puede superar 1 día.

Example With Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/surveys/results/number-of-pages?from=2021-05-01&to=2021-05-01&date_type=created' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results/number-of-pages?from=2021-05-01&to=2021-05-01&date_type=created")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/surveys/results/number-of-pages?from=2021-05-01&to=2021-05-01&date_type=created", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results/number-of-pages?from=2021-05-01&to=2021-05-01&date_type=created", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/surveys/results/number-of-pages?from=2021-05-01&to=2021-05-01&date_type=created permite obtener los resultados creados en la bd entre las fechas "2021-05-01 00:00:00" y "2021-05-01 23:59:59".

Response Sample 1

Respuesta obtenida:

{
    "status": 200,
    "data": {
        "number_of_results": 499,
        "number_of_pages": 5
    }
}

Respuesta exitosa.

Get Results Paginated

Get Results Paginated

Este endpoint permite obtener resultados de una página específica en un rango de fechas, y su request http es GET https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=<from>&to=<to>&date_type=<date_type>&page=<page>.

Accepted Parameters

Parameter Required Description
from true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 00:00:00".
to true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 59:59:59".
date_type true Admite los valores created (fecha de creación/inserción del registro en la bd), date_poll (fecha de encuesta) o date_exp (fecha de experiencia/interacción).
page true Número de página que se desea obtener (la respuesta contendrá entre 1 y 100 registros, y la página a utilizar estará determinada por el servicio "Get Results Number of Pages").
id_level_2 false Admite ids de estructuras con nivel 2 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_3 false Admite ids de estructuras con nivel 3 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_4 false Admite ids de estructuras con nivel 4 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_5 false Admite ids de estructuras con nivel 5 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_6 false Admite ids de estructuras con nivel 6 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_7 false Admite ids de estructuras con nivel 7 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).

Request Restrictions

  1. La diferencia entre from y to no puede superar 1 día.

Example With Required Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=5' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=5")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=5", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=5", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=5 permite obtener la quinta página de resultados creados en la bd entre las fechas "2021-05-01 00:00:00" y "2021-05-01 23:59:59" (el quinto lote que contendrá entre 1 y 100 registros).

Response Sample 1

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "id": 86922201,
            "id_cliente": "id_cliente_1,
            "pto_contacto": "texto_nivel_5",
            "nota": 10,
            "verbatim": "texto_verbatim_1",
            "fecha_encuesta": "2019-11-01T01:40:41Z",
            "fecha_experiencia": "2019-10-28T00:00:00Z",
            "fecha_codificación": "2019-11-03T16:17:29Z",
            "nivel_2": "texto_nivel_2",
            "nivel_3": "texto_nivel_3",
            "nivel_4": "texto_nivel_4",
            "nivel_5": "texto_nivel_5",
            "nivel_6": null,
            "nombre": "nombre_1",
            "apellidos": "apellidos_1",
            "celular": null,
            "correo": "correo1@example.com",
            "género": "Femenino",
            "micro_1": "microdriver_1",
            "micro_2": null,
            "micro_3": null,
            "inter_1": "interdriver_1",
            "inter_2": null,
            "inter_3": null,
            "macro_1": "macrodriver_1",
            "macro_2": null,
            "macro_3": null
        },
        {
            "id": 86922202,
            "id_cliente": "id_cliente_2,
            "pto_contacto": "texto_nivel_4",
            "nota": 9,
            "verbatim": "texto_verbatim_2",
            "fecha_encuesta": "2019-11-01T01:40:41Z",
            "fecha_experiencia": "2019-10-28T00:00:00Z",
            "fecha_codificación": "2019-11-03T16:17:29Z",
            "nivel_2": "texto_nivel_2",
            "nivel_3": "texto_nivel_3",
            "nivel_4": "texto_nivel_4",
            "nivel_5": null,
            "nivel_6": null,
            "nombre": "nombre_2",
            "apellidos": null,
            "celular": "celular_2",
            "correo": "correo2@example.com",
            "género": "Masculino",
            "micro_1": "microdriver_1",
            "micro_2": "microdriver_2",
            "micro_3": null,
            "inter_1": "interdriver_1",
            "inter_2": "interdriver_2",
            "inter_3": null,
            "macro_1": "macrodriver_1",
            "macro_2": "macrodriver_2",
            "macro_3": null
        }
    ]
}

Respuesta exitosa considerando que la quinta página de ese día solo contenía 2 resultados.

Example With Structures Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=1&id_level_3=3,529' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=1&id_level_3=3,529")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=1&id_level_3=3,529", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=1&id_level_3=3,529", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/surveys/results/paginated?from=2021-05-01&to=2021-05-01&date_type=created&page=1&id_level_3=3,529 permite obtener la primera página de resultados creados en la bd entre las fechas "2021-05-01 00:00:00" y "2021-05-01 23:59:59" para las estructures cuyo nivel 3 coincida con los ids 3 o 529.

Response Sample 2

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "id": 86922201,
            "id_cliente": "id_cliente_1,
            "pto_contacto": "texto_nivel_5",
            "nota": 10,
            "verbatim": "texto_verbatim_1",
            "fecha_encuesta": "2019-11-01T01:40:41Z",
            "fecha_experiencia": "2019-10-28T00:00:00Z",
            "fecha_codificación": "2019-11-03T16:17:29Z",
            "nivel_2": "texto_nivel_2",
            "nivel_3": "texto_nivel_3",
            "nivel_4": "texto_nivel_4",
            "nivel_5": "texto_nivel_5",
            "nivel_6": null,
            "nombre": "nombre_1",
            "apellidos": "apellidos_1",
            "celular": null,
            "correo": "correo1@example.com",
            "género": "Femenino",
            "micro_1": "microdriver_1",
            "micro_2": null,
            "micro_3": null,
            "inter_1": "interdriver_1",
            "inter_2": null,
            "inter_3": null,
            "macro_1": "macrodriver_1",
            "macro_2": null,
            "macro_3": null
        }
    ]
}

Respuesta exitosa considerando que la primera página de ese día con esos filtros de estructura solo contenía 1 resultados.

Get Uncompleted Results

Get Uncompleted Results

Este endpoint permite obtener resultados que no tienen segments ni others indicando al menos un tipo y rango de fechas, y su request http es GET https://api-staging.loyal.ink/api/v2/surveys/results/incomplete?from=<from>&to=<to>&date_type=<date_type>.

Accepted Parameters

Parameter Required Description
from true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 00:00:00".
to true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 59:59:59".
date_type true Admite los valores created (fecha de creación/inserción del registro en la bd), date_poll (fecha de encuesta) o date_exp (fecha de experiencia/interacción).

Request Restrictions

  1. La diferencia entre from y to no puede superar 1 día.

Example With Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/surveys/results/incomplete?from=2021-05-01&to=2021-05-02&date_type=created' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
--data-raw ''
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results/incomplete?from=2021-05-01&to=2021-05-02&date_type=created")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/surveys/results/incomplete?from=2021-05-01&to=2021-05-02&date_type=created", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var raw = "";

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results/incomplete?from=2021-05-01&to=2021-05-02&date_type=created", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/surveys/results/incomplete?from=2021-05-01&to=2021-05-02&date_type=created permite obtener los resultados creados en la bd entre las fechas "2021-05-01 00:00:00" y "2021-05-02 23:59:59".

Response Sample 1

Respuesta obtenida:

{
    "status": 200,
    "total": 2,
    "data": [
        {
            "id": 264359,
            "id_cliente": "client_id_264359",
            "pto_contacto": "name_level_4",
            "nota": 10,
            "verbatim": "verbatim_1",
            "fecha_encuesta": "2021-05-01 00:05:38",
            "fecha_experiencia": "2021-05-01 00:05:35",
            "fecha_codificación": "2021-05-01 18:07:53",
            "nivel_2": "name_level_2",
            "nivel_3": "name_level_3",
            "nivel_4": "name_level_4",
            "nivel_5": null,
            "nivel_6": null
        },
        {
            "id": 264364,
            "id_cliente": "client_id_264364",
            "pto_contacto": "name_level_3",
            "nota": 10,
            "verbatim": "verbatim_2",
            "fecha_encuesta": "2021-05-01 01:13:19",
            "fecha_experiencia": "2021-05-01 01:13:16",
            "fecha_codificación": "2021-05-01 18:07:57",
            "nivel_2": "name_level_2",
            "nivel_3": "name_level_3",
            "nivel_4": null,
            "nivel_5": null,
            "nivel_6": null
        }
    ]
}

Respuesta exitosa.

Add Segments/Others To Uncompleted Results

POST Segments/Others To Uncompleted Results

Este endpoint permite añadir Segments y/o Others (una sola vez) a los resultados incompletos, y su request http es POST https://api-example.loyal.ink/api/v2/surveys/results/incomplete.

Accepted Parameters In Body

Parameter Required Description
result_id true Este parámetro va dentro del body (en formato JSON), y debe contener un string con un id existente de la tabla results.
seg_xxx false Este parámetro va dentro del body (en formato JSON), y debe contener un string con un código para el nombre del campo y su posible valor (ambos existentes en segments).
otros_xxx false Este parámetro va dentro del body (en formato JSON), y debe contener un string con un código para el nombre del campo (existente en others).

Example With Parameters

curl --location --request POST 'https://api-example.loyal.ink/api/v2/surveys/results/incomplete' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: text/plain' \
--data-raw '[
    {
        "result_id": "12341",
        "seg_genero": "code_gen_1",
        "otros_nombre": "texto_nombre_1"
    },
    {
        "result_id": "12342",
        "seg_genero": "code_gen_2",
        "otros_nombre": "texto_nombre_2"
    }
]'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results/incomplete")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "text/plain"
request.body = "[\r\n    {\r\n        \"result_id\": \"12341\",\r\n        \"seg_genero\": \"code_gen_1\",\r\n        \"otros_nombre\": \"texto_nombre_1\"\r\n    },\r\n    {\r\n        \"result_id\": \"12342\",\r\n        \"seg_genero\": \"code_gen_2\",\r\n        \"otros_nombre\": \"texto_nombre_2\"\r\n    }\r\n]"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[\r\n    {\r\n        \"result_id\": \"12341\",\r\n        \"seg_genero\": \"code_gen_1\",\r\n        \"otros_nombre\": \"texto_nombre_1\"\r\n    },\r\n    {\r\n        \"result_id\": \"12342\",\r\n        \"seg_genero\": \"code_gen_2\",\r\n        \"otros_nombre\": \"texto_nombre_2\"\r\n    }\r\n]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'text/plain'
}
conn.request("POST", "/api/v2/surveys/results/incomplete", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "text/plain");

var raw = "[\r\n    {\r\n        \"result_id\": \"12341\",\r\n        \"seg_genero\": \"code_gen_1\",\r\n        \"otros_nombre\": \"texto_nombre_1\"\r\n    },\r\n    {\r\n        \"result_id\": \"12342\",\r\n        \"seg_genero\": \"code_gen_2\",\r\n        \"otros_nombre\": \"texto_nombre_2\"\r\n    }\r\n]";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results/incomplete", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

POST https://api-example.loyal.ink/api/v2/surveys/results/incomplete permite añadir segments y others a los result_id declarados en cada objeto json respectivamente.

Response Sample 1

Respuesta obtenida:

{
    "status": 400,
    "message": "Ya existen registros asociados.",
    "error": {
        "internal_code": 628,
        "detailed_message": "El registro de result ya tiene registros others asociados.",
        "wrong_field": "result_id",
        "wrong_value": "189",
        "trace_id": "6006f30a357c9182392157"
    }
}

Respuesta que se obtiene al intentar agregar un otros_xxx y/o seg_xxx a un result_id que no figura como incompleto en la bd.

Response Sample 2

Respuesta obtenida:

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 622,
        "detailed_message": "El campo result_id solamente acepta valores numericos.",
        "wrong_field": "result_id",
        "index_register": 0,
        "trace_id": "6006f4d9357c9117919348"
    }
}

Respuesta que se obtiene al enviar un result_id no numérico.

Response Sample 3

Respuesta obtenida:

{
    "status": 404,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 624,
        "detailed_message": "El valor de result_id no fue encontrado en results.",
        "field_not_found": "result_id",
        "value_not_found": 8989899,
        "trace_id": "6006f532357c9403328774"
    }
}

Respuesta que se obtiene al enviar un result_id no existente en la bd.

Response Sample 4

Respuesta obtenida:

{
    "status": 200,
    "message": "Los registros han sido insertados exitosamente."
}

Respuesta exitosa.

Disable Results

Disable Results

Este endpoint permite deshabilitar resultados indicando su id único, y su request http es PUT https://api-example.loyal.ink/api/v2/surveys/results/<result_id>.

Accepted Parameters

Parameter Required Description
result_id true Entero mayor a 0 que exista en la lista de resultados.

Example With Parameters

curl --location --request PUT 'https://api-example.loyal.ink/api/v2/surveys/results/1234' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results/1234")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("PUT", "/api/v2/surveys/results/1234", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'PUT',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results/1234", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

PUT https://api-example.loyal.ink/api/v2/surveys/results/1234 permite deshabilitar el resultado 1234.

Response Sample 1

Respuesta obtenida:

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 623,
        "detailed_message": "El campo result_id solamente acepta valores numericos mayores a 0.",
        "wrong_field": "result_id",
        "index_register": 0,
        "trace_id": "5fecf4ca3699a570064010"
    }
}

Respuesta que se obtiene al enviar un result_id menor o igual a 0.

Response Sample 2

Respuesta obtenida:

{
    "status": 404,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 624,
        "detailed_message": "El valor de result_id no fue encontrado en results.",
        "field_not_found": "result_id",
        "value_not_found": 55451238888,
        "trace_id": "5fecf53c3699a500937633"
    }
}

Respuesta que se obtiene al enviar un result_id que no existe en la bd.

Response Sample 3

Respuesta obtenida:

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 622,
        "detailed_message": "El campo result_id solamente acepta valores numericos.",
        "wrong_field": "result_id",
        "index_register": 0,
        "trace_id": "5fecf5873699a281292442"
    }
}

Respuesta que se obtiene al enviar un valor no numerico en result_id.

Response Sample 4

Respuesta obtenida:

{
    "status": 200,
    "message": "El registro ha sido actualizado exitosamente."
}

Respuesta exitosa.

Upload Results

Post Results Full

Este servicio permite inyectar encuestas completas (con nota, verbatim, etc.) en loyalink.

require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "application/json"
request.body = "[{\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_nota\":10,\"base_verbatim\":\"verbatim_1\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_1\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"\"},{\"base_id_cliente\":\"client_id_2\",\"base_pto_contacto\":\"structure_code_2\",\"base_nota\":9,\"base_verbatim\":\"verbatim_2\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_2\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_2\",\"otros_email\":\"\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_nota\":10,\"base_verbatim\":\"verbatim_1\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_1\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"\"},{\"base_id_cliente\":\"client_id_2\",\"base_pto_contacto\":\"structure_code_2\",\"base_nota\":9,\"base_verbatim\":\"verbatim_2\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_2\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_2\",\"otros_email\":\"\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/surveys/results", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'https://api-example.loyal.ink/api/v2/surveys/results' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: application/json' \
--data-raw '[
  {
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_nota": 10,
    "base_verbatim": "verbatim_1",
    "base_fecha_encuesta": "2020-09-14 12:00:00",
    "base_fecha_experiencia": "2020-09-13 12:00:00",
    "seg_genero": "gen_1",
    "seg_edad": "",
    "otros_nombre": "nombre_1",
    "otros_apellidos": "",
    "otros_fonocel": "fonocel_1",
    "otros_email": ""
  }, {
    "base_id_cliente": "client_id_2",
    "base_pto_contacto": "structure_code_2",
    "base_nota": 9,
    "base_verbatim": "verbatim_2",
    "base_fecha_encuesta": "2020-09-14 12:00:00",
    "base_fecha_experiencia": "2020-09-13 12:00:00",
    "seg_genero": "gen_1",
    "seg_edad": "",
    "otros_nombre": "nombre_2",
    "otros_apellidos": "",
    "otros_fonocel": "fonocel_2",
    "otros_email": ""
  }
]'
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_nota":10,"base_verbatim":"verbatim_1","base_fecha_encuesta":"2020-09-14 12:00:00","base_fecha_experiencia":"2020-09-13 12:00:00","seg_genero":"gen_1","seg_edad":"","otros_nombre":"nombre_1","otros_apellidos":"","otros_fonocel":"fonocel_1","otros_email":""},{"base_id_cliente":"client_id_2","base_pto_contacto":"structure_code_2","base_nota":9,"base_verbatim":"verbatim_2","base_fecha_encuesta":"2020-09-14 12:00:00","base_fecha_experiencia":"2020-09-13 12:00:00","seg_genero":"gen_1","seg_edad":"","otros_nombre":"nombre_2","otros_apellidos":"","otros_fonocel":"fonocel_2","otros_email":""}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

HTTP Request

POST https://api-example.loyal.ink/api/v2/surveys/results

Request Body

En el body de la petición debe ir un arreglo de objetos json, de este tipo:

En el body de la petición podrían ir hasta un máximo de 1500 registros por insertar.

[
  {
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_nota": 10,
    "base_verbatim": "verbatim_1",
    "base_fecha_encuesta": "2020-09-14 12:00:00",
    "base_fecha_experiencia": "2020-09-13 12:00:00",
    "seg_genero": "gen_1",
    "seg_edad": "",
    "otros_nombre": "nombre_1",
    "otros_apellidos": "",
    "otros_fonocel": "fonocel_1",
    "otros_email": ""
  }, {
    "base_id_cliente": "client_id_2",
    "base_pto_contacto": "structure_code_2",
    "base_nota": 9,
    "base_verbatim": "verbatim_2",
    "base_fecha_encuesta": "2020-09-14 12:00:00",
    "base_fecha_experiencia": "2020-09-13 12:00:00",
    "seg_genero": "gen_1",
    "seg_edad": "",
    "otros_nombre": "nombre_2",
    "otros_apellidos": "",
    "otros_fonocel": "fonocel_2",
    "otros_email": ""
  }
]

Allowed Parameters

Parameter Required Type
base_id_cliente true String
base_pto_contacto true String
base_nota true String
base_verbatim true String
base_fecha_encuesta true String
base_fecha_experiencia true String
base_alerta false int
base_estado false int

Los campos con el patrón "seg_xyz" y "otros_xyz" también son permitidos, siempre y cuando exista su respectivo code (y su posible valor en el caso de seg_xyz).

Los campos requeridos son todos aquellos que comienzan con "base_xyz" (con excepción de base_estado y base_alerta que son campos optativos) y estan la lista anterior (campos permitidos), la inexistencia de alguno de estos provocará un error y la no inserción de los registros.

base_id_cliente

Si "base_id_cliente": "", el error retornado sería:

{
    "status": 400,
    "message": "Campo en blanco.",
    "error": {
        "internal_code": 602,
        "detailed_message": "Este campo no puede estar vacio.",
        "wrong_field": "base_id_cliente",
        "index_register": 0,
        "trace_id": "5f6c9f1a26c20263761606"
    }
}

base_id_cliente:string:required

base_pto_contacto

En caso de no existir el base_pto_contacto ingresado:

{
    "status": 404,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 604,
        "detailed_message": "Campo no existente en structures.code",
        "wrong_field": "base_pto_contacto",
        "index_register": 0,
        "trace_id": "5f6c9f9e26c20768836009"
    }
}

base_pto_contacto:string:required

base_nota

En caso de intentar enviar un valor fuera de ese rango, por ejemplo "base_nota": -1, la api retornará:

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 613,
        "detailed_message": "El valor de base_nota no esta dentro del rango aceptado [0, 10]",
        "wrong_field": "base_nota",
        "index_register": 0,
        "trace_id": "5f6ca0cb26c20850253123"
    }
}

base_nota:int:required

base_verbatim

base_verbatim:string:required

base_fecha_encuesta

Error al intentar ingresar una fecha incorrecta

{
    "status": 400,
    "message": "Campo con error de formato.",
    "error": {
        "internal_code": 614,
        "detailed_message": "Error de formato en la fecha (formato aceptado YYYY-MM-DD HH:MM:SS).",
        "wrong_field": "base_fecha_encuesta",
        "index_register": 0,
        "trace_id": "5f6ca27426c20477062375"
    }
}

base_fecha_encuesta:string:required

base_fecha_experiencia

Error al intentar ingresar una fecha incorrecta

{
    "status": 400,
    "message": "Campo con error de formato.",
    "error": {
        "internal_code": 614,
        "detailed_message": "Error de formato en la fecha (formato aceptado YYYY-MM-DD HH:MM:SS).",
        "wrong_field": "base_fecha_encuesta",
        "index_register": 0,
        "trace_id": "5f6ca2c726c20769022908"
    }
}

base_fecha_experiencia:string:required

base_alerta

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 616,
        "detailed_message": "El campo solo acepta los valores 0 o 1.",
        "wrong_field": "base_alerta",
        "index_register": 0,
        "trace_id": "5f6ca37a26c20395554229"
    }
}

base_alerta:int:optional

base_estado

{
    "status": 400,
    "message": "Valor no permitido.",
    "error": {
        "internal_code": 616,
        "detailed_message": "El campo solo acepta los valores 0 o 1.",
        "wrong_field": "base_estado",
        "index_register": 0,
        "trace_id": "5f6ca3eb26c20865559506"
    }
}

base_estado:int:optional

Acerca de los campos seg_*

En caso de no existir el campo seg_*, se arroja un error:

{
    "status": 400,
    "message": "Campo no permitido.",
    "error": {
        "internal_code": 600,
        "detailed_message": "Existe un campo que no es aceptado.",
        "wrong_field": "seg_genero",
        "index_register": 0,
        "trace_id": "5f6cbba126c20640049317"
    }
}

Campos con el patrón seg_*

Los campos ingresado con la clave seg_*, por ejemplo: "seg_genero": "gen_1" Pasan por la validación de existencia de la clave, tanto para code_2 (seg_genero en este caso) como para code_3 (gen_1 en este caso). Para más detalles acerca de los valores permitidos puede consultar el servicio "Segments".

Acerca de los campos otros_*

En caso de no existir el code, se arroja un error del tipo:

{
    "status": 400,
    "message": "Campo no permitido.",
    "error": {
        "internal_code": 600,
        "detailed_message": "Existe un campo que no es aceptado.",
        "wrong_field": "otros_campo_no_existente",
        "index_register": 0,
        "trace_id": "5f6cbf1a26c20252474174"
    }
}

Campos con el patrón seg_*

Los campos ingresado con la clave otros_*, por ejemplo: "otros_nombre": "nombre_1" Pasan por la validación de existencia de la clave (code="otros_nombre" en este caso). Para más detalles acerca de los valores permitidos puede consultar el servicio "Others".

Máxima cantidad de registros a insertar

si se excede ese número la API arrojará un error:

{
    "status": 400,
    "message": "Error en la cantidad de registros.",
    "error": {
        "internal_code": 615,
        "detailed_message": "Se excede el limite máximo de registros a insertar (máximo = 1500)",
        "trace_id": "5f6c9e9a3b962298516443"
    }
}

El limite máximo de registros a insertar (cantidad de elementos json dentro del array del body) es de 1500, es decir, dentro del array del body pueden ir hasta 1500 objetos json.

Forget Required Parameter

{
    "status": 400,
    "message": "Campo no encontrado.",
    "error": {
        "internal_code": 601,
        "detailed_message": "Falta un campo requerido.",
        "wrong_field": "base_verbatim",
        "index_register": 0,
        "trace_id": "5f6c9d901ded7635560186"
    }
}

Si llegara a faltar algun campo requerido la consulta sería rechazada. Por ejemplo si no existiera el campo base_verbatim en el body:

Type Of Request 1

Body en formato JSON

[
  {
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_nota": 10,
    "base_verbatim": "verbatim_1",
    "base_fecha_encuesta": "2020-09-14 12:00:00",
    "base_fecha_experiencia": "2020-09-13 12:00:00",
    "seg_genero": "gen_1",
    "seg_edad": "",
    "otros_nombre": "nombre_1",
    "otros_apellidos": "",
    "otros_fonocel": "fonocel_1",
    "otros_email": ""
  }, {
    "base_id_cliente": "client_id_2",
    "base_pto_contacto": "structure_code_2",
    "base_nota": 9,
    "base_verbatim": "verbatim_2",
    "base_fecha_encuesta": "2020-09-14 12:00:00",
    "base_fecha_experiencia": "2020-09-13 12:00:00",
    "seg_genero": "gen_1",
    "seg_edad": "",
    "otros_nombre": "nombre_2",
    "otros_apellidos": "",
    "otros_fonocel": "fonocel_2",
    "otros_email": ""
  }
]

Request

var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_nota":10,"base_verbatim":"verbatim_1","base_fecha_encuesta":"2020-09-14 12:00:00","base_fecha_experiencia":"2020-09-13 12:00:00","seg_genero":"gen_1","seg_edad":"","otros_nombre":"nombre_1","otros_apellidos":"","otros_fonocel":"fonocel_1","otros_email":""},{"base_id_cliente":"client_id_2","base_pto_contacto":"structure_code_2","base_nota":9,"base_verbatim":"verbatim_2","base_fecha_encuesta":"2020-09-14 12:00:00","base_fecha_experiencia":"2020-09-13 12:00:00","seg_genero":"gen_1","seg_edad":"","otros_nombre":"nombre_2","otros_apellidos":"","otros_fonocel":"fonocel_2","otros_email":""}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys/results", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys/results")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "application/json"
request.body = "[{\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_nota\":10,\"base_verbatim\":\"verbatim_1\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_1\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"\"},{\"base_id_cliente\":\"client_id_2\",\"base_pto_contacto\":\"structure_code_2\",\"base_nota\":9,\"base_verbatim\":\"verbatim_2\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_2\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_2\",\"otros_email\":\"\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_nota\":10,\"base_verbatim\":\"verbatim_1\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_1\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"\"},{\"base_id_cliente\":\"client_id_2\",\"base_pto_contacto\":\"structure_code_2\",\"base_nota\":9,\"base_verbatim\":\"verbatim_2\",\"base_fecha_encuesta\":\"2020-09-14 12:00:00\",\"base_fecha_experiencia\":\"2020-09-13 12:00:00\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"\",\"otros_nombre\":\"nombre_2\",\"otros_apellidos\":\"\",\"otros_fonocel\":\"fonocel_2\",\"otros_email\":\"\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/surveys/results", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'http://api-example.loyal.ink/api/v2/surveys/results' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: application/json' \
--data-raw '[{"base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_nota":10,"base_verbatim":"verbatim_1","base_fecha_encuesta":"2020-09-14 12:00:00","base_fecha_experiencia":"2020-09-13 12:00:00","seg_genero":"gen_1","seg_edad":"","otros_nombre":"nombre_1","otros_apellidos":"","otros_fonocel":"fonocel_1","otros_email":""},{"base_id_cliente":"client_id_2","base_pto_contacto":"structure_code_2","base_nota":9,"base_verbatim":"verbatim_2","base_fecha_encuesta":"2020-09-14 12:00:00","base_fecha_experiencia":"2020-09-13 12:00:00","seg_genero":"gen_1","seg_edad":"","otros_nombre":"nombre_2","otros_apellidos":"","otros_fonocel":"fonocel_2","otros_email":""}]'

Response

Si todos los campos del body y las credenciales estan correctas, obtendremos como respuesta el siguente json:

{
    "status": 200,
    "message": "Los registros han sido insertados exitosamente."
}

Send Surveys (massive endpoint)

Post Surveys

require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Measurement-Channel"] = "api"
request["Campaign-Name"] = "yyyymmdd_example_api.csv"
request["Content-Type"] = "application/json"
request.body = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"},{\"base_hinteraccion\":\"00:00:00\",\"base_id_cliente\":\"client_id_2\",\"base_pto_contacto\":\"structure_code_2\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_2\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_2\",\"otros_fonocel\":\"fonocel_2\",\"otros_email\":\"example_2@loyal.ink\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"},{\"base_hinteraccion\":\"00:00:00\",\"base_id_cliente\":\"client_id_2\",\"base_pto_contacto\":\"structure_code_2\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_2\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_2\",\"otros_fonocel\":\"fonocel_2\",\"otros_email\":\"example_2@loyal.ink\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Measurement-Channel': 'api',
  'Campaign-Name': 'yyyymmdd_example_api.csv',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/surveys", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'https://api-example.loyal.ink/api/v2/surveys' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Measurement-Channel: api' \
--header 'Campaign-Name: yyyymmdd_example_api.csv' \
--header 'Content-Type: application/json' \
--data-raw '[
  {
    "base_hinteraccion": "12:00:00",
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_finteraccion": "2020-07-06",
    "base_cod_encuesta": "poll_code_1",
    "seg_genero": "gen_1",
    "seg_edad": "edad_1",
    "otros_nombre": "nombre_1",
    "otros_fonocel": "fonocel_1",
    "otros_email": "example_1@loyal.ink"
  }, {
    "base_hinteraccion": "00:00:00",
    "base_id_cliente": "client_id_2",
    "base_pto_contacto": "structure_code_2",
    "base_finteraccion": "2020-07-06",
    "base_cod_encuesta": "poll_code_2",
    "seg_genero": "gen_1",
    "seg_edad": "edad_1",
    "otros_nombre": "nombre_2",
    "otros_fonocel": "fonocel_2",
    "otros_email": "example_2@loyal.ink"
  }
]'
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Measurement-Channel", "api");
myHeaders.append("Campaign-Name", "yyyymmdd_example_api.csv");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_hinteraccion":"12:00:00","base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_finteraccion":"2020-07-06","base_cod_encuesta":"poll_code_1","seg_genero":"gen_1","seg_edad":"edad_1","otros_nombre":"nombre_1","otros_fonocel":"fonocel_1","otros_email":"example_1@loyal.ink"},{"base_hinteraccion":"00:00:00","base_id_cliente":"client_id_2","base_pto_contacto":"structure_code_2","base_finteraccion":"2020-07-06","base_cod_encuesta":"poll_code_2","seg_genero":"gen_1","seg_edad":"edad_1","otros_nombre":"nombre_2","otros_fonocel":"fonocel_2","otros_email":"example_2@loyal.ink"}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/surveys", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Este endpoint deja en cola los registros enviados en el body de la petición para que loyalink los envíe vía correo tiempo después de forma automática.

HTTP Request

POST https://api-example.loyal.ink/api/v2/surveys

Request Body

En el body de la petición debe ir un arreglo de objetos json, de este tipo:

En el body de la petición podrían ir N objetos, y cada uno de ellos eventualmente generará un correo.


[
  {
          "base_hinteraccion": "12:00:00",
          "base_id_cliente": "client_id_1",
          "base_pto_contacto": "structure_code_1",
          "base_finteraccion": "2020-07-06",
          "base_cod_encuesta": "poll_code_1",
          "seg_genero": "gen_1",
          "seg_edad": "edad_1",
          "otros_nombre": "nombre_1",
          "otros_fonocel": "fonocel_1",
          "otros_email": "example_1@loyal.ink"
  },
  {
          "base_hinteraccion": "00:00:00",
          "base_id_cliente": "client_id_2",
          "base_pto_contacto": "structure_code_2",
          "base_finteraccion": "2020-07-06",
          "base_cod_encuesta": "poll_code_2",
          "seg_genero": "gen_1",
          "seg_edad": "edad_1",
          "otros_nombre": "nombre_2",
          "otros_fonocel": "fonocel_2",
          "otros_email": "example_2@loyal.ink"
  }
]

Required Parameters

Parameter Required Description
base_id_cliente true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_pto_contacto true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_finteraccion true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_cod_encuesta true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.

Optional Headers

Parameter Required Description
Measurement-Channel false Para este endpoint el valor por defecto es api, pero podría cambiar a mail o whatsapp dependiendo de lo que aconseje el consultor a cargo (dudas a soporte@alco.cl).
Campaign-Name false La única restricción que tiene es que el nombre comience con una fecha válida en formato yyyymmdd, y se recomienda utilizar nombres diarios del tipo "yyyymmdd_example_channel_descripcion_corta.csv".

Type Of Request 1

Agregar un solo registro a la lista de envíos. En el cuerpo del request se puede incluir hasta 1500 objetos en el json usando este endpoint masivo.

POST https://api-example.loyal.ink/api/v2/surveys


var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_hinteraccion":"12:00:00","base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_finteraccion":"2020-07-06","base_cod_encuesta":"poll_code_1","seg_genero":"gen_1","seg_edad":"edad_1","otros_nombre":"nombre_1","otros_fonocel":"fonocel_1","otros_email":"example_1@loyal.ink"}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-staging.loyal.ink/api/v2/surveys", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/surveys")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "application/json"
request.body = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/surveys", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'https://api-example.loyal.ink/api/v2/surveys' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: application/json' \
--data-raw '[
  {
    "base_hinteraccion": "12:00:00",
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_finteraccion": "2020-07-06",
    "base_cod_encuesta": "poll_code_1",
    "seg_genero": "gen_1",
    "seg_edad": "edad_1",
    "otros_nombre": "nombre_1",
    "otros_fonocel": "fonocel_1",
    "otros_email": "example_1@loyal.ink"
  }
]'

Send Survey (unit endpoint)

Post A Survey

require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/survey")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Measurement-Channel"] = "api"
request["Campaign-Name"] = "yyyymmdd_example_api.csv"
request["Content-Type"] = "application/json"
request.body = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Measurement-Channel': 'api',
  'Campaign-Name': 'yyyymmdd_example_api.csv',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/survey", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'https://api-example.loyal.ink/api/v2/survey' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Measurement-Channel: api' \
--header 'Campaign-Name: yyyymmdd_example_api.csv' \
--header 'Content-Type: application/json' \
--data-raw '[
  {
    "base_hinteraccion": "12:00:00",
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_finteraccion": "2020-07-06",
    "base_cod_encuesta": "poll_code_1",
    "seg_genero": "gen_1",
    "seg_edad": "edad_1",
    "otros_nombre": "nombre_1",
    "otros_fonocel": "fonocel_1",
    "otros_email": "example_1@loyal.ink"
  }
]'
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Measurement-Channel", "api");
myHeaders.append("Campaign-Name", "yyyymmdd_example_api.csv");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_hinteraccion":"12:00:00","base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_finteraccion":"2020-07-06","base_cod_encuesta":"poll_code_1","seg_genero":"gen_1","seg_edad":"edad_1","otros_nombre":"nombre_1","otros_fonocel":"fonocel_1","otros_email":"example_1@loyal.ink"}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/survey", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Este endpoint deja en cola el registro enviado en el body de la petición para que loyalink lo envíe vía correo tiempo después de forma automática.

HTTP Request

POST https://api-example.loyal.ink/api/v2/survey

Request Body

En el body de la petición debe ir un arreglo de objetos json, de este tipo:

En el body de la petición podrían ir 1 objeto que eventualmente generará un correo.


[
  {
          "base_hinteraccion": "12:00:00",
          "base_id_cliente": "client_id_1",
          "base_pto_contacto": "structure_code_1",
          "base_finteraccion": "2020-07-06",
          "base_cod_encuesta": "poll_code_1",
          "seg_genero": "gen_1",
          "seg_edad": "edad_1",
          "otros_nombre": "nombre_1",
          "otros_fonocel": "fonocel_1",
          "otros_email": "example_1@loyal.ink"
  }
]

Required Parameters

Parameter Required Description
base_id_cliente true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_pto_contacto true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_finteraccion true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_cod_encuesta true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.

Optional Headers

Parameter Required Description
Measurement-Channel false Para este endpoint el valor por defecto es api, pero podría cambiar a mail o whatsapp dependiendo de lo que aconseje el consultor a cargo (dudas a soporte@alco.cl).
Campaign-Name false La única restricción que tiene es que el nombre comience con una fecha válida en formato yyyymmdd, y se recomienda utilizar nombres diarios del tipo "yyyymmdd_example_channel_descripcion_corta.csv".

Type Of Request 1

Agregar un solo registro a la lista de envíos. En el cuerpo del request se puede incluir solo 1 objeto (un registro) en el json usando este endpoint unitario.

POST https://api-example.loyal.ink/api/v2/survey


var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_hinteraccion":"12:00:00","base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_finteraccion":"2020-07-06","base_cod_encuesta":"poll_code_1","seg_genero":"gen_1","seg_edad":"edad_1","otros_nombre":"nombre_1","otros_fonocel":"fonocel_1","otros_email":"example_1@loyal.ink"}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-staging.loyal.ink/api/v2/survey", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/survey")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "application/json"
request.body = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/survey", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'https://api-example.loyal.ink/api/v2/survey' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Content-Type: application/json' \
--data-raw '[
  {
    "base_hinteraccion": "12:00:00",
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_finteraccion": "2020-07-06",
    "base_cod_encuesta": "poll_code_1",
    "seg_genero": "gen_1",
    "seg_edad": "edad_1",
    "otros_nombre": "nombre_1",
    "otros_fonocel": "fonocel_1",
    "otros_email": "example_1@loyal.ink"
  }
]'

Get Link for Push (unit endpoint)

require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/survey/push")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Measurement-Channel"] = "push"
request["Campaign-Name"] = "yyyymmdd_example_push.csv"
request["Content-Type"] = "application/json"
request.body = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"

response = http.request(request)
puts response.read_body
import http.client
import mimetypes
conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "[{\"base_hinteraccion\":\"12:00:00\",\"base_id_cliente\":\"client_id_1\",\"base_pto_contacto\":\"structure_code_1\",\"base_finteraccion\":\"2020-07-06\",\"base_cod_encuesta\":\"poll_code_1\",\"seg_genero\":\"gen_1\",\"seg_edad\":\"edad_1\",\"otros_nombre\":\"nombre_1\",\"otros_fonocel\":\"fonocel_1\",\"otros_email\":\"example_1@loyal.ink\"}]"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Measurement-Channel': 'push',
  'Campaign-Name': 'yyyymmdd_example_push.csv',
  'Content-Type': 'application/json'
}
conn.request("POST", "/api/v2/survey/push", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
curl --location --request POST 'https://api-example.loyal.ink/api/v2/survey/push' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature' \
--header 'Measurement-Channel: push' \
--header 'Campaign-Name: yyyymmdd_example_push.csv' \
--header 'Content-Type: application/json' \
--data-raw '[
  {
    "base_hinteraccion": "12:00:00",
    "base_id_cliente": "client_id_1",
    "base_pto_contacto": "structure_code_1",
    "base_finteraccion": "2020-07-06",
    "base_cod_encuesta": "poll_code_1",
    "seg_genero": "gen_1",
    "seg_edad": "edad_1",
    "otros_nombre": "nombre_1",
    "otros_fonocel": "fonocel_1",
    "otros_email": "example_1@loyal.ink"
  }
]'
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Measurement-Channel", "push");
myHeaders.append("Campaign-Name", "yyyymmdd_example_push.csv");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify([{"base_hinteraccion":"12:00:00","base_id_cliente":"client_id_1","base_pto_contacto":"structure_code_1","base_finteraccion":"2020-07-06","base_cod_encuesta":"poll_code_1","seg_genero":"gen_1","seg_edad":"edad_1","otros_nombre":"nombre_1","otros_fonocel":"fonocel_1","otros_email":"example_1@loyal.ink"}]);

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/survey/push", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Este endpoint genera un link de encuesta para registro enviado en el body de la petición, el cual puede ser utilizado en cualquier parte y tiene una expiración definida.

HTTP Request

POST https://api-example.loyal.ink/api/v2/survey/push

Request Body

En el body de la petición debe ir un arreglo de objetos json, de este tipo:

En el body de la petición podrían ir 1 objeto que generará un link si es que no hay errores en la petición.


[
  {
          "base_hinteraccion": "12:00:00",
          "base_id_cliente": "client_id_1",
          "base_pto_contacto": "structure_code_1",
          "base_finteraccion": "2020-07-06",
          "base_cod_encuesta": "poll_code_1",
          "seg_genero": "gen_1",
          "seg_edad": "edad_1",
          "otros_nombre": "nombre_1",
          "otros_fonocel": "fonocel_1",
          "otros_email": "example_1@loyal.ink"
  }
]

Required Parameters

Parameter Required Description
base_id_cliente true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_pto_contacto true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_finteraccion true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.
base_cod_encuesta true La no existencia de este campo en cada objeto del body provocará el rechazo de la petición.

Optional Headers

Parameter Required Description
Measurement-Channel false Para este endpoint el valor por defecto es push.
Campaign-Name false La única restricción que tiene es que el nombre comience con una fecha válida en formato yyyymmdd, y se recomienda utilizar nombres diarios del tipo "yyyymmdd_example_channel_descripcion_corta.csv".

Response Sample 1

Respuesta obtenida:

[
    {
        "index": 0,
        "url": "https://example-polls.loyal.ink/survey/MzM4NzMwNzkyNw==/630ab6bb3066e501640341/push/Y2xhdXR2dGE=",
        "client_id": "client_id_01"
    }
]

Respuesta exitosa.

Get Alerts In Progress

Get Alerts In Progress

Este endpoint permite obtener las alertas en proceso para un rango de fechas, y su request http es GET https://api-example.loyal.ink/api/v2/alerts?from=<from>&to=<to>&date_type=<date_type>.

Accepted Parameters

Parameter Required Description
from true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 00:00:00".
to true Fecha en formato YYYY-MM-DD (la diferencia entre from y to no puede superar 1 día). Esta fecha será completada con " 59:59:59".
date_type true Admite los valores created (fecha de creación/inserción del registro en la bd), date_poll (fecha de encuesta) o date_exp (fecha de experiencia/interacción).
start_hour false Hora en formato hh:mm:ss (si no se incluye por defecto se utiliza "00:00:00").
end_hour false Hora en formato hh:mm:ss (si no se incluye por defecto se utiliza "23:59:59").
emails false Admite correos separados por coma para filtrar responsables.
segments_ids false Admite ids de segments separados por coma para añadirlos a la respuesta.
others_ids false Admite ids de others separados por coma para añadirlos a la respuesta.
id_level_2 false Admite ids de estructuras con nivel 2 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_3 false Admite ids de estructuras con nivel 3 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_4 false Admite ids de estructuras con nivel 4 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_5 false Admite ids de estructuras con nivel 5 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_6 false Admite ids de estructuras con nivel 6 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).
id_level_7 false Admite ids de estructuras con nivel 7 (ver servicio "Essential Get / Get Structures Tree with filters" para más detalles).

Request Restrictions

  1. La diferencia entre from y to no puede superar 1 día.

Example With Required Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created permite obtener las alertas en progreso del día 2021-05-10.

Response Sample 1

Respuesta obtenida:

{
    "status": 200,
    "total": 1,
    "data": [
        {
            "identificador_único_de_loyalink_para_el_cierre": "609029dc9e205111226551",
            "responsable": "example@loyal.ink",
            "fecha_de_emisión_de_la_alerta": "2021-05-10 09:00:57",
            "nombre_de_la_alerta": "Regla de alerta 24",
            "id_único_de_loyalink": 12345,
            "identificador_del_encuestado": 123456789,
            "código_de_estructura": "structure_code_1",
            "nombre_de_la_estructura": "Nombre de estructura para structure_code_1",
            "nota": 6,
            "verbatim": "verbatim del encuestado",
            "fecha_de_experiencia": "2021-04-29 00:00:00",
            "fecha_de_encuesta": "2021-05-07 21:52:31",
            "fecha_de_codificación": "2021-05-13 23:34:23",
            "macro_1": "macrodriver_1",
            "inter_1": "interdriver_1",
            "micro_1": "microdriver_1",
            "macro_2": null,
            "inter_2": null,
            "micro_2": null,
            "macro_3": null,
            "inter_3": null,
            "micro_3": null
        }
    ]
}

Respuesta exitosa utilizando solo parámetros obligatorios.

Example With emails, segments_ids, others_ids Parameters

curl --location --request GET 'https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created&emails=example1@loyal.ink,example2@loyal.ink&others_ids=101,105&segments_ids=101' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created&emails=example1@loyal.ink,example2@loyal.ink&others_ids=101,105&segments_ids=101")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = ''
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature'
}
conn.request("GET", "/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created&emails=example1@loyal.ink,example2@loyal.ink&others_ids=101,105&segments_ids=101", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created&emails=example1@loyal.ink,example2@loyal.ink&others_ids=101,105&segments_ids=101", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

GET https://api-example.loyal.ink/api/v2/alerts?from=2021-05-10&to=2021-05-10&date_type=created&emails=example1@loyal.ink,example2@loyal.ink&others_ids=101,105&segments_ids=101 permite obtener las alertas en progreso del día 2021-05-10 para responsables específicos y añadiendo algunos campos segments/others a la respuesta.

Response Sample 2

Respuesta obtenida:

{
    "status": 200,
    "total": 1,
    "data": [
        {
            "identificador_único_de_loyalink_para_el_cierre": "609029dc9e205111226551",
            "responsable": "example1@loyal.ink",
            "fecha_de_emisión_de_la_alerta": "2021-05-10 09:00:57",
            "nombre_de_la_alerta": "Regla de alerta 24",
            "id_único_de_loyalink": 12345,
            "identificador_del_encuestado": 123456789,
            "código_de_estructura": "structure_code_1",
            "nombre_de_la_estructura": "Nombre de estructura para structure_code_1",
            "nota": 6,
            "verbatim": "verbatim del encuestado",
            "fecha_de_experiencia": "2021-04-29 00:00:00",
            "fecha_de_encuesta": "2021-05-07 21:52:31",
            "fecha_de_codificación": "2021-05-13 23:34:23",
            "macro_1": "macrodriver_1",
            "inter_1": "interdriver_1",
            "micro_1": "microdriver_1",
            "macro_2": null,
            "inter_2": null,
            "micro_2": null,
            "macro_3": null,
            "inter_3": null,
            "micro_3": null,
            "otros_nombre": "nombre del encuestado",
            "otros_fonocel": 56987654321,
            "seg_genero": "Femenino"
        }
    ]
}

Respuesta exitosa utilizando parámetros obligatorios y algunos voluntarios.

Post Close Alerts In Progress

Post Close Alerts In Progress

Este endpoint permite cerrar la gestión de una alerta en progreso, y su request http es POST https://api-example.loyal.ink/api/v2/alerts?from=<from>&to=<to>&date_type=<date_type>.

Accepted Parameters In Body

Parameter Required Description
uuid true Identificador único de la alerta que se desea cerrar (se obtiene en el servicio "Get Alerts In Progress".
email true Correo del usuario que se encargó de cerrar el caso (debe existir entre los usuarios de example.loyal.ink).
management_id true Admite los valores 3 (se le asigna el estado "Resuelto" a la gestión) y 4 (se le asigna el estado "Cerrado sin contacto" a la gestión).
verbatim false Permite añadir un comentario con las medidas tomadas para cerrar el caso. Si no se incluye este valor se asumirá por defecto "".

Request Restrictions

  1. Solo se puede cerrar un caso a la vez.

Example With Parameters

curl --location --request POST 'https://api-example.loyal.ink/api/v2/alerts' \
--header 'Public-Key: your-public-api-key' \
--header 'Loyalink-Signature: your-loyalink-signature'
--header 'Content-Type: text/plain' \
--data-raw '{
    "uuid":"61840f5b56b10280619920",
    "email":"example1@loyal.ink",
    "management_id":3,
    "verbatim":"Comentario que explica cómo se cerró el caso"
}'
require "uri"
require "net/http"

url = URI("https://api-example.loyal.ink/api/v2/alerts")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Public-Key"] = "your-public-api-key"
request["Loyalink-Signature"] = "your-loyalink-signature"
request["Content-Type"] = "text/plain"
request.body = "{\r\n    \"uuid\":\"61840f5b56b10280619920\",\r\n    \"email\":\"example1@loyal.ink\",\r\n    \"management_id\":3,\r\n    \"verbatim\":\"Comentario que explica cómo se cerró el caso\"\r\n}"

response = https.request(request)
puts response.read_body
import http.client

conn = http.client.HTTPSConnection("api-example.loyal.ink")
payload = "{\r\n    \"uuid\":\"61840f5b56b10280619920\",\r\n    \"email\":\"example1@loyal.ink\",\r\n    \"management_id\":3,\r\n    \"verbatim\":\"Comentario que explica cómo se cerró el caso\"\r\n}"
headers = {
  'Public-Key': 'your-public-api-key',
  'Loyalink-Signature': 'your-loyalink-signature',
  'Content-Type': 'text/plain'
}
conn.request("POST", "/api/v2/alerts", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var myHeaders = new Headers();
myHeaders.append("Public-Key", "your-public-api-key");
myHeaders.append("Loyalink-Signature", "your-loyalink-signature");
myHeaders.append("Content-Type", "text/plain");

var raw = "{\r\n    \"uuid\":\"61840f5b56b10280619920\",\r\n    \"email\":\"example1@loyal.ink\",\r\n    \"management_id\":3,\r\n    \"verbatim\":\"Comentario que explica cómo se cerró el caso\"\r\n}";

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://api-example.loyal.ink/api/v2/alerts", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

POST https://api-example.loyal.ink/api/v2/alerts con el body de los ejemplos permite cerrar la gestión del caso "61840f5b56b10280619920".

Response Sample 1

Respuesta obtenida:

{
    "status": 200,
    "message": "El registro ha sido insertado exitosamente."
}

Respuesta exitosa.

Errors

The Kittn API uses the following error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API key is wrong.
403 Forbidden -- The kitten requested is hidden for administrators only.
404 Not Found -- The specified kitten could not be found.
405 Method Not Allowed -- You tried to access a kitten with an invalid method.
406 Not Acceptable -- You requested a format that isn't json.
410 Gone -- The kitten requested has been removed from our servers.
418 I'm a teapot.
429 Too Many Requests -- You're requesting too many kittens! Slow down!
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.