curl --request PUT \
--url https://api.tiendadepuntos.com/external/levels/{id} \
--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/{id}"
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.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
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/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
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/{id}"
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("PUT", 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.put("https://api.tiendadepuntos.com/external/levels/{id}")
.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/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.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": 200,
"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": {}
}Actualizar un nivel
Reemplaza los datos de un nivel. No es un patch: los campos que no envíes se sobrescriben, así que mandá siempre el nivel completo.
No se puede llevar minPoints a 0 en un nivel que no arrancó en 0 (el nivel base del comercio es el único que puede valer 0), ni repetir los minPoints de otro nivel.
curl --request PUT \
--url https://api.tiendadepuntos.com/external/levels/{id} \
--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/{id}"
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.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
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/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
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/{id}"
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("PUT", 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.put("https://api.tiendadepuntos.com/external/levels/{id}")
.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/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.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": 200,
"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.
Path Parameters
ID del nivel en Tienda de Puntos.
3
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."

