Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/CspmIT/centinela-front/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Centinela API uses Bearer token authentication for all protected endpoints. Authentication is handled through the Cooptech authentication system, which provides cross-product single sign-on.

Authentication Flow

The authentication process involves two steps:
  1. Authenticate with Cooptech to get user information
  2. Exchange Cooptech credentials for a Centinela-specific token

Step 1: Get User Information

First, retrieve user information from the Cooptech API:
cURL
curl -X GET "https://cooptech.com.ar/api/getUser?id={userId}" \
  -H "Authorization: Bearer {cooптechToken}"
email
string
User email address
token_apps
string
Token for cross-application authentication

Step 2: Login to Centinela

Exchange Cooptech credentials for a Centinela token:
cURL
curl -X POST "https://masagua.cooptech.com.ar/api/loginCooptech" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "tokenApp": "cooptech_token_apps_value",
    "schemaName": "client_schema_name",
    "influx_name": "influx_database_name"
  }'
email
string
required
User email from Cooptech authentication
tokenApp
string
required
Token apps value from Cooptech user object
schemaName
string
required
Database schema name for the client
influx_name
string
required
InfluxDB database name for time-series data
Response:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": 123,
    "email": "user@example.com",
    "first_name": "John",
    "last_name": "Doe"
  }
}

Using Authentication Tokens

Include the authentication token in the Authorization header for all API requests:
cURL
curl -X GET "https://masagua.cooptech.com.ar/api/getVarsInflux" \
  -H "Authorization: Bearer {your_token_here}" \
  -H "Content-Type: application/json"

JavaScript Example

const token = localStorage.getItem('token');

const response = await fetch(`${baseUrl}/getVarsInflux`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': `Bearer ${token}`
  },
  credentials: 'include'
});

const data = await response.json();

Axios Example (Used in Centinela)

import axios from 'axios';

const request = async (url, method, data = false) => {
  const token = localStorage.getItem('token');
  
  const response = await axios({
    method,
    url,
    data: data || {},
    withCredentials: true,
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Authorization': `Bearer ${token}`
    }
  });
  
  return response;
};

Get Schema Information

Retrieve database schema information for a client and product:
cURL
curl -X GET "https://cooptech.com.ar/api/getSchemaProduct?clientId={clientId}&productId={productId}" \
  -H "Authorization: Bearer {cooптechToken}"
Response:
[
  {
    "schema_name": "client_db_schema",
    "influx_name": "client_influxdb",
    "product_id": 5,
    "client_id": 12
  }
]

List User Products

Get products available to a user for a specific client:
cURL
curl -X GET "https://cooptech.com.ar/api/listProductxUserxClient?id_user={userId}&id_client={clientId}" \
  -H "Authorization: Bearer {cooптechToken}"
Response:
[
  {
    "id_product": 5,
    "name": "Centinela",
    "description": "Water Treatment Monitoring"
  },
  {
    "id_product": 3,
    "name": "Mas Agua",
    "description": "Water Distribution"
  }
]

Public Endpoints

Some endpoints are publicly accessible without authentication. Use the requestPublic function for these:
const requestPublic = async (url, method, data = false) => {
  const response = await axios({
    method,
    url,
    data: data || {},
    withCredentials: true,
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
  });
  return response;
};
Public endpoints should be used sparingly and only for non-sensitive operations like health checks or public dashboards.

Token Storage

Tokens are stored in local storage:
// Store token
localStorage.setItem('token', tokenValue);

// Retrieve token
const token = localStorage.getItem('token');

// Store user info
localStorage.setItem('usuario', JSON.stringify(userObject));

Error Handling

401 Unauthorized

If you receive a 401 error, your token is invalid or expired. Re-authenticate to get a new token.

500 Internal Server Error

The API returns detailed error messages in the response body:
{
  "field_name": {
    "message": "Validation error description"
  }
}

Security Best Practices

Never expose authentication tokens in client-side code, logs, or version control.
  • Store tokens securely (localStorage or httpOnly cookies)
  • Always use HTTPS in production
  • Implement token refresh logic for long-lived sessions
  • Clear tokens on logout
  • Use environment variables for API endpoints

Next Steps

Variables API

Manage monitoring variables

Alarms API

Configure alarm conditions

Build docs developers (and LLMs) love