Tài liệu API

Đơn ứng tuyển

Một application là liên kết giữa ứng viên và vị trí. Nó theo dõi vị trí của ứng viên trong pipeline của job cộng với toàn bộ lịch sử vòng.

Object Application

json
{
  "id": "1a2b3c4d-...-5e6f",
  "candidate_id": "c2a5e7b8-...-3f9a",
  "job_id": "8a3d2f1c-...-9b0e",
  "current_stage_id": "stage_phone_screen",
  "current_stage_name": "Phone screen",
  "status": "active",
  "applied_at": "2026-05-12T08:23:11.043Z",
  "created_at": "2026-05-12T08:23:11.043Z",
  "candidate": { "id": "...", "code": "CAN-2026-0001", "full_name": "Nguyen Minh Tu" },
  "job": { "id": "...", "code": "JOB-2026-0001", "title": "Senior Backend Engineer" }
}

Trường vòng đời

TrườngKiểuMô tả
statusstring`active` (đang trong pipeline), `hired`, `rejected`, `withdrawn`. Trạng thái cuối đóng băng lịch sử vòng.
current_stage_iduuidTrỏ tới một trong các vòng pipeline của job. Di chuyển application nghĩa là cập nhật trường này qua endpoint chuyển vòng chuyên dụng.
applied_attimestampKhi ứng viên ứng tuyển lần đầu. Set khi tạo; không bao giờ cập nhật.

Tạo đơn ứng tuyển

POST /api/v1/applications gắn ứng viên vào job. Đây là đường duy nhất chính tắc để thêm ứng viên vào job. Tick Up từ chối ứng viên trong blacklist với 422, và từ chối ứng viên bị đánh dấu trùng với 422 kèm ID của ứng viên gốc trong phản hồi.

shell
curl -X POST https://tickup-api.onrender.com/api/v1/applications \
  -H "Authorization: Bearer $TICKUP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "candidate_id": "c2a5e7b8-c8aa-4f50-9c3f-2f9a1d9e08aa",
    "job_id": "8a3d2f1c-...-9b0e"
  }'

Liệt kê đơn ứng tuyển

GET /api/v1/applications liệt kê đơn ứng tuyển trên mọi job trong tenant. Filter theo job_id, stage, hoặc một status_filter duy nhất.

Để liệt kê mọi application cho một ứng viên (thường 0–N dòng), dùng endpoint giới hạn theo ứng viên GET /api/v1/candidates/{candidate_id}/applications — list cross-tenant không chấp nhận filter candidate_id.

Chuyển đơn sang vòng khác

PATCH /api/v1/applications/{application_id}/stage di chuyển đơn sang vòng pipeline khác. Ghi một dòng vào stage_history và có thể kích hoạt email, đánh giá, hoặc workflow phỏng vấn tùy cấu hình của vòng đích. Truyền stage_id (và tùy chọn reason) trong body.

Đánh dấu đã tuyển hoặc từ chối

Chuyển trạng thái đi qua PATCH /api/v1/applications/{application_id}/status với body là { "status": "hired" }, "rejected", hoặc "withdrawn". Từ chối qua endpoint này kích hoạt template email từ chối đã cấu hình, nếu có. Để từ chối hàng loạt nhiều đơn, xem POST /api/v1/applications/bulk-reject trong tài liệu đầy đủ.

Đơn ứng tuyển công khai

Trang tuyển dụng công khai POST đến POST /api/v1/public/applications/submit/{tenant_code} — tenant nằm trong URL, không phải suy ra từ hostname. Endpoint nhận JSON hoặc multipart (khi đính kèm CV) và tạo ứng viên + application trong một giao dịch. Nếu email khớp với ứng viên có sẵn, ứng viên cũ được liên kết thay vì tạo mới.

  • Ứng viên — thực thể ở phía ứng viên của liên kết.
  • Vòng pipeline — các vòng mà đơn ứng tuyển đi qua.
  • Phỏng vấn — các cuộc gặp đã lên lịch gắn với một đơn ứng tuyển.
  • Tài liệu đầy đủ — schema request/response chính xác và các endpoint không có ở đây (bulk-reject, truy vấn stage-history, audit timeline).