Saltar al contenido principal

Endpoints de la API

Todos los endpoints de perfilado devuelven la misma estructura. Elija el endpoint según el identificador de cliente que tenga disponible.

Endpoints Disponibles​

EndpointParámetroDescripción
GET /protected/profile/user-profile-id/:userProfileIdID de Perfil de UsuarioRecupera perfil por identificador Fashion AI
GET /protected/profile/phone/:phoneTeléfonoRecupera perfil por número de teléfono
GET /protected/profile/email/:emailEmailRecupera perfil por dirección de correo electrónico
GET /protected/profile/document/:documentDocumentoRecupera perfil por documento (DNI, CI, etc.)

Ejemplo Básico​

curl -X GET \
'https://catalog.api.fashionai.dev/api/v1/crm/protected/profile/email/cliente@ejemplo.com' \
-H 'Content-Type: application/json' \
-H 'X-FashionAI-APP-Token: <tu_token_app>'

Ejemplos de Código​

JavaScript/Node.js​

const obtenerPerfil = async (identificador, tipo = 'email') => {
const response = await fetch(
`https://catalog.api.fashionai.dev/api/v1/crm/protected/profile/${tipo}/${identificador}`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-FashionAI-APP-Token': process.env.FASHION_AI_TOKEN
}
}
);

if (!response.ok) {
throw new Error(`¡Error HTTP! estado: ${response.status}`);
}

return await response.json();
};

// Ejemplos de uso
const perfilPorEmail = await obtenerPerfil('cliente@ejemplo.com', 'email');
const perfilPorTelefono = await obtenerPerfil('5511999998888', 'phone');
const perfilPorDoc = await obtenerPerfil('12345678900', 'document');

TypeScript​

interface PerfilCliente {
userProfileId: string;
profile: {
perfil_cliente: {
descricao_geral: string;
estilo_geral: string;
};
ocasioes_relevantes: Array<{
ocasião: string;
persona_na_ocasião: string;
sugestao_look: string[];
}>;
briefing_marketing: {
tom_de_voz: string[];
direcao_visual: string[];
orientacao_campanhas: string[];
};
ganchos_conteudo: string[];
momento_compra_atual: {
navegacoes: string[];
resumo_momento: string;
relacao_com_historico: string;
novo_comportamento: boolean;
oportunidades: string[];
};
};
}

async function obtenerPerfil(
identificador: string,
tipo: 'email' | 'phone' | 'document' | 'user-profile-id'
): Promise<PerfilCliente> {
const response = await fetch(
`https://catalog.api.fashionai.dev/api/v1/crm/protected/profile/${tipo}/${identificador}`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
'X-FashionAI-APP-Token': process.env.FASHION_AI_TOKEN!
}
}
);

if (!response.ok) {
throw new Error(`Error al obtener perfil: ${response.statusText}`);
}

return await response.json();
}

// Uso
const perfil = await obtenerPerfil('cliente@ejemplo.com', 'email');

if (perfil.profile.momento_compra_atual.novo_comportamento) {
console.log('¡Nuevo comportamiento detectado!');
console.log('Oportunidades:', perfil.profile.momento_compra_atual.oportunidades);
}

Python​

import requests
import os

def obtener_perfil(identificador, tipo_perfil='email'):
"""
Recupera perfil del cliente por identificador.

Args:
identificador: El identificador del cliente (email, teléfono, documento o userProfileId)
tipo_perfil: Tipo de identificador ('email', 'phone', 'document', 'user-profile-id')
"""
url = f"https://catalog.api.fashionai.dev/api/v1/crm/protected/profile/{tipo_perfil}/{identificador}"
headers = {
"Content-Type": "application/json",
"X-FashionAI-APP-Token": os.getenv("FASHION_AI_TOKEN")
}

response = requests.get(url, headers=headers)
response.raise_for_status()

return response.json()

# Ejemplos de uso
perfil = obtener_perfil("cliente@ejemplo.com", "email")
perfil = obtener_perfil("5511999998888", "phone")
perfil = obtener_perfil("12345678900", "document")

# Acceder a datos del perfil
briefing_marketing = perfil["profile"]["briefing_marketing"]
print(f"Tono de voz: {briefing_marketing['tom_de_voz']}")

Ejemplo de Respuesta​

Todos los endpoints devuelven la misma estructura:

{
"userProfileId": "ddsd23223",
"profile": {
"perfil_cliente": {
"descricao_geral": "Hombre de 30-40 años, profesional que valora calidad y atemporalidad",
"estilo_geral": "Casual-elegante minimalista, tonos neutros, cortes regulares"
},
"ocasioes_relevantes": [
{
"ocasião": "Trabajo business casual",
"persona_na_ocasião": "Profesional confiado y alineado",
"sugestao_look": [
"Camisa manga larga",
"Chino oscuro",
"Zapato casual"
]
}
],
"briefing_marketing": {
"tom_de_voz": ["inspiracional", "auténtico", "sofisticado"],
"direcao_visual": ["Paleta neutra", "Escenarios urbanos", "Luz natural"],
"orientacao_campanhas": [
"Versatilidad",
"Calidad premium",
"Lifestyle urbano"
]
},
"ganchos_conteudo": [
"Guardarropa cápsula masculino",
"Básicos premium que valen la inversión"
],
"momento_compra_atual": {
"navegacoes": ["01/09: visualizó Short Azul Claro"],
"resumo_momento": "Explorando piezas de verano y ocio",
"relacao_com_historico": "Expande perfil para momentos de descontracción",
"novo_comportamento": true,
"oportunidades": [
"Curaduría looks verano",
"Bundle viaje"
]
}
}
}

Para descripciones detalladas de los campos, vea Estructura de Respuesta.