API Publikoa v1
PMST.si — Kanpoko integrazioetarako REST APIaren dokumentazioa.
La API soporta dos métodos de autenticación:
1. JWT Bearer Token:
Authorization: Bearer <token>2. API Key:
X-API-Key: <api_key>
200 peticiones por hora por IP. Al superar el límite se devuelve HTTP 429.
Headers de respuesta:
X-RateLimit-Limit, X-RateLimit-Remaining.
Aurkibidea
- POST /auth/login
- POST /auth/refresh
- GET /empresas
- GET /empresas/{id}
- GET /trabajadores
- GET /estatistikak/dashboard
- POST /formularioak/erantzun
- GET /jakinarazpenak
- POST /jakinarazpenak/mark-read
- API gakoak
URL oinarria
https://pmst.si/api/v1
Autenticación
POST /auth/login
Autentifikatu erabiltzailea eta lortu JWT tokena + refresh tokena.
Eskaeraren gorputza
| Eremua | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
posta elektroniko | katea | derrigorrezkoa | Erabiltzailearen posta elektronikoa |
pasahitza | string | derrigorrezkoa | Erabiltzailearen pasahitza |
Eskaera adibidea
curl -X POST https://pmst.si/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "usuario@empresa.com", "password": "mi_password"}'
Erantzun adibidea (200)
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"refresh": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"id": 42,
"email": "usuario@empresa.com",
"nombre": "Juan García",
"rol": "empresa"
}
},
"timestamp": 1719398400
}
POST /auth/refresh
Berritu JWT tokena refresh tokena erabiliz.
| Eremua | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
refresh_token | string | derrigorrezkoa | Loginean lortutako freskatzeko tokena |
Eskaera adibidea
curl -X POST https://pmst.si/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refresh_token": "eyJhbGciOiJIUzI1NiIs..."}'
Erantzun adibidea (200)
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"refresh": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600
},
"timestamp": 1719398400
}
POST /auth/refresh antes de que expire el access token.
Enpresak
GET /empresas
Autentifikatutako erabiltzaileari elkartutako enpresak zerrendatu.
Kontsulta-parametroak
| Parametroa | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
page | int | aukerakoa | Orrialdea (lehenetsia: 1) |
limit | int | aukerakoa | Emaitzak orrialdeko (lehenetsia: 25, gehienez: 100) |
Eskaera adibidea
curl -X GET "https://pmst.si/api/v1/empresas?page=1&limit=10" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Erantzun adibidea (200)
{
"success": true,
"data": {
"empresas": [
{
"iId": 8,
"sName": "EMPRESA EJEMPLO SL",
"sCIF": "B12345678",
"sSector": "Servicios",
"iNumLangileak": 15,
"dtCreatedAt": "2024-01-15 10:00:00"
}
],
"pagination": {
"total": 1,
"page": 1,
"limit": 10,
"pages": 1
}
},
"timestamp": 1719398400
}
GET /enpresak/{id}
Enpresa baten xehetasun osoa lortu.
Bidearen parametroak
| Parametroa | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
id | int | beharrezkoa | Enpresaren ID |
Eskaera adibidea
curl -X GET "https://pmst.si/api/v1/empresas/8" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Erantzun adibidea (200)
{
"success": true,
"data": {
"empresa": {
"iId": 8,
"sName": "EMPRESA EJEMPLO SL",
"sCIF": "B12345678",
"sSector": "Servicios",
"iNumTrabajadores": 15,
"dtCreatedAt": "2024-01-15 10:00:00",
"sAddress": "Calle Mayor 1",
"sPostalCode": "28001",
"sCity": "Madrid",
"sProvince": "Madrid"
}
},
"timestamp": 1719398400
}
Trabajadores
GET /langileak?enpresa={id}
Enpresa jakin bateko langileak zerrendatu.
Kontsultako parametroak
| Parametroa | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
enpresa | int | beharrezkoa | Enpresaren IDa |
page | int | aukerakoa | Orria (lehenetsia: 1) |
limit | int | aukerakoa | Emaitzak orrialdeko (lehenetsia: 25, gehienez: 100) |
Eskaera-adibidea
curl -X GET "https://pmst.si/api/v1/trabajadores?empresa=8&page=1&limit=25" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Erantzun-adibidea (200)
{
"success": true,
"data": {
"trabajadores": [
{
"iId": 101,
"sName": "María",
"sLastName": "López García",
"sEmail": "mlopez@empresa.com",
"sPhone": "684762300",
"sDepartment": "Recursos Humanos",
"sPuesto": "Técnica de prevención",
"bActive": 1,
"dtCreatedAt": "2024-03-01 09:00:00"
}
],
"pagination": {
"total": 15,
"page": 1,
"limit": 25,
"pages": 1
}
},
"timestamp": 1719398400
}
Estatistikak
GET /estatistikak/dashboard?enpresa={id}
Enpresa bateko dashboardaren estatistikak eskuratzea.
| Parametroa | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
enpresa | int | beharrezkoa | Enpresaren ID |
Eskaeraren adibidea
curl -X GET "https://pmst.si/api/v1/estadisticas/dashboard?empresa=8" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Erantzunaren adibidea (200)
{
"success": true,
"data": {
"trabajadores": 15,
"formularios_completados": 42,
"formularios_pendientes": 8,
"co2_estimado_toneladas": 12.5,
"clc_asociadas": 3,
"fecha_actualizacion": "2025-06-26 12:00:00"
},
"timestamp": 1719398400
}
Formularioak
POST /inprimakiak/erantzun
Formulario baten erantzunak bidali.
| Eremua | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
iIdInprimaki | int | beharrezkoa | Formularioaren IDa |
erantzunak | array | beharrezkoa | iIdPregunta eta sRespuesta dituzten objektuen array |
Adibidea Request
curl -X POST "https://pmst.si/api/v1/formularios/responder" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"iIdForm": 5,
"respuestas": [
{"iIdPregunta": 1, "sRespuesta": "Coche compartido"},
{"iIdPregunta": 2, "sRespuesta": "Transporte público"},
{"iIdPregunta": 3, "sRespuesta": "3-5 días a la semana"}
]
}'
Erantzunaren adibidea (200)
{
"success": true,
"data": {
"iIdAnswer": 128,
"sStatus": "completado",
"dtDate": "2025-06-26 12:00:00"
},
"timestamp": 1719398400
}
Jakinarazpenak
GET /jakinarazpenak
Autentifikatutako erabiltzailearen jakinarazpenak zerrendatu.
| Parametroa | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
page | int | aukerazkoa | Orria (lehenetsia: 1) |
limit | int | aukerazkoa | Emaitzak orriko (lehenetsia: 25, gehienez: 100) |
Eskaera adibidea
curl -X GET "https://pmst.si/api/v1/notificaciones?limit=10" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Erantzun adibidea (200)
{
"success": true,
"data": {
"notificaciones": [
{
"iId": 15,
"sTitle": "Nuevo formulario asignado",
"sMessage": "Se ha asignado el formulario de diagnóstico de movilidad.",
"sType": "info",
"bRead": 0,
"dtSent": "2025-06-26 10:30:00"
}
],
"no_leidas": 3,
"pagination": {
"total": 12,
"page": 1,
"limit": 10,
"pages": 2
}
},
"timestamp": 1719398400
}
POST /jakinarazpenak/mark-read
Notifikazioa(k) irakurritzat markatu.
| Eremua | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
id | int | horietako bat | Markatu beharreko notifikazioaren IDa |
all | bool | horietako bat | true bada, marka itzazu guztiak irakurritako gisa |
Eskaera adibidea
curl -X POST "https://pmst.si/api/v1/notificaciones/mark-read" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"all": true}'
Erantzun adibidea (200)
{
"success": true,
"data": {
"marked": 3,
"message": "3 notifications marked as read"
},
"timestamp": 1719398400
}
API gakoak
Kudeatu API gakoak kanpoko sarbide iraunkorrerako JWT gabe.
Autentifikatutako erabiltzailearen API gakoak zerrendatu.
Sortu API gako berria.
| Eremua | Mota | Beharrezkoa | Deskribapena |
|---|---|---|---|
izena | string | beharrezkoa | Gakoaren izen deskribatzailea |
baimenak | string | aukerakoa | Koma bidez bereizitako balioak: read, write, admin (lehenetsia: read) |
egunak_iraungitze | int | aukerakoa | Iraungipenera arteko egunak (lehenetsia: 365, 0 = iraungitzerik gabe) |
API key bat indargabetu (desaktibatu).
Adibidea: API Key sortu
curl -X POST "https://pmst.si/api/v1/api-keys" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"nombre": "Mi Integración", "permisos": "read,write", "dias_expira": 90}'
Erantzunaren adibidea (200)
{
"success": true,
"data": {
"message": "API key generated successfully. Save it now — it won't be shown again.",
"api_key": {
"iId": 1,
"sApiKey": "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4",
"sName": "Mi Integración",
"sPermissions": "read,write",
"dtCreada": "2025-06-26 12:00:00",
"dtExpires": "2025-09-24 12:00:00"
}
},
"timestamp": 1719398400
}
X-API-Key.
API Key-ren erabilera
curl -X GET "https://pmst.si/api/v1/empresas" \ -H "X-API-Key: A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4"
Errore-erantzunak
| Kodea | Esanahia | Deskribapena |
|---|---|---|
400 | Eskaera okerra | Beharrezko parametroak falta dira edo baliogabeak dira |
401 | Baimendu gabe | Token JWT baliogabea/iraungitua edo API key baliogabea |
403 | Debekatuta | Eskatutako baliabiderako baimenik gabeko erabiltzailea |
404 | Ez da aurkitu | Ez da baliabidea aurkitu |
405 | Metodoa ez da onartzen | Endpointeko HTTP metodoa ez da onartzen |
429 | Eskaera gehiegi | Rate limiting-aren muga gainditu da |
500 | Barne-errorea | Zerbitzariaren barne-errorea |
Errore-erantzunaren egitura
{
"success": false,
"error": "Error message describing what went wrong",
"timestamp": 1719398400
}
Hasiera azkarra
# 1. Autenticarse curl -X POST https://pmst.si/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{"email": "admin@pmst.si", "password": "tu_password"}' # 2. Usar el token para acceder a endpoints TOKEN="eyJhbGciOiJIUzI1NiIs..." curl -X GET https://pmst.si/api/v1/empresas \ -H "Authorization: Bearer $TOKEN" # 3. Consultar estadísticas curl -X GET "https://pmst.si/api/v1/estadisticas/dashboard?empresa=8" \ -H "Authorization: Bearer $TOKEN" # 4. Refrescar token cuando expire curl -X POST https://pmst.si/api/v1/auth/refresh \ -H "Content-Type: application/json" \ -d '{"refresh_token": "eyJhbGciOiJIUzI1NiIs..."}'
Laguntza
Para problemas o dudas con la API, contacta: contacto@pmst.si