Schema — Employee
Complete structure of the Employee object used in the ssm.ro API's contact endpoints.
The Employee object represents an employee (contact) in the ssm.ro platform. It is used as the request body for creation and updates, and as the response when retrieving data.
Required fields
These fields must be sent on every write (POST and PATCH), even when the value does not change. All other fields in the table below are optional.
| Field | Required | Notes |
|---|---|---|
organizatie | Yes (all endpoints: GET, POST, PATCH) | The organization's subdomain. Missing → 400 Organizatia nu este setata; wrong → 400 Organizatie invalida |
marca | Yes (POST and PATCH) | The employee's unique key. Missing on POST → 422 Lipsa Marca |
nume | Yes | Missing → 422 Lipsa Nume |
departament | Yes* | Created automatically if it does not exist, provided the option is enabled.* Missing → 422 Lipsa Departament |
post | Yes* | Created automatically if it does not exist, provided the option is enabled.* Missing → 422 Lipsa Post |
cor | Yes* | Created automatically under that post. Missing → 422 Lipsa Functie COR |
* The value must always be sent, but it does not have to already exist in the platform — see below.
Automatic creation depends on an organization setting
A departament or post that does not exist in the platform is created automatically only
if the corresponding option is enabled under Settings → Options → Advanced employee import
settings (Automatically add departments / Automatically add positions), editable by the
Super-User only — see
Settings.
If the option is disabled, a value that does not exist is rejected with 422, just like a
missing field: departments and posts have to be created in the platform beforehand.
Fields
| Field | Type | Accepted values | Description |
|---|---|---|---|
nume | string | — | Last name |
prenume | string | — | First name |
email | string | — | Email address (used for authentication in the platform). Unique within the organization |
departament | string | — | Department name |
codDepartament | string | — | External department code |
cor | string | — | Job title according to the Romanian Classification of Occupations (COR) |
post | string | — | The risk group the job belongs to — it determines the SSM training sent to the employee. It is not the job title (that is cor) — see the note below |
marca | string | — | Unique employee identifier key (internal HR ID) |
marcaSuperior | string | — | Employee ID of the direct supervisor (N+1) |
marcaSuperior2 | string | — | Employee ID of the N+2 supervisor (where applicable) |
marcaInlocuitor | string | — | Employee ID of the replacement |
adresa | string | — | Employee's address |
localitate | string | — | City/town |
judet | string | — | County |
dataNasterii | string | free text | Date of birth, or date and place of birth combined (e.g. 1981-08-24 or 24.08.1981, Brașov). Free-text field, not validated as a date — send it exactly as it should appear on the organization's documents |
locatieFizica | string | — | Physical location / office (e.g. Office 101) |
status | string | activ rez suspendat | Employee's contract status |
organizatie | string | — | Organization name in the platform |
echipaPSI | string | Da Nu | Member of the PSI team (Fire Prevention and Firefighting) |
telefon | string | — | Employee's phone number |
cnp | string | 13 digits | Personal Identification Number (CNP). Validated if provided: exactly 13 digits and unique within the organization |
limba | string | ro en | Employee's interface language in the platform |
calificare | string | — | Employee's qualification |
cetatenie | string | — | Employee's citizenship |
nationalitate | string | — | Employee's nationality / country |
dataIncepereActivitate | string | YYYY-MM-DD | Start date of employment (contract date), ISO 8601 format |
Full example
{
"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"
}Notes
- The
marcafield is the employee's unique identifier and is used as the lookup key inGET /v1/contacts?marca=and as a reference in the supervisor hierarchy. - For
PATCH /v1/contacts/update, the complete Employee schema must be sent. The required fields (organizatie,marca,nume,departament,post,cor) must be included here too, not only on creation;organizatieandmarcaidentify the contact. - Empty values do not clear data. A field sent as
nullor""is ignored and the existing value remains unchanged. To clear a free-text field, send any non-empty string (e.g."-","n/a") — see Contacts. statusvalues:activ= active employee,rez= reserved / temporarily inactive,suspendat= suspended.- Department identified via
codDepartament. The department is identified bycodDepartament(the unique external code from HR). If you send the samecodDepartamentwith adepartamentvalue different from the existing one, the department name is updated (renamed), without creating a new department. This way, a rename in HR propagates to the platform as long as the code stays the same. cnpis validated only if provided: it must have exactly 13 digits and be unique within the organization.telefonis normalized automatically; values that are too short (under 9 digits) are ignored, without an error.dataIncepereActivitate: an unparsable date is treated as empty (the field is ignored, without an error).postis the risk group, not the job title. The job title iscor(the COR occupation);postis the category defined by the SSM inspector that groups a set of COR job titles and determines which training is sent (e.g.Lucratori birou,Lucratori cu risc electric,Lucratori la inaltime). Posts are created manually by the inspector in the platform, or automatically on import if the super user has enabled Automatically add positions (otherwise a post that does not exist returns422); a job title with no allocation lands temporarily in the internal_FUNCTII_NEALOCATE_group until it is allocated manually. For acor→postmapping example, see Node.js example.emailis unique within the organization. Two contacts with differentmarcacannot share the sameemailin the same organization. For employees with multiple contracts, see Employees with multiple contracts.