Danh mục tài liệu

Rank Checker

API Tích hợp (Open API)

Tài liệu này mô tả chi tiết các Open API của hệ thống SerpUpdate dành cho khách hàng tích hợp. Bạn có thể sử dụng các API này để tạo task kiểm tra thứ hạng từ khóa, tra cứu mã địa lý, ngôn ngữ và tự động nhận kết quả qua Webhook.

Thông tin chung

  • Base URL: https://app.serpupdate.com
  • Phiên bản API: v1.2

1. Quy Trình Sử Dụng

  1. Gọi API Get LocationsGet Languages để lấy mã locationCodelanguageCode.
  2. Gọi API Create Task với thông tin từ khóa, location, language → nhận về taskId.
  3. Chờ hệ thống xử lý. Khi có kết quả, hệ thống sẽ gọi Ping Back (Webhook) về server của bạn. Hoặc bạn có thể chủ động gọi API Get Task Result với taskId để lấy kết quả.

2. Xác Thực (Authentication)

Tất cả các request đều yêu cầu gửi kèm API Key trong header. Khách hàng tạo tài khoản trên app.serpupdate.com. API Key được cấp riêng cho từng tài khoản.

Header yêu cầu:
X-API-KEY: <your_api_key>

Bảo mật

Tuyệt đối không chia sẻ API Key cho bên thứ ba. Liên hệ bộ phận hỗ trợ nếu cần cấp lại.

3. Cấu Trúc Response Chung

Tất cả các API đều trả về cùng một cấu trúc JSON bao ngoài:

Trường Kiểu Mô tả
isSuccess Boolean Trạng thái tổng thể của request (true/false)
errorCode String | null Mã lỗi (null nếu thành công)
message String | null Thông báo chi tiết về lỗi (null nếu thành công)
content Object | null Dữ liệu trả về (khác nhau tùy API)

Danh sách Mã Lỗi (Error Codes)

HTTP errorCode Mô tả
200 null Thành công
400 BAD_REQUEST Dữ liệu request không hợp lệ (thiếu trường bắt buộc, sai định dạng)
401 UNAUTHORIZED API Key không hợp lệ hoặc không được cung cấp
429 RATE_LIMIT Vượt quá giới hạn số lượng request
500 INTERNAL_ERROR Lỗi hệ thống, vui lòng thử lại sau

4. Danh Sách Endpoints


API #1: Create Task

Tạo tác vụ kiểm tra thứ hạng từ khóa trên công cụ tìm kiếm. Mỗi request có thể gửi nhiều từ khóa cùng lúc.

Endpoint: POST /api/v1/open-api/create-task

Request Body

Tham số Kiểu Bắt buộc Mô tả
deviceCode String ✔ Có Mã thiết bị. VD: desktop, mobile, tablet
locationCode Number ✔ Có Mã vùng địa lý (lấy từ API Get Locations)
languageCode String ✔ Có Mã ngôn ngữ (lấy từ API Get Languages). VD: vi, en
searchEngineCode String ✔ Có Mã công cụ tìm kiếm. VD: GOOGLE, BING
keywords Array ✔ Có Danh sách từ khóa cần kiểm tra (xem bảng Keyword Object)

Keyword Object

Tham số Kiểu Bắt buộc Mô tả
cstmKeywordId String ✔ Có Mã từ khóa do khách hàng tự định nghĩa (để đối chiếu kết quả)
keyword String ✔ Có Từ khóa cần kiểm tra thứ hạng

Response — content.tasks[]

Trường Kiểu Mô tả
taskId Number ID của task (dùng cho API Get Task Result hoặc nhận qua Ping Back)
cstmKeywordId String Mã từ khóa do khách hàng gửi lên
keyword String Từ khóa đã gửi
isSuccess Boolean Trạng thái tạo task cho từ khóa này (true/false)

Ví dụ cURL & Response

curl --location 'https://app.serpupdate.com/api/v1/open-api/create-task' 
  --header 'X-API-KEY: <your_api_key>' 
  --header 'Content-Type: application/json' 
  --data '{
    "deviceCode": "desktop",
    "locationCode": 2704,
    "languageCode": "vi",
    "searchEngineCode": "GOOGLE",
    "keywords": [
      { "cstmKeywordId": "1", "keyword": "Dien thoai gia re" },
      { "cstmKeywordId": "2", "keyword": "Dien thoai dep" }
    ]
  }'
{
  "errorCode": null,
  "content": {
    "tasks": [
      { "taskId": 4, "cstmKeywordId": "1", "keyword": "Dien thoai gia re", "isSuccess": true },
      { "taskId": 5, "cstmKeywordId": "2", "keyword": "Dien thoai dep", "isSuccess": true }
    ]
  },
  "message": null,
  "isSuccess": true
}

API #2: Get Locations

Tra cứu danh sách địa điểm (location) hỗ trợ bởi hệ thống. Kết quả có phân trang và hỗ trợ tìm kiếm mở theo tên.

Endpoint: POST /api/v1/open-api/locations

Request Body

Tham số Kiểu Mô tả
name String Tùy chọn. Tên địa điểm cần tìm (VD: “Ho Chi” → “Ho Chi Minh,Vietnam”)
page Number Tùy chọn. Số trang (bắt đầu từ 0). Mặc định: 0
size Number Tùy chọn. Số kết quả mỗi trang. Mặc định: 10

Response — content.content[] (Location Object)

Trường Kiểu Mô tả
locationCode Number Mã địa điểm (dùng cho locationCode trong Create Task)
locationName String Tên địa điểm. VD: “Vietnam”, “An Giang,Vietnam”
locationCodeParent Number | null Mã địa điểm cha (null nếu là quốc gia)
countryIsoCode String Mã quốc gia ISO (VN, US, JP, …)
locationType String Loại: Country, Province, City, …

Ví dụ Response

{
  "errorCode": null,
  "content": {
    "content": [
      {
        "locationCode": 2704,
        "locationName": "Vietnam",
        "locationCodeParent": null,
        "countryIsoCode": "VN",
        "locationType": "Country"
      }
    ],
    "totalElements": 245,
    "totalPages": 25,
    "numberOfElements": 10
  },
  "message": null,
  "isSuccess": true
}

API #3: Get Languages

Lấy danh sách mã ngôn ngữ được hỗ trợ. Không cần truyền tham số.

Endpoint: POST /api/v1/open-api/languages

curl --location --request POST 'https://app.serpupdate.com/api/v1/open-api/languages' 
  --header 'X-API-KEY: <your_api_key>' 
  --header 'Content-Type: application/json' 
  --data ''

API #4: Get Task Result

Lấy kết quả thứ hạng SERP của một task đã tạo thông qua taskId.

Endpoint: POST /api/v1/open-api/task-result

Request Body

Cần truyền vào tham số bắt buộc: { "taskId": 4 }

Response — content

Trường Kiểu Mô tả
taskId Number ID của task
serpItems Array Danh sách kết quả SERP (SerpItem Object)
aiOverview Object | null Nội dung AI Overview từ Google (AiOverview Object). Null nếu không có.

SerpItem Object (serpItems)

Trường Kiểu Mô tả
rank Number Thứ hạng của kết quả trên trang SERP (1, 2, 3…)
url String URL đầy đủ của kết quả
domain String Tên miền. VD: “tiki.vn”
title String Tiêu đề của kết quả
description String Mô tả snippet của kết quả

AiOverview Object

Trường Kiểu Mô tả
markdown String Nội dung AI Overview dạng Markdown
references Array Danh sách nguồn tham chiếu (cùng cấu trúc SerpItem Object)

Ví dụ Response

{
  "errorCode": null,
  "content": {
    "taskId": 4,
    "serpItems": [
      {
        "rank": 1,
        "url": "https://www.thegioididong.com/dtdd",
        "domain": "thegioididong.com",
        "title": "Dien thoai gia re - The Gioi Di Dong",
        "description": "Danh sach dien thoai gia re..."
      }
    ],
    "aiOverview": {
      "markdown": "## Dien thoai gia re tot nhat...",
      "references": [
        { "rank": 1, "url": "https://...", "domain": "...", "title": "...", "description": "..." }
      ]
    }
  },
  "message": null,
  "isSuccess": true
}

Nếu task chưa hoàn thành, serpItems có thể rỗng. Hãy thử lại sau hoặc dùng Webhook Ping Back để nhận thông báo tự động.


API #5: Ping Back (Webhook)

Thay vì liên tục chủ động gọi Get Task Result, bạn có thể đăng ký một Endpoint (URL Callback) với đội ngũ SerpUpdate.

Ngay khi task hoàn thành, hệ thống sẽ tự động gọi HTTP POST truyền kết quả về Server của bạn.

Yêu cầu phía Server của bạn

  • Cung cấp một endpoint HTTP POST có thể nhận JSON body.
  • Endpoint phải trả về HTTP 200 OK để xác nhận đã nhận dữ liệu. Nếu không, hệ thống có thể thử lại (retry).

Payload hệ thống gửi cho bạn

Dữ liệu JSON gửi trực tiếp đến bạn có cấu trúc chính xác như phần content của API Get Task Result.

POST https://your-server.com/your-callback-endpoint
Content-Type: application/json

{
  "taskId": 4,
  "serpItems": [
    {
      "rank": 1,
      "url": "https://...",
      "domain": "...",
      "title": "...",
      "description": "..."
    }
  ],
  "aiOverview": {
    "markdown": "## ...",
    "references": []
  }
}

Ví dụ xử lý (Java Spring Boot)

@PostMapping("/your-callback-endpoint")
public ResponseEntity receivePingBack(@RequestBody TaskOpenApiResponse payload) {
    // Xử lý dữ liệu: payload.getTaskId(), payload.getSerpItems()...
    log.info("Received task result: {}", payload);
    
    // Trả về 200 OK để hệ thống ghi nhận thành công
    return ResponseEntity.ok().build();
}

Xem thêm