Exemple¶
Exemplele urmează fluxul de programare. Fiecare apel se face prin TLS mutual, deci certificatul de client și cheia sa privată sunt prezentate la fiecare cerere (--cert, --key).
- Înlocuiți
<host>cu adresa mediului pe care o primiți la conectarea instituției. - Id-urile sunt afișate ca UUID-uri de substituție — folosiți-le pe cele reale, returnate de apelul anterior.
- Răspunsurile sunt prescurtate, iar valorile au caracter ilustrativ.
1. Găsirea organizației¶
curl --cert client.crt --key client.key \
-X GET "https://<host>/api/v2/organizations/list" \
-H "accept: application/json" \
-H "x-custom-lang: ro"
Exemplu de răspuns:
[
{
"id": "00000000-0000-0000-0000-000000000001",
"idno": "1234567890123",
"name": { "ro": "Denumire", "ru": "Название", "en": "Organization name" },
"isActive": true
}
]
2. Găsirea locației¶
curl --cert client.crt --key client.key \
-X GET "https://<host>/api/v2/locations/list?OrganizationId=00000000-0000-0000-0000-000000000001&PageSize=10&PageNumber=0" \
-H "accept: application/json"
Exemplu de răspuns:
{
"items": [
{
"id": "00000000-0000-0000-0000-000000000002",
"name": { "ro": "Sediul central", "ru": "Центральный офис", "en": "Head office" },
"organizationId": "00000000-0000-0000-0000-000000000001",
"locality": "Chișinău",
"locationAddress": "str. Exemplu 1",
"isActive": true
}
],
"totalCount": 1,
"pageSize": 10,
"currentPage": 0,
"totalPages": 1
}
3. Găsirea serviciului¶
curl --cert client.crt --key client.key \
-X GET "https://<host>/api/v2/calendars/list?locationId=00000000-0000-0000-0000-000000000002" \
-H "accept: application/json"
Exemplu de răspuns:
[
{
"name": { "ro": "Pașapoarte", "ru": "Паспорта", "en": "Passports" },
"calendarLocationId": "00000000-0000-0000-0000-000000000003"
}
]
Folosiți calendarLocationId la solicitarea programării.
4. Citirea configurației serviciului¶
curl --cert client.crt --key client.key \
-X GET "https://<host>/api/v2/calendars/config?calendarLocationId=00000000-0000-0000-0000-000000000003" \
-H "accept: application/json"
Exemplu de răspuns (prescurtat — intervals și restrictions omise):
{
"calendarLocationId": "00000000-0000-0000-0000-000000000003",
"startDate": "2026-01-12T00:00:00+02:00",
"endDate": "2026-03-12T00:00:00+02:00",
"slotDuration": 30,
"bookedSlots": [
{
"start": "2026-01-15T09:00:00+02:00",
"end": "2026-01-15T09:30:00+02:00",
"bookedCount": 1
}
],
"fullyBookedDays": ["2026-01-16"]
}
bookedSlots și fullyBookedDays arată ce este deja ocupat; slotDuration este în minute.
5. Solicitarea programării¶
curl --cert client.crt --key client.key \
-X POST "https://<host>/api/v2/appointments/request" \
-H "Content-Type: application/json" \
-H "accept: application/json" \
-d '[
{
"isForeignCitizen": false,
"idnp": "2000000000000",
"firstName": "Ion",
"lastName": "Popescu",
"notifyUser": true,
"isEvo": false,
"email": "ion.popescu@example.com",
"phone": "+37360000000",
"services": [
{
"calendarLocationId": "00000000-0000-0000-0000-000000000003",
"start": "2026-01-15T09:30:00+02:00"
}
]
}
]'
Exemplu de răspuns:
{
"userAccessToken": "<token>",
"appointmentRequestResultModels": [
{
"id": "00000000-0000-0000-0000-000000000004",
"locationName": { "ro": "Sediul central", "ru": "Центральный офис", "en": "Head office" },
"locationAddress": "str. Exemplu 1",
"email": "ion.popescu@example.com",
"calendarName": { "ro": "Pașapoarte", "ru": "Паспорта", "en": "Passports" },
"slotStart": "2026-01-15T09:30:00+02:00",
"slotEnd": "2026-01-15T10:00:00+02:00",
"hoursUntilConfirmationDeadline": 24
}
]
}
Programarea este creată cu statusul Waiting. Păstrați id-ul pentru a o confirma sau anula, precum și userAccessToken — tokenul persoanei, de care sunt asociate toate programările acesteia.
Cetățean străin. Setați isForeignCitizen la true și trimiteți passportNumber în loc de idnp:
{
"isForeignCitizen": true,
"passportNumber": "AB1234567",
"firstName": "John",
"lastName": "Smith",
"notifyUser": false,
"phone": "+37360000000",
"services": [
{
"calendarLocationId": "00000000-0000-0000-0000-000000000003",
"start": "2026-01-15T09:30:00+02:00"
}
]
}
Fără pasul de confirmare. Cu "isEvo": true, programarea este creată direct cu statusul Scheduled.
6. Confirmarea programării¶
curl --cert client.crt --key client.key \
-X PATCH "https://<host>/api/v2/appointments/00000000-0000-0000-0000-000000000004/confirm"
200 OK — statusul se schimbă din Waiting în Scheduled.
7. Anularea programării¶
curl --cert client.crt --key client.key \
-X DELETE "https://<host>/api/v2/appointments/00000000-0000-0000-0000-000000000004/cancel?notifyUser=false"
200 OK — programarea este anulată. Implicit, cetățeanul este notificat; notifyUser=false dezactivează notificarea.
8. Lista programărilor unui cetățean¶
curl --cert client.crt --key client.key \
-X GET "https://<host>/api/v2/appointments/user-list?Idnp=2000000000000&PageSize=10&PageNumber=0" \
-H "accept: application/json"
Exemplu de răspuns (prescurtat):
[
{
"id": "00000000-0000-0000-0000-000000000004",
"userIdentifier": "2000000000000",
"firstName": "Ion",
"lastName": "Popescu",
"status": 2,
"organization": "Denumirea organizației",
"slot": {
"start": "2026-01-15T09:30:00+02:00",
"end": "2026-01-15T10:00:00+02:00"
}
}
]
status este un număr — 2 înseamnă Scheduled (vezi Statusul programării). 204 No Content înseamnă că cetățeanul nu are programări pentru criteriile date.
Bune practici¶
- Trimiteți
PageSizeșiPageNumberla fiecare apel de listare. Numerotarea paginilor începe de la0, iar endpoint-urile pentru locații nu au valori implicite. - Tratați
204 No Contentca „nu a fost găsit nimic”, nu ca pe o eroare. - Citiți configurația serviciului (
calendars/config) înainte de programare și trimitețistartcu decalajul UTC. - Confirmați o programare
Waitingîn intervalulhoursUntilConfirmationDeadline, altfel aceasta expiră. - Trimiteți
x-custom-langpentru a primi mesajele de validare în limba utilizatorului. - Păstrați în cache listele de organizații, locații și servicii, în loc să le cereți la fiecare programare.