ssm.ro Docs

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=M00212

Parametri

ParametruÎnTipObligatoriuDescriere
organizatiequerystringDaNumele organizației
marcaquerystringDaMarca — cheia unică de identificare a angajatului

Răspunsuri

CodDescriere
200 OKObiect 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 ErrorEroare 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/contacts

Creează 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

CodDescriere
200 OKContactul a fost creat — returnează obiectul Employee
404 Not FoundOrganizația nu a fost găsită
422 Unprocessable EntityDate invalide — răspuns JSON cu detalii eroare
500 Server ErrorEroare internă server

Modificare contact existent

PATCH /v1/contacts/update

Actualizează 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

CodDescriere
200 OKContactul a fost actualizat — returnează obiectul Employee
204 No ContentNicio modificare efectuată — datele trimise sunt identice cu cele existente
404 Not FoundContactul nu a fost găsit
422 Unprocessable EntityDate invalide — răspuns JSON cu detalii eroare
500 Server ErrorEroare 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țieCodExplicație
cnp deja folosit de alt angajat422CNP-ul trebuie să fie unic în organizație
cnp cu format greșit422CNP invalid (format valid: 13 cifre)
limba în afara valorilor acceptate422Sunt permise doar ro, en
dataIncepereActivitate cu dată invalidăignoratO dată neparsabilă este tratată ca goală (fără eroare)
telefon prea scurt (sub 9 cifre)ignoratNumărul este normalizat automat; valorile prea scurte sunt ignorate (fără eroare)