Hyper3DHyper3D Docs
API Specification

Check Status

Check all jobs associated with a submitted task.

POST
/api/v2/status
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"}

Identifier

Send jobs.subscription_key from the generation response. Do not send the top-level uuid or an entry from jobs.uuids to this endpoint.

Job states

Each entry in jobs reports one of four states:

StateMeaning
WaitingQueued, or waiting for a job it depends on.
GeneratingA worker is running the job.
DoneResults for this job can be downloaded.
FailedThe job stopped and will not produce results.

While a job is Waiting, the response may also carry queue_length, an approximate count of jobs ahead of it. The field is omitted once the job leaves the queue.

Examples Input

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))
}

Response

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

Polling and errors

The endpoint returns HTTP 201 on a successful query. HTTP 400 indicates an invalid body, 401 indicates missing or invalid authentication, and 429 indicates throttling. Start after 5 seconds, back off to at most 30 seconds, honor Retry-After, stop on any Failed job, and impose a client-side deadline.