Skip to main content

X-Team-ID Header Guide

Vấn đề

Một user có thể thuộc nhiều Team với các role khác nhau. Khi gọi API, backend cần biết đang làm việc với Team nào để:

  • Validate quyền truy cập đúng role
  • Lọc dữ liệu đúng Team
  • Áp dụng cấu hình đúng Team

Giải pháp

Gửi X-Team-ID header trong mỗi request để chỉ định Team context. Header name không phân biệt hoa thường, nhưng trong tài liệu và code nên chuẩn hóa là X-Team-ID.

GET /api/v1/listings
Authorization: Bearer <jwt_token>
X-Team-ID: <team_id>

Endpoints yêu cầu X-Team-ID

Hầu hết các endpoint liên quan đến dữ liệu của Team đều yêu cầu header này:

NhómVí dụ endpoint
ListingsGET /api/v1/listings
BookingsGET /api/v1/bookings
FinancialGET /api/v1/financial/transactions
MembersGET /api/v1/teams/{team_id}/members
NotificationsGET /api/v1/notifications

Endpoints KHÔNG yêu cầu X-Team-ID

EndpointLý do
GET /api/v1/teamsLấy danh sách tất cả team của user
POST /api/v1/teamsTạo team mới
GET /api/v1/catalogsDữ liệu public
GET /api/v1/locations/*Dữ liệu public
GET /api/v1/searchTìm kiếm public

Lỗi thường gặp

HTTPMô tảCách xử lý
400 Bad RequestThiếu header X-Team-IDThêm header vào request
403 ForbiddenUser không thuộc Team nàyKiểm tra lại team_id
404 Not FoundTeam không tồn tạiKiểm tra lại team_id

Ví dụ — Axios Interceptor (Frontend)

// Tự động thêm X-Team-ID vào mọi request
axios.interceptors.request.use((config) => {
const teamId = getCurrentTeamId(); // lấy từ store/context
if (teamId) {
config.headers['X-Team-ID'] = teamId;
}
return config;
});

Ví dụ — cURL

curl https://api.cohost.vn/api/v1/bookings \
-H "Authorization: Bearer <token>" \
-H "X-Team-ID: <team_id>"

Ví dụ — Python

import httpx

headers = {
"Authorization": f"Bearer {token}",
"X-Team-ID": str(team_id),
}

response = httpx.get(
"https://api.cohost.vn/api/v1/bookings",
headers=headers,
)

Flow

User đăng nhập

Lấy danh sách teams: GET /api/v1/teams

User chọn Team (hoặc auto-select nếu chỉ có 1)

Lưu team_id vào state/context

Mọi request tiếp theo đều kèm X-Team-ID: <team_id>