Documentație API

API REST pentru integrare externă. Accesează articole, stoc, comenzi, recepții și altele prin Bearer token.

Autentificare
Prezentare generală

API-ul permite sistemelor externe (ERP, aplicații mobile) să citească și să scrie date operaționale în 3PL Client (articole, comenzi, recepții, retururi, webhooks și date de referință). Autentificarea folosește Bearer tokens (Laravel Sanctum). Toate endpoint-urile de date necesită autentificare.

Fiecare rută necesită și modulul API plus modulul de conținut corespunzător (ex. inbound pentru recepții) activ pentru compania din X-Company-Id.

URL de bază: https://flowscmc.ro/api

Specificație OpenAPI 3.0 (citibilă de unelte), aliniată la aceste endpoint-uri: https://flowscmc.ro/openapi.json

Autentificare

Obține un Bearer token trimitând email și parolă:

POST https://flowscmc.ro/api/auth/token
Content-Type: application/json

{
  "email": "your@email.com",
  "password": "your-password"
}

// Response:
{
  "token": "1|abc123...",
  "user": { "id": 1, "name": "...", "email": "..." }
}

Folosește tokenul în toate request-urile ulterioare:

Authorization: Bearer 1|abc123...

Pentru a revoca tokenul curent (deconectare):

POST https://flowscmc.ro/api/auth/revoke
Authorization: Bearer 1|abc123...
Context companie

Pentru a filtra datele după companie, trimite header-ul opțional:

X-Company-Id: 123

Utilizatorul trebuie să aibă acces la compania specificată. Fără acest header, super-admin văd toate companiile; utilizatorii obișnuiți văd compania lor principală.

Cantități UM 3PL pe linii

La definirea articolului, prima UM din sistem (câmpul um3pl, UM 3PL în interfață) trebuie să fie cea pentru manipularea fizică în depozit. UM2 și UM3 sunt pentru nivele superioare de ambalare, dacă este nevoie.

Comenzile de achiziție, comenzile de vânzare, recepțiile și retururile folosesc pe linie câmpurile um3pl și quantity_um3pl. Puteți trimite zecimale cu virgulă (ex. 1,5); API-ul normalizează la punct înainte de validare.

Dacă articolul impune cantități întregi pe UM 3PL sau catalogul UM al furnizorului 3PL marchează acel cod ca „doar întregi”, quantity_um3pl trebuie să fie număr întreg; altfel validarea eșuează cu răspunsul standard de erori.

Integrare eTSM inbound (Bearer partajat, fără Sanctum)

Configurați ETSM_INBOUND_BEARER_TOKEN în mediu. Header: Authorization: Bearer <acel token>. Pentru recepții: POST /api/integrations/etsm/receptions cu același corp JSON ca POST /api/receptions și X-Company-Id = id-ul companiei client. GET /api/integrations/etsm/ping verifică tokenul.

GET https://flowscmc.ro/api/integrations/etsm/ping
Authorization: Bearer <ETSM_INBOUND_BEARER_TOKEN>

POST https://flowscmc.ro/api/integrations/etsm/receptions
Authorization: Bearer <ETSM_INBOUND_BEARER_TOKEN>
X-Company-Id: 123
Content-Type: application/json

{ ... same JSON as POST /api/receptions ... }
Paginare

Endpointurile de listă suportă paginarea prin parametri de interogare:

?page=1&per_page=25

Implicit per_page: 25. Maxim per_page: 100 (200 pentru stoc). Răspunsul include meta și linkuri.

Endpoint-uri disponibile
Metodă Criteriu de eficacitate Descriere
GET /api/health Health check pentru monitoring (fără autentificare)
GET /api/integrations/etsm/ping Verificare conectivitate eTSM (Bearer partajat; 503 dacă tokenul nu e configurat)
POST /api/integrations/etsm/receptions Creare recepție din eTSM (obligatoriu X-Company-Id; aceleași reguli ca /api/receptions)
GET /api/companies Companii client 3PL accesibile utilizatorului autentificat (selector în playground)
GET /api/articles Listă articole (paginată)
GET /api/articles/sync Sincronizare incrementală articole (updated_since, cursor)
POST /api/articles Creare articol
GET /api/articles/{id} Detalii articol
PUT /api/articles/{id} Actualizare articol
GET /api/stock Niveluri stoc (paginate, max 200/pagină)
GET /api/sales-orders Comenzi de vânzare (paginate)
POST /api/sales-orders Creare comandă de vânzare
GET /api/sales-orders/{id} Detalii Comandă de Vânzare
PUT /api/sales-orders/{id} Actualizare comandă de vânzare
GET /api/purchase-orders Comenzi de achiziție (paginate)
POST /api/purchase-orders Creare comandă de achiziție
GET /api/purchase-orders/{id} Detalii Comandă de Achiziție
PUT /api/purchase-orders/{id} Actualizare comandă de achiziție
GET /api/receptions Recepții (paginate)
POST /api/receptions Creare recepție
GET /api/receptions/{id} Detalii Recepție
PUT /api/receptions/{id} Actualizare recepție
GET /api/returns Retururi (limită 100)
POST /api/returns Creare retur
GET /api/returns/{id} Detalii Retur
GET /api/webhooks Listă webhooks
POST /api/webhooks Creare webhook
GET /api/webhooks/{id} Detalii webhook
PUT /api/webhooks/{id} Actualizare webhook
DELETE /api/webhooks/{id} Ștergere webhook
GET /api/clients Listă companii client 3PL (paginată)
GET /api/clients/{id} Detalii companie client 3PL
GET /api/partners Listă parteneri (paginată)
GET /api/partners/{id} Detalii partener
GET /api/warehouses Listă depozite (paginată)
GET /api/warehouses/{id} Detalii depozit
GET /graphql Endpoint GraphQL – Interogare articole și alte date prin GraphQL. Necesită token Bearer și header X-Company-Id.
Endpoint GraphQL

Interogare articole și alte date prin GraphQL. Necesită token Bearer și header X-Company-Id.

URL de bază: https://flowscmc.ro/graphql

Exemplu interogare – listă articole:

POST https://flowscmc.ro/graphql
Authorization: Bearer YOUR_TOKEN
X-Company-Id: 1
Content-Type: application/json

{
  "query": "{ articles(limit: 10) { id article_code description } }"
}

Folosiți același token Bearer și antetul X-Company-Id ca pentru endpointurile REST.

Health check (JSON)

GET /api/health returnează același JSON ca GET /health și GET /up (fără autentificare). Răspunsul include verificări agregate, heartbeats (nume scheduler, ultimul ping, ok), integrări și module. Dacă tabela heartbeats e goală, items conține un rând placeholder pentru cron și no_records este true până rulează scheduler-ul (heartbeat:ping).

{
  "status": "healthy",
  "app": { "name": "3PL", "env": "production" },
  "urls": {
    "app": "https://example.com",
    "api": "https://example.com/api"
  },
  "checks": {
    "database": true,
    "cache": true,
    "queue": true,
    "redis": true,
    "storage": true,
    "storage_public": true,
    "heartbeat": true
  },
  "heartbeats": {
    "stale_after_minutes": 15,
    "no_records": false,
    "items": [
      { "name": "cron", "last_ping_at": "2026-04-09T12:00:00.123456Z", "last_ping_at_ms": 1775736000123, "ok": true }
    ]
  },
  "integrations": { "anaf": true },
  "modules": [ { "slug": "api", "name": "API" } ],
  "timestamp": "2026-04-09T12:00:00+00:00"
}

urls.app și urls.api provin din APP_URL (bază aplicație și /api). Prometheus: adăugați ?format=prometheus. Interfață cu heartbeats live: Platformă → Health (super-admin).

Exemplu request
curl -X GET "https://flowscmc.ro/api/articles" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "X-Company-Id: 1" \
  -H "Accept: application/json"
Limitare rate
  • POST /api/auth/token: 10 request-uri pe minut
  • Endpoint-uri date: 60 request-uri pe minut
Loc de joacă API

Testează endpoint-urile API direct din această pagină. Mai întâi obține un token, apoi selectează un endpoint și trimite request-ul.

1
Obține token
2
Endpoint de test
Gata să integrezi?

Autentifică-te pentru a crea Bearer tokens și accesa API-ul.

Autentificare

Folosim cookie-uri esențiale pentru funcționarea aplicației. Cookie-urile opționale ne ajută să îmbunătățim experiența. Află mai mult