ssm.ro Docs
API for Developers

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.

FieldRequiredNotes
organizatieYes (all endpoints: GET, POST, PATCH)The organization's subdomain. Missing → 400 Organizatia nu este setata; wrong → 400 Organizatie invalida
marcaYes (POST and PATCH)The employee's unique key. Missing on POST → 422 Lipsa Marca
numeYesMissing → 422 Lipsa Nume
departamentYes*Created automatically if it does not exist, provided the option is enabled.* Missing → 422 Lipsa Departament
postYes*Created automatically if it does not exist, provided the option is enabled.* Missing → 422 Lipsa Post
corYes*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

FieldTypeAccepted valuesDescription
numestring—Last name
prenumestring—First name
emailstring—Email address (used for authentication in the platform). Unique within the organization
departamentstring—Department name
codDepartamentstring—External department code
corstring—Job title according to the Romanian Classification of Occupations (COR)
poststring—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
marcastring—Unique employee identifier key (internal HR ID)
marcaSuperiorstring—Employee ID of the direct supervisor (N+1)
marcaSuperior2string—Employee ID of the N+2 supervisor (where applicable)
marcaInlocuitorstring—Employee ID of the replacement
adresastring—Employee's address
localitatestring—City/town
judetstring—County
dataNasteriistringfree textDate 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
locatieFizicastring—Physical location / office (e.g. Office 101)
statusstringactiv rez suspendatEmployee's contract status
organizatiestring—Organization name in the platform
echipaPSIstringDa NuMember of the PSI team (Fire Prevention and Firefighting)
telefonstring—Employee's phone number
cnpstring13 digitsPersonal Identification Number (CNP). Validated if provided: exactly 13 digits and unique within the organization
limbastringro enEmployee's interface language in the platform
calificarestring—Employee's qualification
cetateniestring—Employee's citizenship
nationalitatestring—Employee's nationality / country
dataIncepereActivitatestringYYYY-MM-DDStart 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 marca field is the employee's unique identifier and is used as the lookup key in GET /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; organizatie and marca identify the contact.
  • Empty values do not clear data. A field sent as null or "" 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.
  • status values: activ = active employee, rez = reserved / temporarily inactive, suspendat = suspended.
  • Department identified via codDepartament. The department is identified by codDepartament (the unique external code from HR). If you send the same codDepartament with a departament value 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.
  • cnp is validated only if provided: it must have exactly 13 digits and be unique within the organization.
  • telefon is 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).
  • post is the risk group, not the job title. The job title is cor (the COR occupation); post is 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 returns 422); a job title with no allocation lands temporarily in the internal _FUNCTII_NEALOCATE_ group until it is allocated manually. For a cor → post mapping example, see Node.js example.
  • email is unique within the organization. Two contacts with different marca cannot share the same email in the same organization. For employees with multiple contracts, see Employees with multiple contracts.