Autentificare API
API-ul flowSCMC folosește **Bearer tokens** (Laravel Sanctum) cu permisiuni granulare (**abilities**) și context obligatoriu de tenant via X-Company-Id.
Bearer token (Sanctum)
| Aspect | Detaliu |
|---|---|
| Emitere | POST /api/auth/token sau UI Administrare |
| Revocare | POST /api/auth/revoke |
| Expirare | Configurabilă (typical 90 zile) |
| Abilities | Subset din whitelist platformă |
| Transport | Header Authorization — niciodată în URL |
Emitere token — request complet
POST /api/auth/token
Content-Type: application/json
{
"email": "integrator@firma.ro",
"password": "***",
"abilities": [
"articles:read",
"stock:read",
"sales-orders:write"
],
"device_name": "erp-production-2026"
}
Răspuns:
{
"token": "1|plainTextTokenHere",
"abilities": ["articles:read", "stock:read", "sales-orders:write"]
}
Stocați token-ul o singură dată la creare — nu e re-afisat complet din UI.
Abilities disponibile
*
articles:read, articles:write
stock:read
sales-orders:read, sales-orders:write
purchase-orders:read, purchase-orders:write
receptions:read, receptions:write
returns:read
webhooks:read, webhooks:write
clients:read, partners:read, warehouses:read
| Ability | Permite |
|---|---|
* |
Tot — evitați producție |
articles:read |
GET articole, sync |
articles:write |
POST/PATCH articole |
stock:read |
GET stoc |
sales-orders:write |
Creare/actualizare SO |
webhooks:write |
Configurare webhooks |
Token cu ability lipsă → 403 Forbidden.
Headers obligatorii
| Header | Când | Exemplu | |
|---|---|---|---|
Authorization: Bearer {token} |
Aproape tot | Bearer 1\ | abc... |
X-Company-Id: {numeric} |
Resurse date | 42 | |
X-Three-Pl-Id |
Context 3PL multi-company | 1 | |
Idempotency-Key: {uuid} |
POST duplicate-safe | uuid v4 | |
Accept: application/json |
Recomandat | — | |
Content-Type: application/json |
POST/PATCH body | — |
Exemplu request complet
GET /api/articles/123
Authorization: Bearer 1|xxxxxxxx
X-Company-Id: 42
Accept: application/json
Multi-company — flux
1. POST /api/auth/token
2. GET /api/companies → [{ id: 42, name: "ACME" }, ...]
3. Pentru fiecare request operațional:
X-Company-Id: {id ales}
Un token poate accesa mai multe companii — separați logic în integrare (ex. mapare ERP plant → company id).
Autentificare web vs API
| Canal | Mecanism | Utilizare |
|---|---|---|
| Browser utilizator | SCMC-Gate SSO | Operatori, admin |
| Script / ERP | Bearer token | Automatizare |
| Webhook inbound | HMAC signature | Verificare evenimente |
| Integrări eTSM | Bearer dedicat | Config admin |
Nu expuneți parola utilizatorului în scripturi — token API din UI.
Integrări inbound (Bearer separat)
| Integrare | Prefix | Auth |
|---|---|---|
| eTSM transport | /api/integrations/etsm/* |
Bearer partajat per site |
Credențialele se configurează în panoul administrare — nu sunt publice.
Detalii: Integrări inbound.
Kernel API (platformă SCMC)
/api/kernel/v1/* — token dedicat platformă:
- Topology site-uri
- Statistici globale
- Module on/off
Nu pentru integratori ERP obișnuiți.
Rate limiting
| Limită | Valoare tipică |
|---|---|
| Auth token | 10 req/min per IP |
| API date | ~60 req/min per companie |
| Răspuns | 429 + Retry-After |
Strategie: backoff exponențial, webhooks în loc de polling.
Detalii: Erori.
Securitate — checklist
- [ ] TLS 1.2+ obligatoriu
- [ ] Token rotit periodic
- [ ] Abilities minime
- [ ] Revocare la offboarding integrator
- [ ] Logs fără token plain text
- [ ] Webhook signature verificată