Skip to content

API Reference

REST API v1 đầy đủ cho tích hợp ngoài. Spec OpenAPI 3.1, xác thực Bearer token (Personal Access Token).

Quyền truy cập: Owner / Admin / user có quyền API_TOKEN_CREATEĐiều hướng:

  • Cấu hình & tạo token: Cài đặt > Quản lý dịch vụ > Kết nối API
  • Tài liệu Swagger UI live: https://<customer-domain>/manage/api/v1/docs
  • OpenAPI Spec JSON: https://<customer-domain>/manage/api/v1/openapi.json

Truy cập tài liệu API

Mỗi khách hàng có URL Swagger riêng theo domain của tenant. Thay <customer-domain> bằng domain thực tế của tổ chức:

https://acme.noova.io/manage/api/v1/docs        ← khách hàng "acme"
https://hr.example.com/manage/api/v1/docs       ← khách hàng custom domain
https://demo.noova.io/manage/api/v1/docs        ← demo

Trang hướng dẫn API hỗ trợ:

  • Xem chi tiết từng endpoint (method, path, params, request body, response codes)
  • Thử request trực tiếp (Try it out) với PAT đã nhập
  • Generate cURL / fetch / axios snippet
  • Download spec OpenAPI JSON
  • Filter theo tag (Nhân sự / Khoá học / Lương / ...)

Lưu ý: Trang /manage/api/v1/docs chỉ khả dụng khi đã bật Mở kết nối API (eweb.allowOpenAPI === true) trong Cài đặt > Quản lý dịch vụ > Kết nối API. Nếu chưa bật, browser sẽ trả về 404 / 503.


Xác thực

Personal Access Token (PAT)

Mọi request cần header:

http
Authorization: Bearer <YOUR_PAT>

Cách lấy PAT:

  1. Vào Cài đặt > Quản lý dịch vụ > Kết nối API
  2. Bật Mở kết nối API (nếu chưa bật)
  3. Nhấp Tạo API Token
  4. Copy token và lưu nơi an toàn - chỉ hiển thị 1 lần

PAT có scope = scope của user sở hữu (cùng vai trò, cùng phạm vi qua Permission Scope Engine).

Thu hồi PAT

Vào lại trang Kết nối API, nhấp Reset token mới để vô hiệu hoá token cũ và sinh token mới.


Cấu trúc API

API tổ chức theo 56 tag (module). Mỗi tag là một nhóm endpoint thao tác trên một tài nguyên.

Nhóm Xác thực & danh tính

TagMô tả
AuthenticationPersonal Access Token: tạo, liệt kê, thu hồi
UsersQuản lý tài khoản Meteor + thao tác admin (khoá, mở khoá, xác minh, đổi vai trò)
User GroupsNhóm tài khoản
RolesVai trò + cấp quyền
PoliciesChính sách quyền có scope + gán cho user
Login TokensAdmin tạo token đăng nhập cho user khác (impersonation deep link)

Nhóm Tổ chức

TagMô tả
EmployeesDanh bạ + xuất CSV + dòng thời gian + thao tác hàng loạt
Employee GroupsNhóm hồ sơ nhân sự HR
PositionsChức danh + bậc lương + yêu cầu năng lực/kỹ năng
Position GroupsNhóm chức danh (job family)
Org UnitsCây tổ chức, ma trận, thành viên

Nhóm Đào tạo (LMS)

TagMô tả
CoursesKhoá học
LessonsBài học
EnrollmentsGhi danh khoá học
QuizzesBài kiểm tra
SurveysKhảo sát
CertificatesChứng chỉ

Nhóm Chương trình đào tạo

TagMô tả
Training ProgramsDanh mục chương trình đào tạo
Training PlansKế hoạch đào tạo năm
Training NeedsPhân tích nhu cầu (TNA)
Training EnrollmentsGhi danh chương trình + nhóm học viên
Training CalendarLịch đào tạo + check khả dụng giảng viên
Training AssessmentsĐánh giá trước/sau đào tạo
Training EffectivenessKirkpatrick L1-L4 reports
InstructorsGiảng viên / facilitator

Nhóm Hiệu suất & nhân tài

TagMô tả
GoalsOKR / KPI / SMART
ReviewsChu kỳ đánh giá hiệu suất
FeedbackPhản hồi 360° / liên tục
AssessmentsĐánh giá năng lực (competency assessment)
CompetenciesKhung năng lực
Skill EvidenceBằng chứng kỹ năng
Succession PlanningQuy hoạch nhân sự kế thừa
Career PathingLộ trình nghề nghiệp
IDPKế hoạch phát triển cá nhân

Nhóm Tuyển dụng

TagMô tả
CandidatesỨng viên
Job PostingsTin tuyển dụng
InterviewsPhỏng vấn + nhận xét
ApplicationsĐơn ứng tuyển + chuyển trạng thái

Nhóm Vòng đời nhân sự

TagMô tả
OnboardingQuy trình nhận việc
OffboardingQuy trình thôi việc

Nhóm Chấm công

TagMô tả
Time & AttendanceClock-in / clock-out
ShiftsĐịnh nghĩa ca làm việc
Shift AssignmentsPhân ca
HolidaysLịch ngày lễ
Overtime RequestsQuy trình tăng ca
Attendance PoliciesChính sách chấm công
Attendance AnalyticsBáo cáo & phân tích

Nhóm Lương thưởng

TagMô tả
Compensation & PayrollLương + thưởng + phụ cấp + bảng lương

Nhóm Cuộc họp

TagMô tả
MeetingsQuản lý cuộc họp
Meeting TemplatesMẫu cuộc họp tái sử dụng
Meeting SeriesCuộc họp định kỳ
Meeting MinutesBiên bản + action items
Meeting AnalyticsBáo cáo hiệu quả

Nhóm Gắn kết & cộng đồng

TagMô tả
EmulationThi đua, ghi nhận, trao thưởng
EngagementKhảo sát gắn kết (engagement pulse)
CommunityBài đăng, bình luận, sự kiện cộng đồng
AnnouncementsThông báo nội bộ

Nhóm Tích hợp ngoài

TagMô tả
LDAPTrigger sync + check status

Pattern chung

Pagination

Endpoint danh sách trả về { data: [...], total, page, perPage }. Query params:

ParamMặc địnhMô tả
page1Số trang (1-indexed)
perPage50Số bản ghi mỗi trang (max 200)
sort-createdAtSort field, prefix - = descending

Filter

Endpoint danh sách hỗ trợ filter qua query string:

GET /api/v1/employees?orgUnitId=ABC&status=active&search=nguyen

Response codes

CodeÝ nghĩa
200OK
201Created
204No Content (delete thành công)
400Bad Request (validation lỗi)
401Unauthorized (PAT sai/hết hạn)
403Forbidden (không đủ quyền)
404Not Found
409Conflict (vd: trùng email)
422Unprocessable Entity (business rule violation)
429Too Many Requests (rate limit)
503Service Unavailable (API bị disable)

Error response shape

json
{
  "statusCode": 422,
  "error": "Unprocessable Entity",
  "message": "Employee email already exists",
  "code": "EMPLOYEE_EMAIL_DUPLICATE",
  "details": {
    "field": "email",
    "value": "duplicate@example.com"
  }
}

Timezone & dates

Mọi Date field trả về UTC ISO 8601 (vd: 2026-05-23T08:58:58.000Z). Khi gửi date input:

  • Date-only: "2026-05-23" (parse theo timezone tenant)
  • Date-time: "2026-05-23T08:58:58.000Z" (UTC instant)

Tenant timezone đọc qua GET /api/v1/users/me → field eweb.timezone.


Phụ thuộc Feature Toggle

Nhiều endpoint phụ thuộc vào việc tính năng tương ứng được bật trong Cài đặt > Quản lý dịch vụ > Tính năng. Ví dụ:

EndpointPhụ thuộc tính năng
/api/v1/candidates/*allowRecruitment
/api/v1/time-attendance/*allowTimeAttendance
/api/v1/compensation-payroll/*allowCompensation + allowPayroll
/api/v1/succession-planning/*allowSuccession
/api/v1/community/*allowCommunity

Tính năng tắt → endpoint trả về 404 + bị ẩn khỏi /openapi.json filter.


Rate limit

Mặc định 120 request/phút/PAT. Vượt → 429. Header response:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1716800000

Phiên bản hoá

API v1 cam kết không thay đổi breaking trong cùng major version. Endpoint mới được thêm vào v1, endpoint cũ giữ nguyên contract. Breaking changes sẽ release dưới /api/v2/.


Ví dụ

Lấy danh sách nhân sự

bash
curl -X GET "https://acme.noova.io/manage/api/v1/employees?page=1&perPage=20" \
  -H "Authorization: Bearer noova_pat_xxx" \
  -H "Accept: application/json"

Tạo nhân sự mới

bash
curl -X POST "https://acme.noova.io/manage/api/v1/employees" \
  -H "Authorization: Bearer noova_pat_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "fullName": "Nguyễn Văn A",
    "email": "nguyenvana@acme.io",
    "orgUnitId": "ABC123",
    "positionId": "POS456"
  }'

Trigger LDAP sync

bash
curl -X POST "https://acme.noova.io/manage/api/v1/ldap/sync" \
  -H "Authorization: Bearer noova_pat_xxx"

Lưu ý

  • PAT khác với SSO token: PAT dùng cho integration ngoài; SSO token chỉ tồn tại trong session người dùng đăng nhập qua trình duyệt.
  • PAT không hết hạn theo session: thu hồi thủ công khi không dùng nữa, hoặc khi nghi ngờ bị lộ.
  • Không hardcode PAT trong source code public - dùng env var hoặc secret manager.
  • Test trực tiếp trên Swagger UI: không cần Postman cho POC - vào /manage/api/v1/docs, paste PAT vào nút Authorize, click "Try it out".
  • Spec OpenAPI có thể được import vào: Postman, Insomnia, Bruno, Hoppscotch, hoặc dùng để generate SDK qua openapi-generator.

Xem thêm

Hướng dẫn sử dụng nền tảng HR/LMS Noova. Vận hành bởi VN-ELEARNING.