Contactos
Buscar contactos
Busca y ordena contactos con filtros avanzados y paginación por página.
POST
/
contacts
/
search
Buscar contactos
curl --request POST \
--url https://api.insuranceboosters.com/api/v1/contacts/search \
--header 'Content-Type: application/json' \
--header 'x-ib-api-key: <api-key>' \
--data '
{
"esQuery": {
"term": {
"email.keyword": "contacto@example.com"
}
}
}
'import requests
url = "https://api.insuranceboosters.com/api/v1/contacts/search"
payload = { "esQuery": { "term": { "email.keyword": "contacto@example.com" } } }
headers = {
"x-ib-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-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({esQuery: {term: {'email.keyword': 'contacto@example.com'}}})
};
fetch('https://api.insuranceboosters.com/api/v1/contacts/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({esQuery: {term: {'email.keyword': 'contacto@example.com'}}})
};
fetch('https://api.insuranceboosters.com/api/v1/contacts/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.insuranceboosters.com/api/v1/contacts/search';
const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({esQuery: {term: {'email.keyword': 'contacto@example.com'}}})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.insuranceboosters.com/api/v1/contacts/search")
.header("x-ib-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/contacts/search");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/contacts/search");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.insuranceboosters.com/api/v1/contacts/search"
payload := strings.NewReader("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-ib-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))
}require 'uri'
require 'net/http'
url = URI("https://api.insuranceboosters.com/api/v1/contacts/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-ib-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.insuranceboosters.com/api/v1/contacts/search",
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([
'esQuery' => [
'term' => [
'email.keyword' => 'contacto@example.com'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-ib-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}")
val request = Request.Builder()
.url("https://api.insuranceboosters.com/api/v1/contacts/search")
.post(body)
.addHeader("x-ib-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()falseimport Foundation
let parameters = ["esQuery": ["term": ["email.keyword": "contacto@example.com"]]] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.insuranceboosters.com/api/v1/contacts/search")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-ib-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))$headers=@{}
$headers.Add("x-ib-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.insuranceboosters.com/api/v1/contacts/search' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"esQuery": {
"term": {
"email.keyword": "contacto@example.com"
}
}
}'{
"success": true,
"hits": [
{
"id": "<string>",
"createdAt": 123,
"updatedAt": 123,
"firstName": "<string>",
"lastName1": "<string>",
"lastName2": "<string>",
"email": "jsmith@example.com",
"phoneNumbers": [
"<string>"
]
}
],
"total": 1,
"page": 1,
"limit": 50,
"hasMore": true
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Busca contactos mediante filtros avanzados. La API limita automáticamente los resultados a los contactos disponibles para tu API key.
Cada elemento de
También acepta un arreglo:
Para buscar un fragmento del email, usa
Respuesta exitosa (
Incrementa
Consulta primero Obtener esquema de contactos. Usa
fields[].id para construir filtros y criterios de orden.Endpoint
POST /contacts/search
Body
| Campo | Tipo | Default | Descripción |
|---|---|---|---|
esQuery | object | — | Consulta formada con los operadores documentados en esta página. Es requerida. |
page | integer | 0 | Página basada en cero. Los valores negativos se convierten en 0. |
limit | integer | 50 | Resultados por página. La API acepta de 1 a 100. |
sort | array | updatedAt descendente | Criterios de orden aplicados en secuencia. |
sort contiene:
| Campo | Tipo | Descripción | |
|---|---|---|---|
property | string | Identificador técnico del campo. | |
direction | `ascending | descending` | Dirección del orden. |
Cómo nombrar los campos
Obtén los identificadores con Obtener esquema de contactos:- Usa
fields[].idpara búsquedas de texto completo, existencia, rangos y ordenamiento:email,createdAto<field-id>. - Agrega
.keywordpara coincidencias exactas sobre texto, listas o teléfonos:email.keyword,phoneNumbers.keywordo<field-id>.keyword. - No uses
fields[].ui.label; es una etiqueta visible y puede cambiar.
Operadores de consulta
| Operador | Uso |
|---|---|
match_all | Devuelve todos los contactos disponibles. |
term | Coincidencia exacta con un valor. |
terms | Coincidencia con cualquiera de varios valores. |
match | Búsqueda de texto dentro de un campo específico. |
exists | Comprueba que un campo tenga valor. |
range | Compara números o fechas con gt, gte, lt y lte. |
bool | Combina consultas con must, filter, should y must_not. |
__contactSearch | Busca texto o fragmentos en nombre, apellidos, email y teléfonos. |
Consultas comunes
Todos los contactos
Todos los contactos
{
"esQuery": {
"match_all": {}
}
}
Texto libre en nombre, email o teléfono
Texto libre en nombre, email o teléfono
__contactSearch ignora mayúsculas y acentos. Separa el texto por espacios y exige que cada término aparezca en alguno de los campos de nombre, apellidos, email o teléfonos.{
"esQuery": {
"match_all": {},
"__contactSearch": "maria garcia"
}
}
{
"esQuery": {
"match_all": {},
"__contactSearch": ["maria", "garcia"]
}
}
Texto dentro de un campo específico
Texto dentro de un campo específico
Usa
match con el id del campo:{
"esQuery": {
"match": {
"firstName": {
"query": "maria",
"operator": "and"
}
}
}
}
Email exacto
Email exacto
{
"esQuery": {
"term": {
"email.keyword": "contacto@example.com"
}
}
}
__contactSearch.Teléfono exacto o parcial
Teléfono exacto o parcial
Para una coincidencia exacta usa el mismo formato almacenado:Para buscar por los últimos dígitos:
{
"esQuery": {
"term": {
"phoneNumbers.keyword": "+525500000000"
}
}
}
{
"esQuery": {
"match_all": {},
"__contactSearch": "0000"
}
}
Cualquiera de varios valores
Cualquiera de varios valores
Usa
terms para filtrar por cualquiera de los valores permitidos de un campo:{
"esQuery": {
"terms": {
"<status-field-id>.keyword": ["Prospecto", "Cliente"]
}
}
}
Campo con valor
Campo con valor
{
"esQuery": {
"exists": {
"field": "email"
}
}
}
Rango de fechas
Rango de fechas
Los campos Para campos de fecha configurables, usa valores ISO 8601 según su
createdAt y updatedAt usan milisegundos Unix:{
"esQuery": {
"range": {
"createdAt": {
"gte": 1720000000000,
"lt": 1722600000000
}
}
}
}
jsonSchema.Combinaciones booleanas
Combinaciones booleanas
must: todas las consultas deben coincidir.filter: todas deben coincidir; úsalo para filtros exactos.should: una o más pueden coincidir. Controla el mínimo conminimum_should_match.must_not: excluye coincidencias.
{
"esQuery": {
"bool": {
"filter": [
{
"exists": {
"field": "email"
}
},
{
"terms": {
"<status-field-id>.keyword": ["Prospecto", "Cliente"]
}
}
],
"must_not": [
{
"term": {
"email.keyword": "bloqueado@example.com"
}
}
]
}
}
}
Solicitud completa
Este ejemplo busca una coincidencia exacta por correo:curl -X POST "https://api.insuranceboosters.com/api/v1/contacts/search" \
-H "Content-Type: application/json" \
-H "x-ib-api-key: TU_API_KEY" \
-d '{
"esQuery": {
"term": {
"email.keyword": "contacto@example.com"
}
},
"page": 0,
"limit": 20,
"sort": [
{
"property": "updatedAt",
"direction": "descending"
}
]
}'
Respuesta exitosa (200)
{
"success": true,
"hits": [
{
"id": "<contact-id>",
"firstName": "María",
"lastName1": "García",
"email": "contacto@example.com",
"phoneNumbers": ["+525500000000"],
"createdAt": 1720000000000,
"updatedAt": 1720000000000
}
],
"total": 1,
"page": 0,
"limit": 20,
"hasMore": false
}
page mientras hasMore sea true. Conserva el mismo esQuery, limit y sort durante todo el recorrido.
Errores frecuentes
| HTTP | Qué significa | Qué hacer |
|---|---|---|
400 | Falta esQuery o no es un objeto. | Envía una consulta JSON válida. |
401 | API key inválida o faltante. | Verifica x-ib-api-key. |
500 | No fue posible ejecutar la búsqueda. | Reintenta; si continúa, contacta soporte. |
Authorizations
Body
application/json
Was this page helpful?
Buscar contactos
curl --request POST \
--url https://api.insuranceboosters.com/api/v1/contacts/search \
--header 'Content-Type: application/json' \
--header 'x-ib-api-key: <api-key>' \
--data '
{
"esQuery": {
"term": {
"email.keyword": "contacto@example.com"
}
}
}
'import requests
url = "https://api.insuranceboosters.com/api/v1/contacts/search"
payload = { "esQuery": { "term": { "email.keyword": "contacto@example.com" } } }
headers = {
"x-ib-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-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({esQuery: {term: {'email.keyword': 'contacto@example.com'}}})
};
fetch('https://api.insuranceboosters.com/api/v1/contacts/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({esQuery: {term: {'email.keyword': 'contacto@example.com'}}})
};
fetch('https://api.insuranceboosters.com/api/v1/contacts/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.insuranceboosters.com/api/v1/contacts/search';
const options = {
method: 'POST',
headers: {'x-ib-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({esQuery: {term: {'email.keyword': 'contacto@example.com'}}})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.insuranceboosters.com/api/v1/contacts/search")
.header("x-ib-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}")
.asString();using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/contacts/search");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api.insuranceboosters.com/api/v1/contacts/search");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-ib-api-key", "<api-key>");
request.AddJsonBody("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.insuranceboosters.com/api/v1/contacts/search"
payload := strings.NewReader("{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-ib-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))
}require 'uri'
require 'net/http'
url = URI("https://api.insuranceboosters.com/api/v1/contacts/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-ib-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.insuranceboosters.com/api/v1/contacts/search",
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([
'esQuery' => [
'term' => [
'email.keyword' => 'contacto@example.com'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-ib-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"esQuery\": {\n \"term\": {\n \"email.keyword\": \"contacto@example.com\"\n }\n }\n}")
val request = Request.Builder()
.url("https://api.insuranceboosters.com/api/v1/contacts/search")
.post(body)
.addHeader("x-ib-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()falseimport Foundation
let parameters = ["esQuery": ["term": ["email.keyword": "contacto@example.com"]]] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.insuranceboosters.com/api/v1/contacts/search")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-ib-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))$headers=@{}
$headers.Add("x-ib-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.insuranceboosters.com/api/v1/contacts/search' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"esQuery": {
"term": {
"email.keyword": "contacto@example.com"
}
}
}'{
"success": true,
"hits": [
{
"id": "<string>",
"createdAt": 123,
"updatedAt": 123,
"firstName": "<string>",
"lastName1": "<string>",
"lastName2": "<string>",
"email": "jsmith@example.com",
"phoneNumbers": [
"<string>"
]
}
],
"total": 1,
"page": 1,
"limit": 50,
"hasMore": true
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}
