> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenlab.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Lấy trạng thái mô hình 3D

> Truy xuất trạng thái và kết quả của tác vụ tạo mô hình 3D

Thực hiện poll endpoint này để kiểm tra trạng thái của tác vụ tạo mô hình 3D của bạn.

<Info>
  Nếu phản hồi tạo bao gồm `poll_url`, hãy ưu tiên chính URL đó khi polling. `id` và `task_id` nên được coi là cùng một định danh của tác vụ bất đồng bộ.

  Nếu tác vụ không còn tồn tại hoặc không còn có thể được phân giải thông qua hợp đồng tác vụ bất đồng bộ công khai, TokenLab trả về `async_task_not_found` với thông điệp `Task not found or no longer available.`
</Info>

## Tham số đường dẫn

<ParamField path="id" type="string" required>
  ID của tác vụ tạo mô hình 3D.
</ParamField>

## Phản hồi

<ResponseField name="id" type="string">
  ID tác vụ.
</ResponseField>

<ResponseField name="task_id" type="string">
  Bí danh của mã tác vụ bất đồng bộ khi có sẵn.
</ResponseField>

<ResponseField name="status" type="string">
  Trạng thái tác vụ: `pending`, `processing`, `completed`, hoặc `failed`.
</ResponseField>

<ResponseField name="progress" type="integer">
  Giá trị tiến độ tùy chọn. Chỉ được trả về khi có giá trị tiến độ thực; hãy dùng `status` để xác định khi tác vụ hoàn tất.
</ResponseField>

<ResponseField name="model_url" type="string">
  URL để tải xuống tệp mô hình 3D (khi hoàn tất).
</ResponseField>

<ResponseField name="glb_url" type="string">
  URL để tải xuống mô hình định dạng GLB (khi có sẵn).
</ResponseField>

<ResponseField name="fbx_url" type="string">
  URL để tải xuống mô hình định dạng FBX (khi có sẵn).
</ResponseField>

<ResponseField name="error" type="string">
  Thông báo lỗi (khi thất bại).
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.tokenlab.sh/v1/tasks/ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
    -H "Authorization: Bearer sk-your-api-key"
  ```

  ```python Python theme={null}
  import requests
  import time

  task_id = "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

  while True:
      response = requests.get(
          f"https://api.tokenlab.sh/v1/tasks/{task_id}",
          headers={"Authorization": "Bearer sk-your-api-key"}
      )
      result = response.json()

      if result["status"] == "completed":
          print(f"3D Model URL: {result['model_url']}")
          break
      elif result["status"] == "failed":
          print(f"Error: {result['error']}")
          break

      time.sleep(5)  # Poll every 5 seconds
  ```

  ```javascript JavaScript theme={null}
  const taskId = 'ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';

  async function pollFor3DModel() {
    while (true) {
      const response = await fetch(
        `https://api.tokenlab.sh/v1/tasks/${taskId}`,
        { headers: { 'Authorization': 'Bearer sk-your-api-key' } }
      );

      const result = await response.json();

      if (result.status === 'completed') {
        console.log(`3D Model URL: ${result.model_url}`);
        return result.model_url;
      } else if (result.status === 'failed') {
        throw new Error(result.error);
      }

      await new Promise(r => setTimeout(r, 5000));
    }
  }
  ```

  ```go Go theme={null}
  package main

  import (
      "encoding/json"
      "fmt"
      "net/http"
      "time"
  )

  func main() {
      taskID := "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

      for {
          req, _ := http.NewRequest("GET",
              fmt.Sprintf("https://api.tokenlab.sh/v1/tasks/%s", taskID), nil)
          req.Header.Set("Authorization", "Bearer sk-your-api-key")

          client := &http.Client{}
          resp, _ := client.Do(req)

          var result map[string]interface{}
          json.NewDecoder(resp.Body).Decode(&result)
          resp.Body.Close()

          if result["status"] == "completed" {
              fmt.Printf("3D Model URL: %s\n", result["model_url"])
              break
          } else if result["status"] == "failed" {
              fmt.Printf("Error: %s\n", result["error"])
              break
          }

          time.Sleep(5 * time.Second)
      }
  }
  ```

  ```php PHP theme={null}
  <?php
  $taskId = 'ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';

  while (true) {
      $ch = curl_init("https://api.tokenlab.sh/v1/tasks/{$taskId}");

      curl_setopt_array($ch, [
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_HTTPHEADER => [
              'Authorization: Bearer sk-your-api-key'
          ]
      ]);

      $response = curl_exec($ch);
      curl_close($ch);

      $result = json_decode($response, true);

      if ($result['status'] === 'completed') {
          echo "3D Model URL: {$result['model_url']}\n";
          break;
      } elseif ($result['status'] === 'failed') {
          echo "Error: {$result['error']}\n";
          break;
      }

      sleep(5);
  }
  ```
</RequestExample>

<ResponseExample>
  ```json Response (Completed) theme={null}
  {
    "id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "task_id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "poll_url": "/v1/tasks/ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "status": "completed",
    "model_url": "https://cdn.tripo3d.ai/abc123.glb",
    "glb_url": "https://cdn.tripo3d.ai/abc123.glb",
    "fbx_url": "https://cdn.tripo3d.ai/abc123.fbx"
  }
  ```
</ResponseExample>
