API — Autentificare
Autentificare cu API Key pentru integrările externe și JWT pentru SPA-ul SCOPO Intelligence.
API — Autentificare
API Key (pentru integrări externe)
API-ul public v1 folosește API Key — un token separat de contul tău, creat explicit pentru integrări programatice (CRM, BI, automatizări).
Obținerea cheii
- Navighează la Settings → API în aplicație (plan Consultant)
- Apasă Generează API Key
- Copiază cheia din modalul de confirmare — este afișată o singură dată
- Dacă pierzi cheia, generează una nouă și revoc-o pe cea veche
Utilizare
Trimite cheia în antetul Authorization la fiecare cerere:
Authorization: Bearer scopo_<cheie>
Exemplu curl:
curl https://api.scopo.ro/api/v1/tenders \
-H "Authorization: Bearer scopo_a1b2c3d4e5f6..." \
-H "Content-Type: application/json"
Format cheie
Cheile au prefixul scopo_ urmat de 64 caractere hexazecimale:
scopo_a1b2c3d4e5f6789012345678901234567890123456789012345678901234
Gestionarea cheilor
| Acțiune | Unde |
|---|---|
| Generare | Settings → API → Generează |
| Vizualizare lista | Settings → API (masked: scopo_1a••••) |
| Revocare | Settings → API → Revocă |
Revocarea este efectivă în mai puțin de 1 secundă. Cererile cu cheia revocată primesc 401 API_KEY_REVOKED.
Limite și restricții
- Maximum 3 chei active per tenant (Faza 1 beta)
- Cheile nu expiră automat — rotația manuală este recomandată periodic
- Cheile sunt read-only: nu permit modificarea datelor
- Izolarea tenant este identică cu JWT — RLS PostgreSQL + CompanyScopeGuard aplicate
Erori de autentificare API Key
| Cod | Eroare | Cauză |
|---|---|---|
| 401 | API_KEY_MISSING | Antetul Authorization: Bearer lipsește |
| 401 | API_KEY_INVALID | Cheia nu există sau nu a fost recunoscută |
| 401 | API_KEY_REVOKED | Cheia a fost revocată |
| 403 | PLAN_UPGRADE_REQUIRED | Plan < Consultant |
JWT (pentru SPA — utilizare internă)
Această secțiune este relevantă doar dacă construiești integrări care mimează comportamentul SPA-ului Angular. Pentru orice integrare externă, folosește API Key.
POST /auth/login
POST /auth/login
Content-Type: application/json
{
"email": "utilizator@exemplu.ro",
"password": "parola"
}
Răspuns (200):
{
"data": {
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
"expiresIn": 900
}
}
POST /auth/refresh
POST /auth/refresh
Content-Type: application/json
{
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4..."
}
Access token: TTL 15 minute. Refresh token: TTL 7 zile.
POST /auth/logout
POST /auth/logout
Authorization: Bearer <access_token>
Răspuns: 204 No Content
Vezi și
- Credite API — cost și sold
- Erori API — coduri de eroare complete
- Referință API — overview