Contacte
Endpoint-uri pentru gestionarea contactelor (angajaților) în platforma ssm.ro: preluare, creare și modificare.
Endpoint-urile de contacte permit sincronizarea angajaților din sistemul tău HR cu platforma ssm.ro. Un contact reprezintă un angajat înrolat în organizația ta.
Preluare contact
GET /v1/contacts?organizatie={organizatie}&marca={marca}Returnează datele unui contact pe baza mărcii (cheia unică de identificare) și a numelui organizației. Marca se transmite ca parametru de query, deci sunt acceptate și mărcile care conțin caractere URL-unsafe, atâta timp cât valoarea este codificată cu encodeURIComponent().
Exemplu request:
GET /v1/contacts?organizatie=demo-organization&marca=M00212Parametri
| Parametru | În | Tip | Obligatoriu | Descriere |
|---|---|---|---|---|
organizatie | query | string | Da | Numele organizației |
marca | query | string | Da | Marca — cheia unică de identificare a angajatului |
Răspunsuri
| Cod | Descriere |
|---|---|
200 OK | Obiect Employee |
404 Not Found | { "error": "Contactul nu a fost gasit" } — marca nu există |
422 Unprocessable Entity | { "error": "Marca este obligatorie" } — parametrul marca lipsește sau este gol |
500 Server Error | Eroare internă server |
Ruta veche GET /v1/contacts/{id} — depreciată
Depreciat din septembrie 2026
Ruta care primește marca în calea URL (GET /v1/contacts/{id}) este depreciată,
pentru că mărcile care conțin caractere URL-unsafe nu pot fi transmise corect printr-un
segment de cale. Folosiți GET /v1/contacts?marca=, cu marca codificată prin
encodeURIComponent(). Ruta veche rămâne funcțională, dar nu mai este întreținută.
Creare contact nou
POST /v1/contactsCreează un contact nou în organizație. Dacă marca există deja, operațiunea va eșua.
Request body
Content-Type: application/json — obiect Employee.
Exemplu:
{
"nume": "Ion",
"prenume": "Popescu",
"email": "ion.popescu@exemplu.ro",
"departament": "Finanțe",
"codDepartament": "D163",
"cor": "Referent bancar",
"post": "Tesa",
"marca": "M00212",
"marcaSuperior": "M00132",
"adresa": "Str. Soarelui nr. 2",
"localitate": "Brașov",
"judet": "Brașov",
"dataNasterii": "1981-08-24",
"locatieFizica": "Office 101",
"status": "activ",
"organizatie": "demo-organization",
"echipaPSI": "Nu",
"telefon": "+40722333444",
"cnp": "1800101221144",
"limba": "ro",
"calificare": "Inginer",
"cetatenie": "Romana",
"nationalitate": "Romania",
"dataIncepereActivitate": "2020-01-15"
}Răspunsuri
| Cod | Descriere |
|---|---|
200 OK | Contactul a fost creat — returnează obiectul Employee |
404 Not Found | Organizația nu a fost găsită |
422 Unprocessable Entity | Date invalide — răspuns JSON cu detalii eroare |
500 Server Error | Eroare internă server |
Modificare contact existent
PATCH /v1/contacts/updateActualizează datele unui contact existent, identificat prin câmpul marca. Doar câmpurile trimise în body vor fi actualizate.
Request body
Content-Type: application/json — obiect Employee complet. Câmpurile marca și organizatie sunt obligatorii pentru identificare.
Exemplu:
{
"nume": "Ion",
"prenume": "Popescu",
"email": "ion.popescu@exemplu.ro",
"departament": "Finanțe",
"codDepartament": "D163",
"cor": "Referent bancar",
"post": "Tesa",
"marca": "M00212",
"marcaSuperior": "M00132",
"marcaSuperior2": "M0081",
"marcaInlocuitor": "M00301",
"adresa": "Str. Soarelui nr. 2",
"localitate": "Brașov",
"judet": "Brașov",
"dataNasterii": "1981-08-24",
"locatieFizica": "Office 101",
"status": "activ",
"organizatie": "demo-organization",
"echipaPSI": "Nu",
"telefon": "+40722333444",
"cnp": "1800101221144",
"limba": "ro",
"calificare": "Inginer",
"cetatenie": "Romana",
"nationalitate": "Romania",
"dataIncepereActivitate": "2020-01-15"
}Răspunsuri
| Cod | Descriere |
|---|---|
200 OK | Contactul a fost actualizat — returnează obiectul Employee |
204 No Content | Nicio modificare efectuată — datele trimise sunt identice cu cele existente |
404 Not Found | Contactul nu a fost găsit |
422 Unprocessable Entity | Date invalide — răspuns JSON cu detalii eroare |
500 Server Error | Eroare internă server |
Comportament câmpuri opționale
Toate câmpurile în afară de marca și organizatie sunt opționale. La PATCH, doar câmpurile trimise în body sunt actualizate; un câmp absent sau gol ("", null) este ignorat — valoarea existentă rămâne neschimbată. În particular, un PATCH fără status nu suspendă angajatul, iar un POST fără status creează angajatul cu status activ.
Departamentul este identificat prin codDepartament. Dacă trimiți același codDepartament cu o valoare departament diferită, denumirea departamentului este actualizată (redenumire) — nu se creează un departament nou. Astfel, o redenumire în HR se propagă în platformă atâta timp cât codul rămâne același.
Validări câmpuri noi (422 Unprocessable Entity)
| Situație | Cod | Explicație |
|---|---|---|
cnp deja folosit de alt angajat | 422 | CNP-ul trebuie să fie unic în organizație |
cnp cu format greșit | 422 | CNP invalid (format valid: 13 cifre) |
limba în afara valorilor acceptate | 422 | Sunt permise doar ro, en |
dataIncepereActivitate cu dată invalidă | ignorat | O dată neparsabilă este tratată ca goală (fără eroare) |
telefon prea scurt (sub 9 cifre) | ignorat | Numărul este normalizat automat; valorile prea scurte sunt ignorate (fără eroare) |