Cách lấy TMDB API Key và truy vấn API The Movie Database

Lấy khóa API TMDB miễn phí, tìm hiểu sự khác biệt giữa khóa v3 và token truy cập đọc v4, thực hiện các cuộc gọi tìm kiếm và chi tiết phim đầu tiên của bạn bằng curl, Python và Apidog.

Ashley Innocent

Ashley Innocent

18 tháng 9 2026

Cách lấy TMDB API Key và truy vấn API The Movie Database

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

The Movie Database (TMDB) là một danh mục phim, chương trình TV, dàn diễn viên và tác phẩm nghệ thuật do cộng đồng xây dựng. API của nó miễn phí cho mục đích phi thương mại miễn là bạn ghi công TMDB, điều này khiến nó trở thành điểm khởi đầu thông thường trong bất kỳ danh sách API phim miễn phí nào. Vấn đề nằm ở khâu giới thiệu: TMDB cung cấp cho bạn hai loại thông tin xác thực khác nhau và hướng dẫn bắt đầu chính thức giả định bạn đã biết nên sử dụng loại nào.

Hướng dẫn này bao gồm toàn bộ lộ trình: tài khoản, yêu cầu khóa, khóa v3 so với mã thông báo truy cập đọc v4, các lệnh gọi tìm kiếm và chi tiết đầu tiên trong curl và Python, các lệnh gọi tương tự được lưu dưới dạng thử nghiệm trong Apidog, cùng với giới hạn tốc độ, quy tắc ghi công và các lỗi bạn sẽ gặp ngay từ ngày đầu tiên.

nút

Những gì bạn cần trước khi bắt đầu

Bước 1: tạo tài khoản TMDB

Truy cập themoviedb.org, nhấp vào “Join TMDB” (Tham gia TMDB), và đăng ký bằng địa chỉ email. Mở email xác minh và xác nhận trước khi bạn điều chỉnh cài đặt API. Bỏ qua bước này và sau đó bạn sẽ gặp lỗi 401 khó hiểu, mã trạng thái 32: “Email not verified: Your email address has not been verified.” (Email chưa được xác minh: Địa chỉ email của bạn chưa được xác minh).

Bước 2: yêu cầu khóa API

Sau khi đăng nhập, hãy mở cài đặt tài khoản của bạn và nhấp vào “API” trong thanh bên trái. FAQ của TMDB mô tả đây là cách duy nhất: “Bạn có thể đăng ký khóa API bằng cách nhấp vào liên kết ‘API’ từ thanh bên trái trong trang cài đặt tài khoản của bạn.”

Bạn sẽ chấp nhận các điều khoản sử dụng API, sau đó điền vào một đơn đăng ký ngắn: bạn đang xây dựng gì, một URL nếu có, tóm tắt cách bạn sẽ sử dụng dữ liệu và loại hình sử dụng. Chọn tùy chọn nhà phát triển cho các dự án cá nhân, bản thử nghiệm (prototype) và công cụ nội bộ. TMDB coi một dự án là thương mại “nếu mục đích chính là tạo ra doanh thu vì lợi ích của chủ sở hữu,” và con đường đó yêu cầu một thỏa thuận bằng văn bản với đội ngũ bán hàng của họ.

Sau khi bạn gửi, trang cài đặt tương tự sẽ hiển thị hai thông tin xác thực:

TMDB không công bố lịch trình xem xét; trên thực tế, cả hai giá trị sẽ xuất hiện ngay sau khi biểu mẫu được gửi. Hãy coi chúng như bất kỳ bí mật nào khác và không để chúng xuất hiện trong các cam kết mã (commits), cửa sổ trò chuyện và ảnh chụp màn hình.

Khóa API v3 so với Mã thông báo truy cập đọc v4

Hai thông tin xác thực này không phải là “cũ” và “mới.” Chúng là hai cách để xác định cùng một ứng dụng, và tài liệu xác thực chính thức nêu rõ rằng cả hai đều “cung cấp cùng cấp độ truy cập.”

Khóa API (v3) Mã thông báo truy cập đọc API
Cách bạn gửi Tham số truy vấn: ?api_key=YOUR_KEY Header: Authorization: Bearer YOUR_TOKEN
Hoạt động với Các endpoint v3 trong /3/ Các endpoint v3 và v4
Mặc định của TMDB Không
Hiển thị trong nhật ký máy chủ và lịch sử trình duyệt Có, nó nằm trong URL Không

Khuyến nghị của chính TMDB là mã thông báo Bearer: “Phương thức mặc định để xác thực là bằng mã thông báo truy cập của bạn,” và nó “có lợi ích bổ sung là một quy trình xác thực duy nhất mà bạn có thể sử dụng trên cả phương thức v3 và v4.”

Sử dụng header Bearer trừ khi ứng dụng khách của bạn không thể đặt header. Việc giữ thông tin xác thực ra khỏi URL là lập luận tương tự đằng sau bất kỳ quyết định nào về khóa API so với mã thông báo Bearer: URL bị ghi nhật ký, lưu vào bộ nhớ cache và chia sẻ.

Một điểm khác biệt nữa. Mọi thứ trong bài viết này là dữ liệu danh mục chỉ đọc, chỉ cần thông tin xác thực ứng dụng. API v4 bổ sung các tính năng tài khoản như danh sách, mục yêu thích, xếp hạng và danh sách xem. Ghi vào các tính năng đó cho người dùng TMDB cần một quá trình giao tiếp bổ sung: một mã thông báo yêu cầu từ /4/auth/request_token, sự chấp thuận của người dùng, sau đó là mã thông báo truy cập người dùng từ /4/auth/access_token. Không có điều nào trong số đó là cần thiết để tìm kiếm phim hoặc đọc chi tiết.

Bước 3: thực hiện yêu cầu đầu tiên của bạn

Tất cả các lệnh gọi v3 đều đến https://api.themoviedb.org/3. Hai endpoint bao gồm hầu hết các dự án đầu tiên: tìm kiếm theo tiêu đề, sau đó lấy chi tiết theo ID.

Tìm kiếm phim bằng curl

curl --request GET \
  --url 'https://api.themoviedb.org/3/search/movie?query=fight%20club&include_adult=false&language=en-US&page=1' \
  --header 'Authorization: Bearer YOUR_READ_ACCESS_TOKEN' \
  --header 'accept: application/json'

Phản hồi là một đối tượng trang với page, results, total_pagestotal_results. Mỗi kết quả chứa id, title, release_date, overview, poster_path, genre_idsvote_average. Trong ví dụ tìm kiếm của TMDB, kết quả đầu tiên cho "fight club" là id 550, phát hành ngày 15-10-1999.

Lệnh gọi tương tự với khóa v3 trông như thế này. Lưu ý hoàn toàn không có header xác thực:

curl 'https://api.themoviedb.org/3/search/movie?query=fight%20club&api_key=YOUR_API_KEY'

Lấy chi tiết phim bằng Python

Bây giờ hãy lấy ID từ kết quả tìm kiếm và yêu cầu bản ghi đầy đủ. Endpoint chi tiết phim trả về runtime, genres, budget, revenueoverview. Tham số append_to_response của nó bổ sung các tài nguyên phụ như danh đề (credits) vào cùng một vòng truy vấn, tối đa 20 tài nguyên mỗi yêu cầu.

import os
import requests

TOKEN = os.environ["TMDB_READ_ACCESS_TOKEN"]
BASE = "https://api.themoviedb.org/3"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "accept": "application/json"}


def search_movie(title):
    r = requests.get(
        f"{BASE}/search/movie",
        params={"query": title, "include_adult": "false", "language": "en-US"},
        headers=HEADERS,
        timeout=10,
    )
    r.raise_for_status()
    return r.json()["results"]


def movie_details(movie_id):
    r = requests.get(
        f"{BASE}/movie/{movie_id}",
        params={"append_to_response": "credits"},
        headers=HEADERS,
        timeout=10,
    )
    r.raise_for_status()
    return r.json()


hit = search_movie("Fight Club")[0]
movie = movie_details(hit["id"])
print(movie["title"], movie["release_date"], f'{movie["runtime"]} min')
print("https://image.tmdb.org/t/p/w500" + movie["poster_path"])

Dòng cuối cùng là phần mà mọi người thường bỏ sót. poster_path chỉ là một đường dẫn. Như hướng dẫn cơ bản về hình ảnh giải thích, một URL hợp lệ là https://image.tmdb.org/t/p/, sau đó là kích thước như w500 hoặc original, rồi đến đường dẫn. /3/configuration liệt kê mọi kích thước hợp lệ.

Bước 4: chạy và lưu các yêu cầu trong Apidog

Khi các lệnh gọi cơ bản hoạt động, hãy chuyển chúng đến nơi bạn sẽ không làm mất chúng. Trong Apidog, việc này chỉ mất vài phút và bạn sẽ có một bài kiểm tra đã lưu, có thể chia sẻ được.

  1. Tạo một dự án và thêm một môi trường có tên “TMDB” với hai biến: base_url được đặt thành https://api.themoviedb.org/3, và tmdb_token chứa mã thông báo truy cập đọc của bạn. Đánh dấu mã thông báo là bí mật để nó bị che trong giao diện người dùng và không được xuất ra; hướng dẫn về biến môi trường và biến bí mật bao gồm các tùy chọn.
  2. Thêm một yêu cầu GET đến {{base_url}}/search/movie với tham số query. Trên tab Auth, chọn Bearer Token và nhập {{tmdb_token}}. Gửi nó và xác nhận bạn nhận được mã 200 và một mảng results.
  3. Thêm một yêu cầu GET thứ hai đến {{base_url}}/movie/{{movie_id}}. Trong bộ xử lý hậu kỳ của yêu cầu đầu tiên, trích xuất results[0].id vào movie_id để lệnh gọi thứ hai luôn theo sau lệnh gọi đầu tiên.
  4. Lưu cả hai dưới dạng một kịch bản thử nghiệm với các xác nhận: trạng thái bằng 200, total_results lớn hơn 0, và title trong phản hồi chi tiết không rỗng. Chạy nó bất cứ khi nào tích hợp thay đổi.

Đang xây dựng giao diện người dùng dựa trên dữ liệu này? Bật máy chủ mô phỏng cho endpoint tìm kiếm. Apidog tạo ra một phản hồi khớp với lược đồ, vì vậy nhóm UI có thể xây dựng lưới poster mà không cần mã thông báo trực tiếp hoặc các yêu cầu thực tế chống lại giới hạn của TMDB.

Giới hạn tốc độ và quy tắc ghi công

Mọi thứ dưới đây được trích dẫn từ tài liệu của TMDB.

Giới hạn tốc độ. Trang giới hạn tốc độ của TMDB cho biết giới hạn ban đầu là 40 yêu cầu mỗi 10 giây đã bị vô hiệu hóa vào ngày 16 tháng 12 năm 2019. Các giới hạn trên vẫn còn “để giúp giảm thiểu việc thu thập dữ liệu hàng loạt không cần thiết,” và chúng “nằm trong khoảng 40 yêu cầu mỗi giây.” Con số đó có thể thay đổi mà không cần thông báo trước, vì vậy hãy tuân thủ bất kỳ lỗi HTTP 429 nào, chờ đợi và thử lại.

Chi phí. Từ FAQ: “API của chúng tôi miễn phí sử dụng cho các mục đích phi thương mại miễn là bạn ghi công TMDB là nguồn dữ liệu và/hoặc hình ảnh.” Các dự án thương mại phải liên hệ sales@themoviedb.org.

Ghi công. Hiển thị logo TMDB và thông báo này trong ứng dụng của bạn: “Sản phẩm này sử dụng API của TMDB nhưng không được TMDB xác nhận hoặc chứng nhận.” Các điều khoản sử dụng API sử dụng ngôn ngữ hơi dài hơn và yêu cầu logo phải ít nổi bật hơn thương hiệu của riêng bạn, và không bao giờ được đổi màu, kéo giãn, lật hoặc xoay.

Bộ nhớ đệm (Caching). Các điều khoản cấm lưu trữ bất kỳ dữ liệu TMDB nào trong bộ nhớ đệm quá sáu tháng. Lưu trữ những gì bạn cần, nhưng hãy lên kế hoạch làm mới.

Không có SLA. TMDB tuyên bố rõ ràng như vậy. Xây dựng các cơ chế hết thời gian chờ và thử lại.

Bảo mật khóa. Cả hai thông tin xác thực đều thuộc về các biến môi trường hoặc trình quản lý bí mật, không bao giờ nằm trong mã nguồn. Nếu một khóa nào đó xuất hiện trong kho lưu trữ (repo), hãy xoay vòng khóa đó từ trang cài đặt và chạy kiểm tra rò rỉ khóa API trên toàn bộ lịch sử của bạn.

Các lỗi thường gặp và ý nghĩa của chúng

TMDB trả về một body JSON với status_codestatus_message cùng với trạng thái HTTP. Tài liệu tham khảo lỗi liệt kê hàng chục mã lỗi; đây là những lỗi bạn sẽ thấy đầu tiên.

HTTP status_code Thông báo Nguyên nhân và cách khắc phục thông thường
401 7 Invalid API key: You must be granted a valid key. (Khóa API không hợp lệ: Bạn phải được cấp một khóa hợp lệ.) Thông tin xác thực sai hoặc đặt sai vị trí. Khóa v3 nằm trong api_key, mã thông báo truy cập đọc nằm trong header Bearer, không bao giờ ngược lại. Kiểm tra xem có dấu cách thừa ở cuối không.
401 3 Authentication failed: You do not have permissions to access the service. (Xác thực thất bại: Bạn không có quyền truy cập dịch vụ.) Thông tin xác thực bị lỗi định dạng hoặc thiếu header. Xác nhận rằng nó có dạng Authorization: Bearer <token> với một dấu cách duy nhất.
401 32 Email not verified: Your email address has not been verified. (Email chưa được xác minh: Địa chỉ email của bạn chưa được xác minh.) Xác minh email TMDB của bạn, sau đó thử lại. Không cần khóa mới.
404 34 The resource you requested could not be found. (Không tìm thấy tài nguyên bạn yêu cầu.) ID sai hoặc lỗi chính tả trong đường dẫn. Nó phải là /3/movie/550, không phải /3/movies/550.
429 25 Your request count (#) is over the allowed limit of (40). (Số lượng yêu cầu của bạn (#) vượt quá giới hạn cho phép (40).) Đã vượt quá giới hạn đột biến (burst ceiling). Chờ và thử lại với chế độ lùi lại (backoff); tra cứu hàng loạt bằng append_to_response.

Câu hỏi thường gặp

Khóa API của TMDB có miễn phí không?

Có, cho mục đích phi thương mại với việc ghi công. Không có gói dịch vụ trả phí tự động. Nếu dự án của bạn tạo ra doanh thu, TMDB yêu cầu bạn sắp xếp một thỏa thuận thương mại thông qua đội ngũ bán hàng của họ.

Tôi nên sử dụng khóa API hay mã thông báo truy cập đọc?

Hãy sử dụng mã thông báo truy cập đọc dưới dạng header Bearer. TMDB gọi đây là mặc định, nó hoạt động trên cả v3 và v4, và nó không xuất hiện trong URL của bạn. Khóa v3 tồn tại cho các công cụ chỉ có thể gửi tham số truy vấn. Nếu khái niệm này còn mới, bài giới thiệu về khóa API là gì sẽ giải thích mô hình mà TMDB tuân theo.

Tôi có thể gọi trực tiếp TMDB từ trình duyệt hoặc ứng dụng di động không?

Bạn có thể, nhưng bất cứ thứ gì được gửi đến ứng dụng khách đều là công khai, bao gồm cả mã thông báo của bạn. Đối với một dự án cá nhân, đó là một rủi ro được chấp nhận. Đối với bất kỳ thứ gì có người dùng, hãy đặt một phần mềm backend nhỏ hoặc hàm serverless ở phía trước TMDB, giữ mã thông báo ở đó và lưu trữ các truy vấn phổ biến vào bộ nhớ đệm.

Sự khác biệt giữa v3 và v4 là gì?

v3 là danh mục: tìm kiếm, chi tiết phim và chương trình TV, người, hình ảnh, khám phá. v4 bao gồm các tính năng tài khoản như danh sách, mục yêu thích, xếp hạng và danh sách xem, và các endpoint ghi của nó yêu cầu mã thông báo truy cập người dùng. Mã thông báo truy cập đọc của bạn xác thực cho cả hai phiên bản.

Những việc cần làm tiếp theo

Bây giờ bạn đã có một khóa API TMDB hoạt động, một quy tắc về thông tin xác thực cần gửi, một quy trình tìm kiếm-sau-đó-xem-chi-tiết trong curl và Python, và quy trình tương tự được lưu dưới dạng kịch bản thử nghiệm Apidog. Tiếp theo, hãy thêm discover/movie để duyệt tìm kiếm có bộ lọc và đặt thông báo ghi công vào ứng dụng của bạn trước khi chia sẻ. Mọi thứ khác trong danh mục đều sử dụng cùng URL cơ sở, header Bearer và cấu trúc lỗi.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API