curl --request GET \
--url https://api.tiendadepuntos.com/external/clients/search \
--header 'x-api-key: <api-key>'import requests
url = "https://api.tiendadepuntos.com/external/clients/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.tiendadepuntos.com/external/clients/search', 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/clients/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.tiendadepuntos.com/external/clients/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tiendadepuntos.com/external/clients/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tiendadepuntos.com/external/clients/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"message": "Request was successful",
"data": {
"id": 84213,
"name": "Juan Manuel Pérez",
"first_name": "Juan Manuel",
"last_name": "Pérez",
"email": "juanma@mailinator.com",
"dni": "40100800",
"document_number": "40100800",
"document_type": "DNI",
"phone": "+541164593678",
"gender": 0,
"affiliate_card": "00012345",
"score": 1250,
"total_score": 8400,
"description": null,
"birthday": "1990-01-01T00:00:00.000Z",
"status": "ACTIVE",
"created_at": "2026-02-14T12:30:00.000Z",
"last_transaction": "2026-07-28T18:05:00.000Z",
"purchases_counter": 7,
"reads_counter": 32,
"registered": false,
"register_url": "https://micomercio.tiendadepuntos.com/auth/register/4f1c9a2e-8b7d-4e3a-9c61-2d5f0b8a7e14/1532",
"level": {
"id": 3,
"name": "Nivel 2"
}
}
}{
"statusCode": 400,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Error de validación",
"errors": [
{}
],
"data": {}
}{
"statusCode": 401,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Api key is invalid",
"errors": [
{}
],
"data": {}
}{
"statusCode": 404,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Client not found",
"errors": [
{}
],
"data": {}
}Buscar un cliente por email o documento
Busca un único cliente del comercio por email exacto o por número de documento exacto. No hace búsqueda parcial. Si más de un cliente coincide, devuelve el más antiguo. Si no encuentra al cliente devuelve 404 con el mensaje Client not found.
Además de los datos del cliente, indica si ya completó su registro (registered) y, si no, devuelve el link para que lo complete (register_url).
Atención: register_url funciona como una credencial. Quien lo abra puede definir la contraseña de la cuenta del cliente y usar sus puntos. Mandáselo solo al cliente (por ejemplo, por WhatsApp o impreso en el ticket) y no lo guardes ni lo registres en logs.
curl --request GET \
--url https://api.tiendadepuntos.com/external/clients/search \
--header 'x-api-key: <api-key>'import requests
url = "https://api.tiendadepuntos.com/external/clients/search"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.tiendadepuntos.com/external/clients/search', 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/clients/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.tiendadepuntos.com/external/clients/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tiendadepuntos.com/external/clients/search")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tiendadepuntos.com/external/clients/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"message": "Request was successful",
"data": {
"id": 84213,
"name": "Juan Manuel Pérez",
"first_name": "Juan Manuel",
"last_name": "Pérez",
"email": "juanma@mailinator.com",
"dni": "40100800",
"document_number": "40100800",
"document_type": "DNI",
"phone": "+541164593678",
"gender": 0,
"affiliate_card": "00012345",
"score": 1250,
"total_score": 8400,
"description": null,
"birthday": "1990-01-01T00:00:00.000Z",
"status": "ACTIVE",
"created_at": "2026-02-14T12:30:00.000Z",
"last_transaction": "2026-07-28T18:05:00.000Z",
"purchases_counter": 7,
"reads_counter": 32,
"registered": false,
"register_url": "https://micomercio.tiendadepuntos.com/auth/register/4f1c9a2e-8b7d-4e3a-9c61-2d5f0b8a7e14/1532",
"level": {
"id": 3,
"name": "Nivel 2"
}
}
}{
"statusCode": 400,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Error de validación",
"errors": [
{}
],
"data": {}
}{
"statusCode": 401,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Api key is invalid",
"errors": [
{}
],
"data": {}
}{
"statusCode": 404,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "Client not found",
"errors": [
{}
],
"data": {}
}Authorizations
API key del comercio. Se genera desde el panel de Tienda de Puntos, en Configuración → Integraciones.
Query Parameters
Email o número de documento exacto del cliente.
255"juanma@mailinator.com"

