API reference¶
The eAppointment API replicates all the functionality of the programari.gov.md user interface, so an institution's own information system can find a service, check free slots and book, confirm and cancel appointments.
- Base path:
/api - Format: JSON
- Language: the optional
x-custom-langheader (roby default,enorru) sets the language of validation messages. It is accepted by every method.
Authentication¶
The API uses mutual TLS (mTLS): the calling system presents its client certificate when it connects, and is identified by it.
- The certificate must be registered as a service authorized to call the API. If the certificate is registered in MPass, the MPass administrator or the eAppointment administrator adds it as an authorized service.
- Different credentials are used for staging and production — a certificate registered for one environment does not give access to the other.
- A request from a client that cannot be identified is answered with
401 Unauthorized; a request from an identified client that is not allowed to perform the operation is answered with403 Forbidden.
To connect an institution, see the connection steps on the overview page.
Booking flow¶
GET /v2/organizations/list— find the organization.GET /v2/locations/list(orlist-by-idno) — find its location.GET /v2/calendars/list— find the service (calendar) offered at the location.GET /v2/calendars/config(orconfig-by-idno) — read the working intervals, booked slots and days off.POST /v2/appointments/request— request the appointment. It is created with statusWaiting, or directly asScheduledifisEvoistrue.PATCH /v2/appointments/{appointmentId}/confirm— confirm it (WaitingbecomesScheduled).DELETE /v2/appointments/{appointmentId}/cancel— cancel it, if needed.
Error Handling¶
| Code | Description |
|---|---|
| 200 | Success |
| 204 | No content — nothing found for the provided criteria |
| 400 | Invalid input parameters; see the response message for details (AppointmentProblemDetails) |
| 401 | Unauthorized — the client could not be identified |
| 403 | Forbidden — the client is not allowed to perform this operation |
| 500 | An unhandled error happened (AppointmentProblemDetails) |
Appointment status¶
Status is a number. 0 is used only as a filter value.
| Value | Status |
|---|---|
| 0 | None — all statuses (default filter) |
| 1 | Waiting |
| 2 | Scheduled |
| 3 | Canceled |
| 4 | Finished |
| 5 | Rejected |
| 6 | Blocked |
| 7 | Absent |
API Methods¶
Appointments¶
POST /v2/appointments/request
Summary
Create an appointment. The body is a list with one item for each citizen. Each item contains the citizen data and the services (calendar locations) with the start time to book. Appointments are created with status Waiting, or directly with status Scheduled when isEvo is true.
Authorization
Requires an identified client authorized for this operation.
Header:
x-custom-lang(string, optional) – language of validation messages:ro(default),enorru
Request body (AppointmentRequestV2Model[]):
[
{
"isForeignCitizen": false,
"idnp": "2000000000000",
"firstName": "Ion",
"lastName": "Popescu",
"notifyUser": true,
"isEvo": false,
"email": "ion.popescu@example.com",
"phone": "+37360000000",
"residenceAddress": "mun. Chișinău, str. Exemplu 1",
"services": [
{
"calendarLocationId": "00000000-0000-0000-0000-000000000000",
"start": "2026-01-15T09:30:00+02:00"
}
]
}
]
Responses:
200 OK–SuccesAppointmentRequestModel– appointment created successfully400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
DELETE /v2/appointments/{appointmentId}/cancel
Summary
Cancel an appointment by its id. The citizen is notified unless notifyUser is false.
Authorization
Requires an identified client authorized for this operation.
Path parameters:
appointmentId(uuid, required) – id of the appointment
Query parameters:
notifyUser(bool, optional, default:true) – whether the citizen is notified about the cancellation
Responses:
200 OK– appointment canceled successfully400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
PATCH /v2/appointments/{appointmentId}/confirm
Summary
Confirm an appointment by its id. The status changes from Waiting to Scheduled.
Authorization
Requires an identified client authorized for this operation.
Path parameters:
appointmentId(uuid, required) – id of the appointment
Responses:
200 OK– appointment confirmed successfully400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/appointments/list
Summary
Get a page of appointments that match the filters.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
LocationRelatedIDNO(string, optional) – IDNO of the organization that owns the locationUserIdentifier(string, optional) – IDNP or passport number of the citizen who booked the appointmentServiceCode(string, optional) – code of the serviceStart(date-time, optional) – only appointments starting at or after this dateEnd(date-time, optional) – only appointments ending at or before this dateStatus(int, optional, default:0) – filter by appointment status (see Appointment status)PageSize(int, required, default:10) – number of items per pagePageNumber(int, required, default:0) – page number, zero-based
Responses:
200 OK–AppointmentsListResponseModelPaginationResponse204 No Content– no appointments found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/appointments/user-list
Summary
Get the appointments of a citizen, found by IDNP, optionally filtered by status and organization.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
Idnp(string, required) – IDNP of the citizen (13 digits)PageSize(int, required, default:10) – number of items per pagePageNumber(int, required, default:0) – page number, zero-basedStatus(int, optional, default:0) – filter by appointment statusOrganization(string, optional) – filter by organization
Responses:
200 OK–AppointmentsListResponseModel[]204 No Content– no appointments found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/appointments/user-list-updated
Summary
Get the updated appointments of a citizen, found by IDNP.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
Idnp(string, required) – IDNP of the citizen (13 digits)PageSize(int, required, default:10) – number of items per pagePageNumber(int, required, default:0) – page number, zero-basedStatus(int, optional, default:0) – filter by appointment statusOrganization(string, optional) – ignored by this method
Responses:
200 OK–AppointmentModel[]204 No Content– no appointments found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/appointments/location-list
Summary
Get the appointments of a location, by location id. The result does not contain data about the citizen.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
LocationId(uuid, required) – id of the locationPageSize(int, required, default:10) – number of items per pagePageNumber(int, required, default:0) – page number, zero-basedStatus(int, optional, default:0) – filter by appointment statusOrganization(string, optional) – not used by this method
Responses:
200 OK–AppointmentPublicModel[]204 No Content– no appointments found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/appointments/calendar-location-list
Summary
Get the appointments of a calendar location (a service at a location). The result does not contain data about the citizen.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
CalendarLocationId(uuid, required) – id of the calendar location (service at a location)PageSize(int, required, default:10) – number of items per pagePageNumber(int, required, default:0) – page number, zero-basedStatus(int, optional, default:0) – filter by appointment statusOrganization(string, optional) – not used by this method
Responses:
200 OK–AppointmentPublicModel[]204 No Content– no appointments found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
Organizations¶
GET /v2/organizations/list
Summary
Get the organizations that offer public services with appointment options.
Authorization
Requires an identified client authorized for this operation.
Responses:
200 OK–OrganizationModel[]401 Unauthorized403 Forbidden500 Internal Server Error
Locations¶
GET /v2/locations/list
Summary
Get a page of locations that belong to an organization.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
OrganizationId(uuid, required) – id of the organizationPageSize(int, required) – number of items per page; no default, always send itPageNumber(int, required) – page number, zero-based; no default, always send it
Responses:
200 OK–LocationModelPaginationResponse204 No Content– no locations found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/locations/list-by-idno
Summary
Get a page of locations that belong to the organization with the given IDNO.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
Idno(string, required) – IDNO of the organizationPageSize(int, required) – number of items per page; no default, always send itPageNumber(int, required) – page number, zero-based; no default, always send it
Responses:
200 OK–LocationModelPaginationResponse204 No Content– no locations found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
Calendars¶
GET /v2/calendars/list
Summary
Get the services (calendars) offered at a location, for example Passport, Notary Services, Emergency Travel Document.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
locationId(uuid, required) – id of the location
Responses:
200 OK–CalendarInfo[]204 No Content– no services found for the location400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/calendars/config
Summary
Get the configuration of a service at a location, including working intervals, working days and days off.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
calendarLocationId(uuid, required) – id of the calendar location (service at a location)
Responses:
200 OK–CalendarLocationUiConfigModel204 No Content– no configuration found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
GET /v2/calendars/config-by-idno
Summary
Get the configuration of a service at a location, found by the IDNO of the location and the service code.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
LocationIdno(string, required) – IDNO of the locationServiceCode(string, required) – code of the service
Responses:
200 OK–CalendarLocationUiConfigModel204 No Content– no configuration found400 Bad Request– invalid input parameters401 Unauthorized403 Forbidden500 Internal Server Error
Settings¶
GET /v2/settings
Summary
Get the settings of a calendar of an organization: working days, holidays and the hours available to confirm an appointment.
Authorization
Requires an identified client authorized for this operation.
Query parameters:
OrganizationId(uuid, required) – id of the organizationCalendarId(uuid, required) – id of the calendar (service)
Responses:
200 OK–SettingModel204 No Content– no settings found401 Unauthorized403 Forbidden500 Internal Server Error
Data models¶
A trailing ? marks a nullable field and * a required one.
Common¶
ResourceDto — text in three languages.
| Field | Type | Description |
|---|---|---|
ro |
string? | Romanian |
ru |
string? | Russian |
en |
string? | English |
SlotInfo — time interval of an appointment.
| Field | Type | Description |
|---|---|---|
start |
date-time | Start of the interval, with UTC offset |
end |
date-time | End of the interval, with UTC offset |
AppointmentProblemDetails — error returned with 400 and 500.
| Field | Type | Description |
|---|---|---|
type |
string? | |
title |
string? | |
status |
int? | HTTP status code |
detail |
string? | |
instance |
string? | |
errors |
object? |
Pagination — AppointmentsListResponseModelPaginationResponse and LocationModelPaginationResponse have the same shape.
| Field | Type | Description |
|---|---|---|
items |
array | Items on the current page (AppointmentsListResponseModel[] or LocationModel[]) |
totalCount |
int | Total number of items matching the request, across all pages |
pageSize |
int | Number of items per page |
currentPage |
int | Current page number, zero-based |
totalPages |
int | Total number of pages |
Creating appointments¶
AppointmentRequestV2Model — request to create appointments for one citizen, for one or more services.
| Field | Type | Description |
|---|---|---|
isForeignCitizen* |
bool | true for a foreign citizen; then passportNumber is required instead of idnp |
idnp |
string | IDNP of the citizen; required when isForeignCitizen is false |
passportNumber |
string | Passport number; required when isForeignCitizen is true |
firstName* |
string | First name (2 to 60 characters) |
lastName* |
string | Last name (2 to 60 characters) |
notifyUser |
bool | Whether the citizen is notified by e-mail; default true. When true, email is required |
isEvo |
bool | If true, the appointment is created directly as Scheduled, without the confirmation step; default false |
email |
string | E-mail of the citizen; required when notifyUser is true |
phone* |
string | Phone number of the citizen |
residenceAddress |
string? | Residence address (optional) |
services* |
ServiceRequestV2[] |
Services (calendar locations) and the start time requested for each |
ServiceRequestV2 — a service requested at a specific date and time.
| Field | Type | Description |
|---|---|---|
calendarLocationId* |
uuid | Id of the calendar location (service at a location) to book |
start* |
date-time | Start of the appointment, with UTC offset, for example 2026-01-15T09:30:00+02:00 |
requestOptionId |
uuid? | Optional. Id of the selected request option, from RequestOptions of the service configuration (calendars/config) |
relatedOptionId |
uuid? | Optional. Id of the selected related option, from RelatedOptions of the service configuration |
SuccesAppointmentRequestModel — result of an appointment creation request.
| Field | Type | Description |
|---|---|---|
userAccessToken |
string? | Access token issued to the person. All of the person's appointments are linked to it, so they can be found and modified later or presented whenever needed |
appointmentRequestResultModels |
AppointmentRequestResultModel[] |
One entry for each requested service |
AppointmentRequestResultModel — a created appointment.
| Field | Type | Description |
|---|---|---|
id |
uuid | Id of the created appointment; use it to confirm or cancel |
userAccessToken |
string? | Access token issued to the person. All of the person's appointments are linked to it, so they can be found and modified later or presented whenever needed |
locationName |
ResourceDto |
Name of the location |
locationAddress |
string? | Address of the location |
email |
string? | E-mail to which the notification is sent |
calendarName |
ResourceDto |
Name of the service (calendar) |
slotStart |
date-time | Start of the appointment |
slotEnd |
date-time | End of the appointment |
hoursUntilConfirmationDeadline |
int | Hours left to confirm the appointment before it expires |
Reading appointments¶
AppointmentsListResponseModel — an appointment, as returned by appointments/list and appointments/user-list.
| Field | Type | Description |
|---|---|---|
id |
uuid | Unique id of the appointment |
code |
string? | Appointment code |
userIdentifier |
string? | IDNP or passport number of the citizen |
isForeignCitizen |
bool | true if the citizen is a foreign citizen |
firstName |
string? | First name of the citizen |
lastName |
string? | Last name of the citizen |
status |
int | Appointment status |
serviceCode |
string? | Code of the service |
organization |
string? | Name of the organization |
slot |
SlotInfo |
Time interval |
calendar |
ResourceDto |
Calendar (service) |
service |
ResourceDto |
Service |
calendarLocation |
ResourceDto |
Service at a location |
locationCoordinatesUrl |
string? | URL with the map coordinates of the location |
locationAddress |
string? | Address of the location |
requestOption |
ResourceDto |
Selected request option |
relatedOption |
ResourceDto |
Selected related option |
AppointmentPublicModel — public data of an appointment, without data about the citizen.
| Field | Type | Description |
|---|---|---|
id |
uuid? | Unique id of the appointment |
code |
string? | Appointment code |
status |
int | Appointment status |
slot |
SlotInfo |
Time interval |
calendar |
ResourceDto |
Calendar (service) |
service |
ResourceDto |
Service |
calendarLocation |
ResourceDto |
Service at a location |
requestOption |
ResourceDto |
Selected request option |
relatedOption |
ResourceDto |
Selected related option |
AppointmentModel — an appointment with the details of its service, location and attendees.
| Field | Type | Description |
|---|---|---|
id |
uuid | Unique id of the appointment |
code |
string? | Appointment code |
status |
int | Appointment status |
comment, reason, notes |
string? | |
calendarId |
uuid? | Id of the calendar (service) |
calendarName |
ResourceDto |
Name of the calendar |
serviceId |
uuid? | Id of the service |
serviceName, serviceDescription, serviceDocuments |
ResourceDto |
Name, description and required documents of the service |
calendarLocationId |
uuid? | Id of the calendar location (service at a location) |
calendarLocationName |
ResourceDto |
Name of the service at the location |
locationCoordinatesUrl |
string? | URL with the map coordinates of the location |
locationAddress |
string? | Address of the location |
slotId |
uuid? | Id of the slot |
requestOptionId |
uuid? | Id of the selected request option |
relatedOptionId |
uuid? | Id of the selected related option |
slot |
SlotInfo |
Time interval |
attendees |
AttendeeModel[] |
Citizens registered on the appointment |
residenceAddress |
string? | Residence address of the citizen |
AttendeeModel — a citizen registered on an appointment.
| Field | Type |
|---|---|
id, appointmentId, calendarId, userId |
uuid? |
status |
int |
hasAttended |
bool |
passportNumber, indp, firstName, lastName, email, phone, residenceAddress |
string? |
Organizations, locations and services¶
OrganizationModel — an organization that offers services through appointments.
| Field | Type | Description |
|---|---|---|
id |
uuid | Unique id of the organization |
idno |
string? | IDNO of the organization |
code |
string? | Code of the organization |
homeAlias |
string? | |
name, title, subTitle, description, about |
ResourceDto |
Texts in three languages |
filterByLocation, filterByService |
bool | |
webPage |
string? | Web page of the organization |
faqId |
string? | |
type |
string? | |
isActive |
bool | false if the organization is deactivated |
contact |
OrganizationContactModel |
Contact details: fullAddress, phones[], email, locationUrl |
LocationModel — a location where an organization receives citizens.
| Field | Type | Description |
|---|---|---|
id |
uuid? | Unique id of the location |
name, title, about* |
ResourceDto |
Texts in three languages |
webPage |
string? | Web page of the location |
phone, email |
string? | Contact |
relatedIDNO |
string? | |
capacity |
int | |
addressId |
uuid | |
organizationId* |
uuid | Id of the organization the location belongs to |
country, region, locality, locationAddress |
string | Address |
coordinatesUrl* |
string | URL with the map coordinates |
index |
string? | Postal index |
isActive |
bool | false if the location is deactivated |
imageInfo |
ImageInfo |
data (base64) and mimeType |
counters |
LocationCounterDetailsModel[] |
Counters: id, name (ResourceDto), isActive |
CalendarInfo — a service (calendar) available at a location.
| Field | Type | Description |
|---|---|---|
name |
ResourceDto |
Name of the service |
calendarLocationId |
uuid | Id of the calendar location; use it when requesting an appointment |
CalendarLocationUiConfigModel — configuration needed to book a service at a location.
| Field | Type | Description |
|---|---|---|
calendarId |
uuid? | Id of the calendar |
calendarLocationId |
uuid? | Id of the calendar location; use it when requesting an appointment |
calendarName |
ResourceDto |
Name of the service |
startDate, endDate |
date-time? | First and last date on which appointments can be booked |
activeDays, appointmentActiveDays, appointmentsLimit |
int? | |
slotDuration |
int | Duration of one slot, in minutes |
intervals |
WorkIntervalModel[] |
Working intervals: id, start, end, appointmentsPerSlotLimit, workDays[] |
bookedSlots |
BookedSlot[] |
Slots that already have bookings: start, end, bookedCount |
fullyBookedDays |
date[] | Days with no free slots left |
restrictions |
RestrictionsModel |
holidays[] and recoverableDaysOffs[] (dayOff, recovery) |
locationCapacity |
int? | |
locationId |
uuid | Id of the location |
organizationServiceDocuments |
OrganizationServiceDocumentModel[] |
Documents required per service: calendarName, documents (ResourceDto) |
SettingModel — calendar settings of an organization.
| Field | Type | Description |
|---|---|---|
organizationId |
uuid? | Id of the organization |
calendarId |
uuid? | Id of the calendar (service) |
workDays |
int[] | Working days |
holidays |
date-time[] | Holidays, when no appointments are available |
recoverableDaysOffs |
RecoverableDaysOff[] |
dayOff, recovery |
workHours |
ConfigWorkHour[] |
start, end |
hoursUntilConfirmationDeadline |
int | Hours a citizen has to confirm an appointment before it expires |