v2.1 · GraphQL + REST

Documentație API iHRM

Integrare programatică — GraphQL (/eAPI) și REST ecosystem (/api/v1)

Introducere

API-ul iHRM oferă acces programatic la platformă prin GraphQL (/eAPI) și REST v1 (/api/v1) pentru integrarea ecosistemului.

URL: https://testez.ihrm.ro/eAPI/

Toate cererile către API trebuie să fie trimise la URL-ul de bază de mai sus, urmat de interogarea sau mutația GraphQL dorită.

Ce este un API?

Un API (Application Programming Interface) este un set de reguli și definiții care permit aplicațiilor să comunice între ele. API-urile sunt utilizate pentru a permite diferitelor componente software să interacționeze și să partajeze date.

Ce poți face cu API-ul iHRM?

Cu API-ul iHRM, poți accesa și gestiona datele din platforma noastră de resurse umane. Poți efectua operațiuni precum:

  • Autentificare și obținerea unui token de acces
  • Interogarea și gestionarea utilizatorilor
  • Interogarea și gestionarea companiilor
  • Interogarea și gestionarea sesiunilor
  • Interogarea și gestionarea modulelor și seturilor de întrebări

REST API v1 — Ecosistem

Endpoint-uri REST pentru integrarea site-urilor externe (website.ihrm.ro, cariere, marketing). Autentificare prin header X-IHRM-Api-Key pentru operațiuni protejate.

Base URL: https://testez.ihrm.ro/api/v1
Cheia API se configurează în IHRM_API_KEY (identică pe platformă și website).
Metodă Endpoint Auth Descriere
GET /api/v1/jobs Listă joburi publice (sesiuni recrutare active)
GET /api/v1/jobs/{id} Detalii job public
POST /api/v1/guest-apply API Key Aplicare candidat guest — trimite magic link pe email
POST /api/v1/apply-token API Key Token SSO pentru user autentificat pe website → redirect /sso/apply/consume

GET /api/v1/jobs

Returnează sesiunile de recrutare publice (JSON). Folosit de pagina de cariere.

GET https://testez.ihrm.ro/api/v1/jobs
Accept: application/json

POST /api/v1/guest-apply

Trimite link magic candidatului pentru finalizarea aplicării pe platformă.

POST https://testez.ihrm.ro/api/v1/guest-apply
X-IHRM-Api-Key: your-shared-secret
Content-Type: application/json

{
  "email": "candidat@exemplu.ro",
  "session_id": 123
}

POST /api/v1/apply-token

Generează token SSO pentru utilizator deja autentificat pe website extern.

POST https://testez.ihrm.ro/api/v1/apply-token
X-IHRM-Api-Key: your-shared-secret
Content-Type: application/json

{
  "user_email": "user@exemplu.ro",
  "session_id": 123
}

Răspunsul conține URL de redirect către https://testez.ihrm.ro/sso/apply/consume?token=...

Webhooks outbound

Notificări HTTP către sisteme externe (ATS, HRIS, automatizări). Configurare din Companie → Management → Webhooks.

Semnătură HMAC: fiecare payload este semnat cu X-IHRM-Signature (HMAC-SHA256). Secretul este afișat o singură dată la înregistrare.

Evenimente disponibile

  • application.created — candidat nou în pipeline
  • application.stage_changed — mutare între etape ATS
  • application.completed — quiz finalizat
  • webhook.test — ping de test din UI

Format payload (exemplu)

POST https://your-system.example/hooks/ihrm
X-IHRM-Signature: sha256=...
X-IHRM-Event: application.stage_changed
Content-Type: application/json

{
  "event": "application.stage_changed",
  "company_id": 1,
  "application_id": 42,
  "stage": "interview",
  "occurred_at": "2026-06-11T10:00:00Z"
}

Verificare semnătură (PHP)

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_IHRM_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, $yourSecret);
if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

Livrările eșuate sunt reîncercate automat; după eșec definitiv, HR primește notificare în platformă. Jurnalul și replay-ul sunt disponibile în UI.

Autentificare

Pentru a utiliza API-ul, trebuie să includeți un token de autentificare în header-ul fiecărei cereri.

API-ul iHRM folosește autentificarea prin token-uri Bearer. Pentru a obține un token, trebuie să folosiți mutația login.

Authorization: Bearer TOKEN

Obținerea token-ului de autentificare

Pentru a obține un token de autentificare, trebuie să trimiteți o cerere de autentificare folosind următoarea mutație GraphQL:

mutation {
    login(login: "your@email.example", password: "YOUR_PASSWORD") {
        access_token
        user {
            id
            name
            email
        }
    }
}

Înlocuiți your@email.example și YOUR_PASSWORD cu credențialele unui cont valid din platformă. Nu folosiți parole în documentație publică.

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{login(login:"your@email.example",password:"YOUR_PASSWORD"){access_token user{id name email}}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { login(login: \"your@email.example\", password: \"YOUR_PASSWORD\") { access_token user { id name email } } }"
}

După ce ați obținut token-ul de autentificare, includeți-l în header-ul fiecărei cereri pentru a accesa resursele protejate ale API-ului.

Pentru a vă deconecta, puteți folosi mutația logout (necesită autentificare).

Interogări

Notă: Unele interogări necesită ca utilizatorul să aibă acces special în sistem.

Folosind interogările, puteți obține date despre:

  • Utilizatori:
    • me: Informații despre utilizatorul autentificat (necesită autentificare).
      Câmpuri: id, username, name, email
    • user(id: ID!): Informații despre un utilizator specific, identificat prin ID.
      Câmpuri: id, username, name, email
    • users: O listă paginată cu toți utilizatorii.
      Câmpuri: id, username, name, email
  • Companii:
    • companies(id: ID): Informații despre o companie specifică, identificată prin ID.
      Câmpuri: id, name, email, website, phone
    • companiesList: O listă paginată cu toate companiile.
      Câmpuri: id, name, email, website, phone
  • Sesiuni:
    • session(id: ID!): Informații despre o sesiune specifică, identificată prin ID.
      Câmpuri: id, name, start_date, end_date, status
    • sessions(company_id: ID!): O listă paginată cu toate sesiunile pentru o anumită companie.
      Câmpuri: id, name, start_date, end_date, status
  • Module:
    • module(id: ID!): Informații despre un modul specific, identificat prin ID.
      Câmpuri: id, name, description
    • modules(company_id: ID!): O listă paginată cu toate modulele pentru o anumită companie.
      Câmpuri: id, name, description
  • Seturi de întrebări:
    • questionSet(id: ID!): Informații despre un set de întrebări specific, identificat prin ID.
      Câmpuri: id, name, description, timer_minutes
    • questionSets(module_id: ID!): O listă paginată cu toate seturile de întrebări pentru un anumit modul.
      Câmpuri: id, name, description, timer_minutes

Exemplu de interogare pentru a obține informații despre utilizatorul curent (necesită autentificare):

query {
    me {
        id
        name
        email
        username
    }
}

URL-ul complet pentru această interogare este:

https://testez.ihrm.ro/eAPI?query=query{me{id name email username}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "query { me { id name email username } }"
}

Exemplu de interogare pentru a obține informații despre o companie specifică:

query {
    companies(id: 1) {
        id
        name
        email
        website
        phone
    }
}

URL-ul complet pentru această interogare este:

https://testez.ihrm.ro/eAPI?query=query{company(id:1){id name email website phone}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "query { company(id: 1) { id name email website phone } }"
}

Exemplu de interogare pentru a obține informații despre o sesiune specifică:

query {
    session(id: 1) {
        id
        name
        start_date
        end_date
        status
    }
}

URL-ul complet pentru această interogare este:

https://testez.ihrm.ro/eAPI?query=query{session(id:1){id name start_date end_date status}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "query { session(id: 1) { id name start_date end_date status } }"
}

Mutații

Notă: Unele mutații necesită ca utilizatorul să aibă acces special în sistem.

Folosind mutațiile, puteți modifica datele, precum:

  • Gestionarea utilizatorilor:
    • createUser(input: CreateUserInput!): Creează un utilizator nou.
    • updateUser(id: ID!, input: UpdateUserInput!): Actualizează un utilizator existent.
  • Gestionarea companiilor:
    • createCompany(input: CreateCompanyInput!): Creează o companie nouă.
    • updateCompany(id: ID!, input: UpdateCompanyInput!): Actualizează o companie existentă.
  • Gestionarea sesiunilor:
    • createSession(input: CreateSessionInput!): Creează o sesiune nouă.
    • updateSession(id: ID!, input: UpdateSessionInput!): Actualizează o sesiune existentă.

Exemplu de mutație pentru a crea un utilizator nou:

mutation {
    createUser(input: {
        name: "Nume Utilizator"
        prenume: "Prenume Utilizator"
        email: "email@example.com"
        username: "username"
        password: "parola"
    }) {
        id
        name
        email
    }
}

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{createUser(input:{name:%22Nume%20Utilizator%22,prenume:%22Prenume%20Utilizator%22,email:%22email@example.com%22,username:%22username%22,password:%22parola%22}){id name email}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { createUser(input: { name: \"Nume Utilizator\" prenume: \"Prenume Utilizator\" email: \"email@example.com\" username: \"username\" password: \"parola\" }) { id name email } }"
}

Actualizează un utilizator

Acest endpoint actualizează datele unui utilizator existent specificat prin ID.

mutation {
    updateUser(id: 1, input: {
        name: "Nume Nou"
        email: "emailnou@example.com"
    }) {
        id
        name
        email
    }
}

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{updateUser(id:1,input:{name:%22Nume%20Nou%22,email:%22emailnou@example.com%22}){id name email}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { updateUser(id: 1, input: { name: \"Nume Nou\" email: \"emailnou@example.com\" }) { id name email } }"
}

Creează o companie

Acest endpoint creează o nouă companie cu datele specificate.

mutation {
    createCompany(input: {
        name: "Compania Nouă"
        email: "contact@compania.com"
        website: "https://compania.com"
        phone: "123-456-7890"
    }) {
        id
        name
        email
    }
}

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{createCompany(input:{name:%22Compania%20Nouă%22,email:%22contact@compania.com%22,website:%22https://compania.com%22,phone:%22123-456-7890%22}){id name email}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { createCompany(input: { name: \"Compania Nouă\" email: \"contact@compania.com\" website: \"https://compania.com\" phone: \"123-456-7890\" }) { id name email } }"
}

Actualizează o companie

Acest endpoint actualizează datele unei companii existente specificate prin ID.

mutation {
    updateCompany(id: 1, input: {
        name: "Compania Actualizată"
        email: "contactnou@compania.com"
    }) {
        id
        name
        email
    }
}

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{updateCompany(id:1,input:{name:%22Compania%20Actualizată%22,email:%22contactnou@compania.com%22}){id name email}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { updateCompany(id: 1, input: { name: \"Compania Actualizată\" email: \"contactnou@compania.com\" }) { id name email } }"
}

Creează o sesiune

Acest endpoint creează o nouă sesiune cu datele specificate.

mutation {
    createSession(input: {
        name: "Sesiunea Nouă"
        start_date: "2025-02-24T09:00:00"
        end_date: "2025-02-24T17:00:00"
        module_id: 1
        company_id: 1
        question_set_ids: [1, 2, 3]
    }) {
        id
        name
        start_date
        end_date
    }
}

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{createSession(input:{name:%22Sesiunea%20Nouă%22,start_date:%222025-02-24%2009:00:00%22,end_date:%222025-02-24%2017:00:00%22,module_id:1,company_id:1,question_set_ids:[1,2,3]}){id name start_date end_date}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { createSession(input: { name: \"Sesiunea Nouă\" start_date: \"2025-02-24 09:00:00\" end_date: \"2025-02-24 17:00:00\" module_id: 1 company_id: 1 question_set_ids: [1, 2, 3] }) { id name start_date end_date } }"
}

Actualizează o sesiune

Acest endpoint actualizează datele unei sesiuni existente specificate prin ID.

mutation {
    updateSession(id: 1, input: {
        name: "Sesiunea Actualizată"
        start_date: "2025-02-25 09:00:00"
        end_date: "2025-02-25 17:00:00"
        status: 1
    }) {
        id
        name
        start_date
        end_date
        status
    }
}

URL-ul complet pentru această mutație este:

https://testez.ihrm.ro/eAPI?query=mutation{updateSession(id:1,input:{name:%22Sesiunea%20Actualizată%22,start_date:%222025-02-25%2009:00:00%22,end_date:%222025-02-25%2017:00:00%22,status:1}){id name start_date end_date status}}

Pentru a folosi ReqBin, introduceți următorul JSON:

{
    "query": "mutation { updateSession(id: 1, input: { name: \"Sesiunea Actualizată\" start_date: \"2025-02-25 09:00:00\" end_date: \"2025-02-25 17:00:00\" status: 1 }) { id name start_date end_date status } }"
}

Changelog

Aici puteți găsi toate modificările și actualizările aduse API-ului iHRM.

  • v2.1 — REST API v1 (jobs, guest-apply, apply-token), design documentație corporate, ecosistem website/despre.
  • Versiunea 1.0.1 — Adăugate noi endpoint-uri pentru gestionarea sesiunilor.
  • Versiunea 1.0.0 — Lansarea inițială a API-ului iHRM GraphQL.