Hyper3DHyper3D Docs
API 规范

查询状态

查询已提交任务关联的全部 job。

POST
/api/v2/status

查询生成任务的状态。请使用生成响应中 jobs.subscription_key 的值,并避免过于频繁地轮询。

AuthorizationBearer <token>

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/api/v2/status" \  -H "Content-Type: application/json" \  -d '{    "subscription_key": "your-subscription-key"  }'
{  "error": "NO_SUCH_TASK",  "jobs": [    {      "uuid": "123e4567-e89b-12d3-a456-426614174000",      "status": "Waiting",      "queue_length": 0    }  ],  "message": "string"}

标识选择

此接口需要生成响应中的 jobs.subscription_key。不要传入顶层 uuid,也不要传入 jobs.uuids 中的值。

Job 状态

jobs 中的每个条目都会返回以下四种状态之一:

状态含义
Waiting排队中,或正在等待依赖的 job。
Generating有 worker 正在执行该 job。
Done该 job 的结果已可下载。
Failed该 job 已停止,不会产出结果。

当 job 处于 Waiting 时,响应中还可能包含 queue_length,表示排在它前面的 job 的大致数量。job 离开队列后该字段会被省略。

示例

curl --fail-with-body --request POST 'https://api.hyper3d.com/api/v2/status' \
  --header "Authorization: Bearer ${RODIN_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{"subscription_key":"subscription-key-from-generation-response"}'
import os

import requests

api_key = os.environ["RODIN_API_KEY"]
response = requests.post(
    "https://api.hyper3d.com/api/v2/status",
    headers={"Authorization": f"Bearer {api_key}"},
    json={"subscription_key": "subscription-key-from-generation-response"},
    timeout=30,
)
response.raise_for_status()
print(response.json())
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
	"time"
)

func main() {
	body, err := json.Marshal(map[string]string{
		"subscription_key": "subscription-key-from-generation-response",
	})
	if err != nil {
		panic(err)
	}
	req, err := http.NewRequest(http.MethodPost, "https://api.hyper3d.com/api/v2/status", bytes.NewReader(body))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("RODIN_API_KEY"))
	req.Header.Set("Content-Type", "application/json")
	client := &http.Client{Timeout: 30 * time.Second}
	response, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()
	responseBody, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}
	if response.StatusCode >= 400 {
		panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, responseBody))
	}
	fmt.Println(string(responseBody))
}

响应

{
  "jobs": [
    {
      "uuid": "223e4567-e89b-12d3-a456-426614174000",
      "status": "Done"
    }
  ]
}

轮询与错误

查询成功返回 HTTP 201。HTTP 400 表示请求体无效,401 表示鉴权缺失或无效,429 表示触发限流。首次查询前等待 5 秒,逐步退避到最长 30 秒,遵循 Retry-After;任一 job 为 Failed 时立即停止,并设置客户端总期限。