> ## 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.

# Tạo Mô hình 3D

> Tạo một tác vụ tạo mô hình 3D

Tạo các mô hình 3D từ văn bản hoặc hình ảnh bằng cách sử dụng Tripo3D và các nhà cung cấp khác. Đây là một API bất đồng bộ. Phản hồi tạo trả về danh tính tác vụ và, khi có sẵn, cũng có thể bao gồm `poll_url` ưu tiên.

Các operation 3D công khai được suy luận từ hình dạng request: request chỉ có `prompt` được xử lý là `text-to-3d`, còn request có `image` hoặc `image_url` được xử lý là `image-to-3d`. Endpoint này không công khai trường request `operation`; đừng gửi giá trị legacy `3d-generation`.

## Nội dung yêu cầu

<ParamField body="model" type="string" default="tripo-h3.1">
  Model can dung, vi du `tripo-h3.1` hoac `tripo-p1.0`. Hay goi `GET /v1/models?recommended_for=3d` truoc khi phu thuoc vao loai dau vao hoac dinh dang dau ra cu the.
</ParamField>

<ParamField body="prompt" type="string" required>
  Mô tả văn bản của mô hình 3D cần tạo.
</ParamField>

<ParamField body="image" type="string">
  Hình ảnh được mã hóa Base64 để tạo mô hình 3D từ hình ảnh.
</ParamField>

<ParamField body="image_url" type="string">
  URL của hình ảnh để tạo mô hình 3D từ hình ảnh.
</ParamField>

<ParamField body="format" type="string" default="glb">
  Định dạng đầu ra: `glb`, `fbx`, `obj`, hoặc `usdz`.
</ParamField>

<ParamField body="quality" type="string" default="standard">
  Mức chất lượng: `draft`, `standard`, hoặc `high`.
</ParamField>

<ParamField body="style" type="string">
  Phong cách thiết lập sẵn cho mô hình.
</ParamField>

<ParamField body="seed" type="integer">
  Seed để tạo kết quả có thể tái lập.
</ParamField>

<ParamField body="user" type="string">
  Một mã định danh duy nhất cho người dùng cuối.
</ParamField>

## Phản hồi

<ResponseField name="id" type="string">
  ID tác vụ để kiểm tra trạng thái (polling).
</ResponseField>

<ResponseField name="task_id" type="string">
  Bí danh của mã tác vụ bất đồng bộ khi được adapter trả về.
</ResponseField>

<ResponseField name="poll_url" type="string">
  URL polling ưu tiên 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="created" type="integer">
  Dấu thời gian Unix của thời điểm tạo tác vụ.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.tokenlab.sh/v1/3d/generations" \
    -H "Authorization: Bearer sk-your-api-key" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "tripo-h3.1",
      "prompt": "A detailed medieval castle with towers",
      "format": "glb",
      "quality": "high"
    }'
  ```

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

  response = requests.post(
      "https://api.tokenlab.sh/v1/3d/generations",
      headers={"Authorization": "Bearer sk-your-api-key"},
      json={
          "model": "tripo-h3.1",
          "prompt": "A detailed medieval castle with towers",
          "format": "glb",
          "quality": "high"
      }
  )

  task_id = response.json()["id"]
  print(f"Task ID: {task_id}")
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.tokenlab.sh/v1/3d/generations', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer sk-your-api-key',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'tripo-h3.1',
      prompt: 'A detailed medieval castle with towers',
      format: 'glb',
      quality: 'high'
    })
  });

  const data = await response.json();
  console.log(`Task ID: ${data.id}`);
  ```

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

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

  func main() {
      payload := map[string]interface{}{
          "model":   "tripo-h3.1",
          "prompt":  "A detailed medieval castle with towers",
          "format":  "glb",
          "quality": "high",
      }
      body, _ := json.Marshal(payload)

      req, _ := http.NewRequest("POST", "https://api.tokenlab.sh/v1/3d/generations", bytes.NewBuffer(body))
      req.Header.Set("Authorization", "Bearer sk-your-api-key")
      req.Header.Set("Content-Type", "application/json")

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

      var result map[string]interface{}
      json.NewDecoder(resp.Body).Decode(&result)
      fmt.Printf("Task ID: %s\n", result["id"])
  }
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init('https://api.tokenlab.sh/v1/3d/generations');

  curl_setopt_array($ch, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_HTTPHEADER => [
          'Content-Type: application/json',
          'Authorization: Bearer sk-your-api-key'
      ],
      CURLOPT_POSTFIELDS => json_encode([
          'model' => 'tripo-h3.1',
          'prompt' => 'A detailed medieval castle with towers',
          'format' => 'glb',
          'quality' => 'high'
      ])
  ]);

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

  $data = json_decode($response, true);
  echo "Task ID: " . $data['id'];
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "task_id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "poll_url": "/v1/tasks/ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "status": "pending",
    "created": 1706000000,
    "model": "tripo-h3.1"
  }
  ```
</ResponseExample>
