API · Inteligencia de Red
API REST de solo lectura que expone la inteligencia de red de ONEtoONE: contactos, puntuaciones y estadísticas de actividad por empresa y asesor.
/api.php
/api.php?domain={domain}
Devuelve los contactos de red para una empresa identificada por dominio, junto con el score de relación de cada asesor y el desglose de puntuación.
Parámetros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
domain |
string | sí | Dominio de la empresa (ej. acme.com). Solo caracteres alfanuméricos, . y -. Máx. 253 caracteres. |
Ejemplo
curl "http://localhost/api.php?domain=acme.com"
Respuesta
{
"company": "Acme Ltd",
"domain": "acme.com",
"company_meta": {
"sector": "Tecnología",
"city": "Madrid",
"country": "España",
"employees": 320,
"ebitda_m": 4.2,
"stage": "mandato",
"web": "https://acme.com",
"notes": "Empresa objetivo clave para Q1."
},
"network_contacts": [
{
"user_id": 1,
"user_name": "Ana Martínez",
"user_email": "ana@onetoone.es",
"user_phone": "+34 600 111 222",
"score": 68,
"score_label": "high",
"interaction_count": 3,
"first_contact_at": "2023-03-10",
"last_contact_at": "2025-01-15",
"identified_contact": "John Smith",
"identified_contact_role": "CFO",
"score_breakdown": [
{
"type": "interaction",
"points": 15,
"date": "2025-01-15",
"itype": "reunion",
"label": "Interacción registrada"
},
{
"type": "bonus",
"points": 20,
"date": "2025-01-15",
"label": "Relación activa: último contacto el 2025-01-15 (menos de 12 meses)"
}
]
}
]
}
/api.php?id={id}
Igual que ?domain= pero identifica la empresa por su ID numérico interno.
Parámetros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id |
integer | sí | ID interno de la empresa. Entero positivo (≥ 1). |
Ejemplo
curl "http://localhost/api.php?id=1"
/api.php?stats=top_users
Devuelve el ranking de asesores ordenados por número total de interacciones registradas.
Parámetros
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
stats |
string | sí | Debe ser top_users. |
limit |
integer | no | Número de resultados a devolver. Rango: 1–50. Por defecto: 5. |
Ejemplo
curl "http://localhost/api.php?stats=top_users&limit=3"
Respuesta
{
"stats": "top_users",
"limit": 3,
"data": [
{ "user_id": 2, "user_name": "Carlos López", "total_interactions": 9 },
{ "user_id": 1, "user_name": "Ana Martínez", "total_interactions": 7 },
{ "user_id": 4, "user_name": "María Fernández", "total_interactions": 5 }
]
}
Reglas de puntuación
El campo score se calcula sumando puntos por cada interacción
más bonificaciones por calidad de la relación.
Puntos por tipo de interacción
| Tipo (itype) | Puntos | Descripción |
|---|---|---|
| reunion | +15 | Reunión presencial o videoconferencia |
| llamada | +10 | Llamada telefónica |
| +7 | Intercambio de correo electrónico | |
| evento | +5 | Contacto en evento o conferencia |
— | +10 | Tipo desconocido o no informado (fallback) |
Bonificaciones por calidad de la relación
| Regla | Puntos | Condición |
|---|---|---|
| Relación activa | +20 | Al menos una interacción en los últimos 12 meses |
| Relación continuada | +15 | Interacciones registradas en más de un año natural distinto |
| Relación de profundidad | +10 | El mismo contacto de empresa aparece en 2 o más interacciones |
| Contacto identificado | +5 | Se conoce el nombre del contacto concreto en la empresa |
Etiquetas de score
| Campo score_label | Rango de puntuación |
|---|---|
| high | ≥ 50 puntos |
| medium | 25 – 49 puntos |
| low | 0 – 24 puntos |
Modelo de datos
Tipos de interacción (itype)
Valores posibles para el campo itype en el desglose de puntuación.
"reunion" | "llamada" | "email" | "evento"
Estados de la relación (stage)
Valores posibles para el campo stage en company_meta.
| Valor | Etiqueta |
|---|---|
prospectando | Prospectando |
en_conversacion | En conversación |
mandato | Mandato activo |
cerrado | Cerrado |
descartado | Descartado |
Errores
| HTTP | Condición | Cuerpo de respuesta |
|---|---|---|
| 400 | Parámetros ausentes o inválidos | {"error": "Missing or invalid parameter.", "routes": {...}} |
| 404 | Empresa no encontrada | {"error": "Company not found."} |
| 500 | Error interno del servidor | {"error": "An internal error occurred."} |