curl --request POST \
--url https://api.tiendadepuntos.com/external/levels \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "Nivel 2",
"minPoints": 5000,
"pointsMultiplier": 1.5,
"colors": {
"primary": "#55FFFF",
"secondary": "#ABFFFF",
"border": "#000000"
},
"description": "Beneficios para clientes frecuentes."
}
'import requests
url = "https://api.tiendadepuntos.com/external/levels"
payload = {
"name": "Nivel 2",
"minPoints": 5000,
"pointsMultiplier": 1.5,
"colors": {
"primary": "#55FFFF",
"secondary": "#ABFFFF",
"border": "#000000"
},
"description": "Beneficios para clientes frecuentes."
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Nivel 2',
minPoints: 5000,
pointsMultiplier: 1.5,
colors: {primary: '#55FFFF', secondary: '#ABFFFF', border: '#000000'},
description: 'Beneficios para clientes frecuentes.'
})
};
fetch('https://api.tiendadepuntos.com/external/levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tiendadepuntos.com/external/levels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Nivel 2',
'minPoints' => 5000,
'pointsMultiplier' => 1.5,
'colors' => [
'primary' => '#55FFFF',
'secondary' => '#ABFFFF',
'border' => '#000000'
],
'description' => 'Beneficios para clientes frecuentes.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tiendadepuntos.com/external/levels"
payload := strings.NewReader("{\n \"name\": \"Nivel 2\",\n \"minPoints\": 5000,\n \"pointsMultiplier\": 1.5,\n \"colors\": {\n \"primary\": \"#55FFFF\",\n \"secondary\": \"#ABFFFF\",\n \"border\": \"#000000\"\n },\n \"description\": \"Beneficios para clientes frecuentes.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tiendadepuntos.com/external/levels")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Nivel 2\",\n \"minPoints\": 5000,\n \"pointsMultiplier\": 1.5,\n \"colors\": {\n \"primary\": \"#55FFFF\",\n \"secondary\": \"#ABFFFF\",\n \"border\": \"#000000\"\n },\n \"description\": \"Beneficios para clientes frecuentes.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tiendadepuntos.com/external/levels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Nivel 2\",\n \"minPoints\": 5000,\n \"pointsMultiplier\": 1.5,\n \"colors\": {\n \"primary\": \"#55FFFF\",\n \"secondary\": \"#ABFFFF\",\n \"border\": \"#000000\"\n },\n \"description\": \"Beneficios para clientes frecuentes.\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": 201,
"message": "Request was successful",
"data": {
"id": 3,
"name": "Nivel 2",
"description": "Beneficios para clientes frecuentes.",
"minPoints": 5000,
"pointsMultiplier": 1.5,
"colors": {
"primary": "#55ffff",
"secondary": "#abffff",
"border": "#000000"
},
"createdAt": "2026-02-14T12:30:00.000Z",
"updatedAt": "2026-06-01T09:15:00.000Z"
}
}{
"statusCode": 400,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Error de validación",
"errors": [
{}
],
"data": {}
}{
"statusCode": 404,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Api Key is required",
"errors": [
{}
],
"data": {}
}{
"statusCode": 409,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Ya existe un nivel con la misma cantidad mínima de puntos necesarios.",
"errors": [
{}
],
"data": {}
}Crear un nivel
Crea un nivel en el programa de fidelidad del comercio.
Los minPoints no pueden repetirse entre niveles del mismo comercio: son los que definen la escalera de niveles.
Al crear un nivel, Tienda de Puntos reubica automáticamente a los clientes según sus puntos acumulados y sincroniza las ofertas de los premios existentes. Esa reubicación es asincrónica: puede tardar unos segundos en reflejarse.
curl --request POST \
--url https://api.tiendadepuntos.com/external/levels \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "Nivel 2",
"minPoints": 5000,
"pointsMultiplier": 1.5,
"colors": {
"primary": "#55FFFF",
"secondary": "#ABFFFF",
"border": "#000000"
},
"description": "Beneficios para clientes frecuentes."
}
'import requests
url = "https://api.tiendadepuntos.com/external/levels"
payload = {
"name": "Nivel 2",
"minPoints": 5000,
"pointsMultiplier": 1.5,
"colors": {
"primary": "#55FFFF",
"secondary": "#ABFFFF",
"border": "#000000"
},
"description": "Beneficios para clientes frecuentes."
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Nivel 2',
minPoints: 5000,
pointsMultiplier: 1.5,
colors: {primary: '#55FFFF', secondary: '#ABFFFF', border: '#000000'},
description: 'Beneficios para clientes frecuentes.'
})
};
fetch('https://api.tiendadepuntos.com/external/levels', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tiendadepuntos.com/external/levels",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Nivel 2',
'minPoints' => 5000,
'pointsMultiplier' => 1.5,
'colors' => [
'primary' => '#55FFFF',
'secondary' => '#ABFFFF',
'border' => '#000000'
],
'description' => 'Beneficios para clientes frecuentes.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.tiendadepuntos.com/external/levels"
payload := strings.NewReader("{\n \"name\": \"Nivel 2\",\n \"minPoints\": 5000,\n \"pointsMultiplier\": 1.5,\n \"colors\": {\n \"primary\": \"#55FFFF\",\n \"secondary\": \"#ABFFFF\",\n \"border\": \"#000000\"\n },\n \"description\": \"Beneficios para clientes frecuentes.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.tiendadepuntos.com/external/levels")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Nivel 2\",\n \"minPoints\": 5000,\n \"pointsMultiplier\": 1.5,\n \"colors\": {\n \"primary\": \"#55FFFF\",\n \"secondary\": \"#ABFFFF\",\n \"border\": \"#000000\"\n },\n \"description\": \"Beneficios para clientes frecuentes.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tiendadepuntos.com/external/levels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Nivel 2\",\n \"minPoints\": 5000,\n \"pointsMultiplier\": 1.5,\n \"colors\": {\n \"primary\": \"#55FFFF\",\n \"secondary\": \"#ABFFFF\",\n \"border\": \"#000000\"\n },\n \"description\": \"Beneficios para clientes frecuentes.\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": 201,
"message": "Request was successful",
"data": {
"id": 3,
"name": "Nivel 2",
"description": "Beneficios para clientes frecuentes.",
"minPoints": 5000,
"pointsMultiplier": 1.5,
"colors": {
"primary": "#55ffff",
"secondary": "#abffff",
"border": "#000000"
},
"createdAt": "2026-02-14T12:30:00.000Z",
"updatedAt": "2026-06-01T09:15:00.000Z"
}
}{
"statusCode": 400,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Error de validación",
"errors": [
{}
],
"data": {}
}{
"statusCode": 404,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Api Key is required",
"errors": [
{}
],
"data": {}
}{
"statusCode": 409,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Ya existe un nivel con la misma cantidad mínima de puntos necesarios.",
"errors": [
{}
],
"data": {}
}Authorizations
API key del comercio. Se genera desde el panel de Tienda de Puntos, en Configuración → Integraciones.
Body
Nombre del nivel.
"Nivel 2"
Puntos acumulados que necesita un cliente para alcanzar este nivel. No puede repetirse entre niveles del mismo comercio.
5000
Multiplicador de puntos de las compras de los clientes de este nivel. 1 es sin bonificación.
x >= 11.5
Colores con los que el nivel se muestra en la app del cliente.
Show child attributes
Show child attributes
Descripción del nivel.
"Beneficios para clientes frecuentes."

