Documentación / Inicia aquí / Integraciones
Integraciones
Consultar el historial de una integración
GET /integraciones/:tkIntegracion/historico
Lista las solicitudes registradas por la integración, de la más reciente a la más antigua. Permite consultar un registro por tkHistorico, también mediante el alias que lo incluye al final de la URL. Devuelve un arreglo paginado y el total en Row-Count. El historial puede contener datos personales y el contenido original enviado. El campo nuevo conserva un comportamiento legado: Sí corresponde a existe: 1; usa existe para interpretar si el contacto ya existía.
Rutas alternativas /integraciones/:tkIntegracion/historico/:tkHistorico
Parámetros Nombre Tipo Validación Descripción tokenString Requerido Encabezado: Token de sesión vigente obtenido al autenticarte. No lo registres ni lo expongas. tkIntegracionString Requerido URL (obligatorio): Identificador de la integración. tkHistoricoString Consulta: Identificador de una solicitud registrada. Se admite en consulta o en el alias de URL. paginaInteger Consulta: Número de página, desde 1. Con 0 devuelve hasta 1000 registros. cantidadRegistrosInteger Consulta: Cantidad de registros por página.
Respuesta Nombre Tipo Descripción indiceInteger Posición del registro en el historial. tkHistoricoString Identificador de la solicitud registrada; puede ser null en registros anteriores. tkIntegracionString Token de integración asociado a la solicitud. tkProspectoString Identificador del contacto; puede ser null. existeInteger 1 si el contacto ya existía al procesar la solicitud; 0 si no existía. Puede ser null. nuevoString Texto legado: devuelve Sí cuando existe es 1. Para distinguir contactos preexistentes usa existe. inicioSolicitudString Fecha de inicio del procesamiento; puede ser null. finSolicitudString Fecha de fin del procesamiento; puede ser null. parametrosObject Datos recibidos en la solicitud, como objeto JSON. Puede ser null y contener datos personales. configObject Configuración JSON de la integración; puede ser null. No la expongas. contactoString Nombre del contacto; puede ser null. correoString Correo del contacto; puede ser null. movilString Móvil del contacto; puede ser null. urlIntegracionString URL de recepción que incluye la credencial de integración; no la publiques.
Solicitud
curl --request GET \
--url 'https://api.upnify.com/integraciones/AP00000000-0000-4000-8000-000000000001/historico?pagina=1&cantidadRegistros=50' \
--header 'Accept: application/json' \
--header 'token: TOKEN-SESION-EJEMPLO'async function ejecutar() {
const response = await fetch("https://api.upnify.com/integraciones/AP00000000-0000-4000-8000-000000000001/historico?pagina=1&cantidadRegistros=50", {
method: "GET",
headers: {"Accept": "application/json", "token": "TOKEN-SESION-EJEMPLO"}
});
const text = await response.text();
if (!response.ok) throw new Error(`HTTP ${response.status}: ${text}`);
const data = text ? JSON.parse(text) : null;
// Usa data en tu aplicación sin exponer tokens o datos personales.
console.log("Estado HTTP:", response.status);
}
ejecutar().catch(console.error);// Node.js 18 o posterior.
async function ejecutar() {
const response = await fetch("https://api.upnify.com/integraciones/AP00000000-0000-4000-8000-000000000001/historico?pagina=1&cantidadRegistros=50", {
method: "GET",
headers: {"Accept": "application/json", "token": "TOKEN-SESION-EJEMPLO"}
});
const text = await response.text();
if (!response.ok) throw new Error(`HTTP ${response.status}: ${text}`);
const data = text ? JSON.parse(text) : null;
// Usa data en tu aplicación sin exponer tokens o datos personales.
console.log("Estado HTTP:", response.status);
}
ejecutar().catch(console.error);import json
import requests
response = requests.request(
"GET",
"https://api.upnify.com/integraciones/AP00000000-0000-4000-8000-000000000001/historico?pagina=1&cantidadRegistros=50",
headers={'Accept': 'application/json', 'token': 'TOKEN-SESION-EJEMPLO'},
timeout=30,
)
response.raise_for_status()
data = response.json() if response.text else None
# Usa data en tu aplicación sin exponer tokens o datos personales.
print("Estado HTTP:", response.status_code)package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
request, err := http.NewRequest("GET", "https://api.upnify.com/integraciones/AP00000000-0000-4000-8000-000000000001/historico?pagina=1&cantidadRegistros=50", nil)
if err != nil { panic(err) }
request.Header.Set("Accept", "application/json")
request.Header.Set("token", "TOKEN-SESION-EJEMPLO")
client := &http.Client{Timeout: 30 * time.Second}
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
data, err := io.ReadAll(response.Body)
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, data))
}
fmt.Println("Estado HTTP:", response.StatusCode)
}using System;
using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api.upnify.com/integraciones/AP00000000-0000-4000-8000-000000000001/historico?pagina=1&cantidadRegistros=50");
request.Headers.Add("Accept", "application/json");
request.Headers.Add("token", "TOKEN-SESION-EJEMPLO");
using var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine($"Estado HTTP: {(int)response.StatusCode}");
Respuesta
[
{
"indice": 1,
"tkHistorico": "00000000-0000-4000-8000-000000000001",
"tkIntegracion": "AP00000000-0000-4000-8000-000000000001",
"tkProspecto": "P-00000000-0000-4000-8000-000000000001",
"existe": 0,
"nuevo": "No",
"inicioSolicitud": "2026-09-22 09:00:00.000",
"finSolicitud": "2026-09-22 09:00:01.000",
"parametros": {
"nombre": "Persona de ejemplo",
"correo": "persona@example.com"
},
"config": {
"nombre": "Formulario de ejemplo"
},
"contacto": "Persona de ejemplo",
"correo": "persona@example.com",
"movil": null,
"urlIntegracion": "https://api.upnify.com/integraciones/P01AP00000000-0000-4000-8000-000000000001"
}
]