Security intelligence
for LATAM operations
Integrate real-time security conditions, incident data, and risk scoring for Venezuela directly into your logistics, fleet management, or enterprise systems.
The Centinela Risk API provides programmatic access to security conditions data for Venezuela. Built for companies operating in the region — logistics firms, food delivery platforms, insurers, mining companies — that need to integrate risk intelligence into their own systems.
The API is currently in beta. Endpoints and response schemas may change. We will notify API key holders before any breaking changes.
All API requests require authentication via an API key passed in the x-api-key request header. Keys are prefixed with cnt_live_ for production.
Get your API key
Send an email to api@appcentinela.com with your company name and intended use case. Keys are provisioned within 24 hours.
# Pass your API key in every request header curl https://riskscore-f6mmcvp3ia-uc.a.run.app/v1/risk?state=miranda \ -H "x-api-key: cnt_live_YOUR_KEY_HERE"
const response = await fetch('https://riskscore-f6mmcvp3ia-uc.a.run.app/v1/risk?state=miranda', { headers: { 'x-api-key': 'cnt_live_YOUR_KEY_HERE' } }); const data = await response.json();
import requests headers = {"x-api-key": "cnt_live_YOUR_KEY_HERE"} response = requests.get( "https://riskscore-f6mmcvp3ia-uc.a.run.app/v1/risk", params={"state": "miranda"}, headers=headers )
Rate limits are applied per API key on a rolling 30-day window. Exceeding your limit returns a 429 response.
- Risk Score
- Incidents
- Score History
- Email support
- All Basic features
- Layers
- Webhooks
- Priority support
- SLA 99.5%
- Custom alerts
- All Pro features
- Dedicated support
- Custom SLA
- Colombia + Ecuador
Every response includes X-RateLimit-Remaining and X-RateLimit-Reset headers so you can track usage programmatically.
Returns the current security conditions index (0–100) for a given state, along with trend, active incident count, and a brief AI-generated summary.
| Parameter | Type | Required | Description |
|---|---|---|---|
state |
string | required | Venezuelan state name in lowercase (e.g. miranda, monagas). See full reference below. |
{
"state": "miranda",
"risk_index": 62,
"level": "elevated",
"trend": "stable",
"active_incidents": 7,
"last_updated": "2026-06-04T03:00:00Z",
"summary": "Miranda presents elevated security conditions concentrated in Guarenas-Guatire corridor. No significant changes in the last 48 hours.",
"source": "Centinela"
}
Returns a paginated list of recent security incidents. Each incident includes coordinates, severity classification, and source metadata.
| Parameter | Type | Required | Description |
|---|---|---|---|
state |
string | optional | Filter by state. Omit to return incidents across all states. |
limit |
integer | optional | Number of results (default: 20, max: 100). |
days |
integer | optional | Lookback window in days (default: 7, max: 30). |
{
"incidents": [
{
"id": "inc_a8f21b",
"type": "road_block",
"severity": "medium",
"state": "miranda",
"municipality": "Guaicaipuro",
"coordinates": { "lat": 10.3467, "lng": -67.0356 },
"timestamp": "2026-06-03T14:32:00Z",
"verified": true,
"source": "Centinela"
}
],
"total": 42,
"page": 1
}
Returns GeoJSON feature collections for map rendering. Useful for building custom maps with security overlays in Mapbox, Leaflet, or Google Maps.
| Parameter | Type | Required | Description |
|---|---|---|---|
type |
string | optional | Layer type: risk_zones, incidents, corridors. Default: all. |
state |
string | optional | Filter by state. |
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[[-66.9, 10.5], [-66.7, 10.5], /* ... */]]
},
"properties": {
"state": "miranda",
"risk_index": 62,
"level": "elevated"
}
}
]
}
Returns a time series of daily risk scores for trend analysis and reporting. Useful for board-level security reports and contract risk assessments.
| Parameter | Type | Required | Description |
|---|---|---|---|
state |
string | required | Venezuelan state name in lowercase. |
days |
integer | optional | Number of historical days (default: 30, max: 90). |
{
"state": "miranda",
"history": [
{ "date": "2026-05-05", "risk_index": 58, "incidents": 5 },
{ "date": "2026-05-06", "risk_index": 61, "incidents": 7 },
{ "date": "2026-05-07", "risk_index": 59, "incidents": 6 }
]
}
Register a URL to receive POST notifications when the risk index changes significantly or a critical incident is detected in your monitored states.
| Field | Type | Required | Description |
|---|---|---|---|
url |
string | required | HTTPS URL to receive webhook POST requests. |
states |
string[] | required | Array of state names to monitor (e.g. ["miranda", "monagas"]). |
threshold |
integer | optional | Minimum risk index change to trigger notification (default: 10). |
curl -X POST https://registerwebhook-f6mmcvp3ia-uc.a.run.app/v1/webhooks \ -H "x-api-key: cnt_live_YOUR_KEY_HERE" \ -H "Content-Type: application/json" \ -d '{ "url": "https://yourapp.com/centinela-webhook", "states": ["miranda", "monagas", "anzóategui"], "threshold": 15 }'
await fetch('https://registerwebhook-f6mmcvp3ia-uc.a.run.app/v1/webhooks', { method: 'POST', headers: { 'x-api-key': 'cnt_live_YOUR_KEY_HERE', 'Content-Type': 'application/json' }, body: JSON.stringify({ url: 'https://yourapp.com/centinela-webhook', states: ['miranda', 'monagas'], threshold: 15 }) });
{
"webhook_id": "wh_9f3a12bc",
"url": "https://yourapp.com/centinela-webhook",
"states": ["miranda", "monagas"],
"threshold": 15,
"created_at": "2026-06-04T12:00:00Z",
"status": "active"
}
The API uses standard HTTP status codes. Error responses include a machine-readable code and a human-readable message.
| Status | Code | Description |
|---|---|---|
| 400 | invalid_params |
Missing or malformed query parameters. |
| 401 | invalid_api_key |
API key is missing, invalid, or revoked. |
| 403 | plan_required |
Your current plan does not include access to this endpoint. |
| 404 | state_not_found |
The specified state does not exist in our database. |
| 429 | rate_limit_exceeded |
You have exceeded your plan's monthly request limit. |
| 500 | internal_error |
Unexpected server error. These are logged and addressed automatically. |
// Example error response (401) { "error": { "code": "invalid_api_key", "message": "The provided API key is invalid or has been revoked.", "status": 401 } }
Use these exact lowercase slugs in the state parameter.
Riesgo climático por estado o coordenada — inundación, incendio forestal, calor extremo, deslizamiento y sequía. Datos verificados de múltiples fuentes independientes. Proyecciones a 30 años.
Además del API, Centinela provee un widget drop-in listo para integrar en cualquier app inmobiliaria, bancaria o de seguros. Funciona como el climate risk de Redfin — mapa con overlay + sheet de detalle por categoría. provided_by: "Centinela" aparece en cada widget.
Devuelve el score de riesgo climático agregado y por categoría (flood, fire, heat, landslide, drought) para una ubicación en Venezuela. Acepta nombre de estado o coordenadas lat/lng.
| Parameter | Type | Required | Description |
|---|---|---|---|
state |
string | optional* | Nombre del estado en minúsculas (e.g. miranda). Requerido si no se usa lat/lng. |
lat |
float | optional* | Latitud decimal. Usar junto con lng. |
lng |
float | optional* | Longitud decimal. Usar junto con lat. |
{
"state": "miranda",
"location": "Miranda, Venezuela",
"overall_score": 7,
"overall_level": "severe",
"risks": {
"flood": { "score": 8, "level": "severe", "trend": "rising", "label": "Inundación" },
"fire": { "score": 2, "level": "low", "trend": "stable", "label": "Incendio forestal" },
"heat": { "score": 7, "level": "severe", "trend": "rising", "label": "Calor extremo" },
"landslide": { "score": 6, "level": "moderate", "trend": "stable", "label": "Deslizamiento" },
"drought": { "score": 4, "level": "moderate", "trend": "falling", "label": "Sequía" }
},
"horizon_years": 30,
"last_updated": "2026-06-08T00:00:00Z",
"source": "Centinela",
"provided_by": "Centinela Climate Risk API",
"widget_url": "https://cdn.appcentinela.com/climate-widget.js"
}
# Por estado curl "https://climate-f6mmcvp3ia-uc.a.run.app/v1/climate?state=miranda" \ -H "x-api-key: cnt_live_YOUR_KEY" # Por coordenadas curl "https://climate-f6mmcvp3ia-uc.a.run.app/v1/climate?lat=10.48&lng=-66.87" \ -H "x-api-key: cnt_live_YOUR_KEY"
Devuelve la serie histórica de scores de riesgo climático año por año. Útil para análisis de tendencias, reportes de seguros, y modelos de riesgo hipotecario.
| Parameter | Type | Required | Description |
|---|---|---|---|
state |
string | required | Nombre del estado en minúsculas. |
years |
integer | optional | Años de historial (default: 10, max: 30). |
{
"state": "miranda",
"years": 10,
"history": [
{
"year": 2016,
"overall_score": 5,
"risks": {
"flood": { "score": 6, "label": "Inundación" },
"heat": { "score": 5, "label": "Calor extremo" },
"landslide": { "score": 5, "label": "Deslizamiento" }
}
},
{ "year": 2026, "overall_score": 7, "risks": { /* ... */ } }
],
"source": "Centinela"
}
El widget de Climate Risk se integra con <script src="https://cdn.appcentinela.com/climate-widget.js"> y un <div> con tu API key y estado. El componente renderiza el mapa con overlay y el sheet de detalle por categoría — igual al screenshot de Apple Maps.
v1.1.0
2026-06-08
current
- Climate Risk API —
GET /v1/climatepor estado o lat/lng - Climate History —
GET /v1/climate/history— serie anual hasta 30 años - 5 categorías: flood, fire, heat, landslide, drought con trend a 30 años
- Widget drop-in embebible — integración en 3 líneas
- Múltiples fuentes verificadas independientes
v1.0.0
2026-06-04
- Initial public release
- 6 endpoints live: risk, incidents, layers, scoreHistory, webhooks, generateApiKey
- Real-time verified data for all 24 Venezuelan states
- Plan-based rate limiting: Basic / Pro / Enterprise