CDP Enterprise API Reference
Base URL
Production: https://nerdistan-datalake-production.up.railway.app
Authentication
Actualmente la API está en modo desarrollo. La autenticación JWT será implementada en producción.
Endpoints
Health Check
Verifica el estado del sistema y la conexión a la base de datos.
GET /health
Response
{
"success": true,
"message": "System operational",
"data": {
"database": "connected",
"profiles": 202808,
"timestamp": "2025-09-19T01:43:39.174160"
}
}
Single Event Ingestion
Ingesta un evento único en tiempo real.
POST /api/v2/cdp/events
Request Body
{
"tenant_id": 56,
"customer_id": 12345,
"profile_id": null, // Opcional
"event_type": "product_view",
"event_data": {
"product_id": "SKU123",
"product_name": "Test Product",
"price": 99.99,
"category": "Electronics"
}
}
Response
{
"success": true,
"message": "Event 7 ingested",
"data": {
"event_id": 7
}
}
Event Types Soportados
page_view- Vista de páginaproduct_view- Vista de productoadd_to_cart- Agregar al carritoremove_from_cart- Quitar del carritopurchase- Compra completadasearch- Búsqueda realizadaemail_open- Email abiertoemail_click- Click en emailcustom- Evento personalizado
Batch Event Ingestion
Ingesta múltiples eventos en una sola llamada (máximo 100).
POST /api/v2/cdp/events/batch
Request Body
[
{
"tenant_id": 56,
"customer_id": 12345,
"event_type": "page_view",
"event_data": {
"page": "/home",
"time_on_page": 30
}
},
{
"tenant_id": 56,
"customer_id": 12346,
"event_type": "add_to_cart",
"event_data": {
"product_id": "SKU456",
"quantity": 2,
"price": 49.99
}
}
]
Response
{
"success": true,
"message": "Batch of 2 events ingested",
"data": {
"event_ids": [8, 9],
"count": 2
}
}
CDP Status
Obtiene estadísticas y estado actual del CDP.
GET /api/v2/cdp/status
Response
{
"success": true,
"message": "Status retrieved",
"data": {
"statistics": {
"total_profiles": 202808,
"pending_events": 0,
"recent_events": 10,
"active_tenants": 24
},
"top_tenants": [
{
"tenant_id": 56,
"profiles": 89234
},
{
"tenant_id": 42,
"profiles": 45678
}
],
"timestamp": "2025-09-19T01:50:00.000000"
}
}
Get Profile
Obtiene información detallada de un perfil de cliente.
GET /api/v2/cdp/profiles/{profile_id}?tenant_id={tenant_id}
Parameters
profile_id(path, required): ID del perfiltenant_id(query, required): ID del tenant
Response
{
"success": true,
"message": "Profile retrieved",
"data": {
"profile": {
"profile_id": 12345,
"customer_id": 67890,
"email": "customer@example.com",
"first_name": "Juan",
"last_name": "Pérez",
"lifecycle_stage": "active",
"rfm_segment": "Champions",
"historical_value": 5432.10,
"days_since_last_order": 15
},
"recent_events": [
{
"event_type": "product_view",
"event_data": {...},
"created_at": "2025-09-19T00:30:00"
}
]
}
}
Error Responses
Todos los endpoints siguen el mismo formato de error:
{
"success": false,
"message": "Error description",
"data": null
}
Códigos de Estado HTTP
| Código | Descripción |
|---|---|
| 200 | Success |
| 400 | Bad Request - Parámetros inválidos |
| 404 | Not Found - Recurso no encontrado |
| 422 | Unprocessable Entity - Validación fallida |
| 500 | Internal Server Error |
Rate Limiting
Actualmente no hay límites de rate. En producción se implementará:
- 1000 requests/minuto por IP
- 10000 events/hora por tenant
Ejemplos con cURL
Health Check
curl https://nerdistan-datalake-production.up.railway.app/health
Enviar Evento
curl -X POST https://nerdistan-datalake-production.up.railway.app/api/v2/cdp/events \
-H "Content-Type: application/json" \
-d '{
"tenant_id": 56,
"customer_id": 12345,
"event_type": "product_view",
"event_data": {
"product_id": "SKU123",
"price": 99.99
}
}'
Batch de Eventos
curl -X POST https://nerdistan-datalake-production.up.railway.app/api/v2/cdp/events/batch \
-H "Content-Type: application/json" \
-d '[
{
"tenant_id": 56,
"customer_id": 12345,
"event_type": "page_view",
"event_data": {"page": "/home"}
},
{
"tenant_id": 56,
"customer_id": 12346,
"event_type": "add_to_cart",
"event_data": {"product_id": "SKU456", "quantity": 2}
}
]'
SDK JavaScript (Ejemplo)
class CDPClient {
constructor(baseURL = 'https://nerdistan-datalake-production.up.railway.app') {
this.baseURL = baseURL;
}
async sendEvent(tenantId, customerId, eventType, eventData) {
const response = await fetch(`${this.baseURL}/api/v2/cdp/events`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
tenant_id: tenantId,
customer_id: customerId,
event_type: eventType,
event_data: eventData
})
});
return response.json();
}
async sendBatch(events) {
const response = await fetch(`${this.baseURL}/api/v2/cdp/events/batch`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(events)
});
return response.json();
}
async getStatus() {
const response = await fetch(`${this.baseURL}/api/v2/cdp/status`);
return response.json();
}
async getProfile(profileId, tenantId) {
const response = await fetch(
`${this.baseURL}/api/v2/cdp/profiles/${profileId}?tenant_id=${tenantId}`
);
return response.json();
}
}
// Uso
const cdp = new CDPClient();
// Enviar evento
cdp.sendEvent(56, 12345, 'product_view', {
product_id: 'SKU123',
price: 99.99
}).then(response => console.log(response));
Webhook Notifications (Próximamente)
En futuras versiones, el CDP enviará webhooks para eventos importantes:
- Cambio de segmento RFM
- Entrada/salida de audiencia
- Threshold de CLV alcanzado
- Riesgo de churn detectado
Versionado
La API usa versionado en la URL. La versión actual es v2.
Cambios breaking serán introducidos en nuevas versiones (v3, v4, etc).
Soporte
Para soporte técnico o preguntas sobre la API:
- Email: soporte@nerdistan.com.ar
- Documentación: https://docs.nerdistan.com.ar
- Status: https://status.nerdistan.com.ar