Intercambia un token de integración por un token de sesión para acceder al API. Obtén el token de integración en Sistema → Integraciones y envíalo en el encabezado token, sin cuerpo de solicitud. El acceso de estas sesiones está limitado para integraciones. Las sesiones nuevas tienen dos días de vigencia. Si ya existe una sesión, se reutiliza; cuando quedan menos de cinco horas para su vencimiento o ya venció, el intercambio conserva su token y renueva la vigencia por dos días desde ese momento. Consultar otros recursos del API no renueva la sesión. La respuesta es un arreglo: usa el valor de [0].token en el encabezado token de tus solicitudes autenticadas. En la respuesta HTTP normalizada, code: 0 indica éxito. Los ejemplos usan credenciales ficticias y no deben registrarse ni exponerse.
Parámetros
Nombre
Tipo
Validación
Descripción
token
String
Requerido
Token de integración obtenido en Upnify. Envíalo en el encabezado HTTP token para obtener o renovar una sesión.
Respuesta
Nombre
Tipo
Descripción
code
Integer
Resultado de la operación. El valor 0 indica que se obtuvo una sesión.
details
Object
Objeto con el token de integración y la fecha de expiración de la sesión obtenida.
details.expiracion
String
Fecha de expiración de la sesión en formato ISO 8601, en hora local del servidor (CDMX), sin indicador de zona horaria. Refleja su vencimiento vigente, incluida una renovación si ocurrió; puede ser null si una sesión anterior no tiene expiración registrada.
details.tkIntegracion
String
Token que identifica la integración utilizada para obtener la sesión.
token
String
Token de sesión. Usa el valor de [0].token en el encabezado HTTP token de las solicitudes autenticadas al API.
Solicitud
Intercambiar el token de integración por una sesión
curl --request POST \
--url 'https://api.upnify.com/integraciones/sesion' \
--header 'token: TOKEN-INTEGRACION-EJEMPLO' \
--header 'Accept: application/json'async function obtenerSesion() {
const response = await fetch("https://api.upnify.com/integraciones/sesion", {
method: "POST",
headers: {
token: "TOKEN-INTEGRACION-EJEMPLO",
Accept: "application/json",
},
});
if (!response.ok) {
throw new Error(`No se pudo obtener la sesión (HTTP ${response.status}).`);
}
const [sesion] = await response.json();
if (sesion?.code !== 0 || !sesion.token) {
throw new Error("La respuesta no contiene una sesión válida.");
}
return sesion;
}
async function main() {
const sesion = await obtenerSesion();
const tokenSesion = sesion.token;
// Usa tokenSesion en el encabezado token de las solicitudes al API.
// Conserva sesion.details.expiracion para programar la renovación.
}
main().catch(console.error);async function obtenerSesion() {
const response = await fetch("https://api.upnify.com/integraciones/sesion", {
method: "POST",
headers: {
token: "TOKEN-INTEGRACION-EJEMPLO",
Accept: "application/json",
},
});
if (!response.ok) {
throw new Error(`No se pudo obtener la sesión (HTTP ${response.status}).`);
}
const [sesion] = await response.json();
if (sesion?.code !== 0 || !sesion.token) {
throw new Error("La respuesta no contiene una sesión válida.");
}
return sesion;
}
async function main() {
const sesion = await obtenerSesion();
const tokenSesion = sesion.token;
// Usa tokenSesion en el encabezado token de las solicitudes al API.
// Conserva sesion.details.expiracion para programar la renovación.
}
main().catch(console.error);import requests
response = requests.post(
"https://api.upnify.com/integraciones/sesion",
headers={
"token": "TOKEN-INTEGRACION-EJEMPLO",
"Accept": "application/json",
},
)
response.raise_for_status()
sesion = response.json()[0]
if sesion.get("code") != 0 or not sesion.get("token"):
raise ValueError("La respuesta no contiene una sesión válida.")
token_sesion = sesion["token"]
# Usa token_sesion en el encabezado token de las solicitudes al API.
# Conserva sesion["details"]["expiracion"] para programar la renovación.package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
type Sesion struct {
Code *int `json:"code"`
Token string `json:"token"`
Details struct {
Expiracion *string `json:"expiracion"`
} `json:"details"`
}
func obtenerSesion() (Sesion, error) {
request, err := http.NewRequest(http.MethodPost, "https://api.upnify.com/integraciones/sesion", nil)
if err != nil {
return Sesion{}, err
}
request.Header.Set("token", "TOKEN-INTEGRACION-EJEMPLO")
request.Header.Set("Accept", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil {
return Sesion{}, err
}
defer response.Body.Close()
if response.StatusCode < 200 || response.StatusCode >= 300 {
return Sesion{}, fmt.Errorf("no se pudo obtener la sesión (HTTP %d)", response.StatusCode)
}
var sesiones []Sesion
if err := json.NewDecoder(response.Body).Decode(&sesiones); err != nil {
return Sesion{}, err
}
if len(sesiones) == 0 || sesiones[0].Code == nil || *sesiones[0].Code != 0 || sesiones[0].Token == "" {
return Sesion{}, fmt.Errorf("la respuesta no contiene una sesión válida")
}
return sesiones[0], nil
}
func main() {
sesion, err := obtenerSesion()
if err != nil {
log.Fatal(err)
}
tokenSesion := sesion.Token
// Usa tokenSesion en el encabezado token de las solicitudes al API.
// Conserva sesion.Details.Expiracion para programar la renovación.
_ = tokenSesion
}using System;
using System.Net.Http;
using System.Text.Json;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.upnify.com/integraciones/sesion");
request.Headers.Add("token", "TOKEN-INTEGRACION-EJEMPLO");
request.Headers.Add("Accept", "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
using var document = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
var sesion = document.RootElement[0];
var tokenSesion = sesion.GetProperty("token").GetString();
if (sesion.GetProperty("code").GetInt32() != 0 || string.IsNullOrEmpty(tokenSesion))
{
throw new InvalidOperationException("La respuesta no contiene una sesión válida.");
}
// Usa tokenSesion en el encabezado token de las solicitudes al API.
// Conserva sesion.GetProperty("details").GetProperty("expiracion") para programar la renovación.