# VGGT-1B API

> Hujenga upya mandhari ya 3D kutoka hadi picha 48 au video, na kurudisha ramani za kina, mikao ya kamera na wingu la nukta

Hukadiria jiometri kutoka mitazamo mingi. Toa hadi picha 48 katika `image_urls`, na kwa hiari ongeza `video_url` iliyochukuliwa kila fremu `frame_sampling_rate`. Hurejesha ramani za kina kwa kila fremu, extrinsiki na intrinsiki za kamera, faili ghafi za utabiri, na wingu la nukta la GLB lenye koni za kamera. `confidence_percentile` na `max_points` hudhibiti msongamano wa wingu la nukta.

- Model id: `vggt-1b`
- Made by: Meta
- Category: Vision
- Output: json
- Charged by usage (up to $1.755 per run, typical $0.04; the rest of the hold is refunded): $0.000975 / second of processing time (cheapest run $0.04 (40 API credits))
- Run: `POST https://api.doitong.com/v1/run/vggt-1b`
- Quote: `POST https://api.doitong.com/v1/quote/vggt-1b`
- Docs page: https://doitong.com/sw/developers/models/vggt-1b

## Pricing

Price: **$0.000975 / second of processing time**. Charged by actual usage at $0.000975 / second of processing time: up to $1.755 per run (the quote gives the maximum for your input), the rest is refunded automatically after the run. A typical run costs $0.04.

The full example input below holds up to $1.755 = 1755 API credits (up to 1800 s of processing time × $0.000975) when it starts; a typical run costs $0.04 (40 API credits).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). This model is charged by usage: `POST https://api.doitong.com/v1/quote/vggt-1b` with the same JSON body returns the most the run can cost for that input (`credits`, debited when the run starts); after the run you pay the usage the model reports and the rest is refunded automatically. An input whose maximum would exceed the per-run limit is refused with 422. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `image_urls` | `images` | array of image URL | no |  | ≤ 48 items | Picha za chanzo cha uundaji upya, kila moja ikiwa imejazwa hadi mraba na kubadilishwa ukubwa hadi kipimo kirefu zaidi cha pikseli 518. JPEG, PNG, WEBP na umbizo lolote la ziada la picha linaloweza kusimbuliwa na Pillow zinakubaliwa. |
| `video_url` | `video` | string (video URL) \| null | no |  |  | Video ya chanzo ya hiari ambayo fremu zake zilizochaguliwa hufuata image_urls katika ingizo lililounganishwa. Uchaguzi hutumia kila fremu ya `frame_sampling_rate`, huku fremu ya kwanza na ya mwisho zikiwemo kila wakati. |
| `frame_sampling_rate` |  | integer | no | `24` | 1 – 1,000 | Intervali ya fremu inayotumika tu video inapotolewa kupitia `video_url`; vinginevyo haina athari. Fremu zote mbili za mipaka huhifadhiwa bila kujali intervali, huku kila fremu ya n ikichaguliwa katikati. |
| `alpha_blend_onto` |  | enum (string) | no | `white` | `keep`, `white`, `black`, `mean` | Utunzaji wa alpha channel una chaguo nne: 'keep' huondoa alpha bila kubadilisha thamani asili za pikseli; 'mean' huunganisha dhidi ya RGB ya wastani ya ImageNet. Kwa mandharinyuma thabiti, chagua 'white' au 'black' ili kuunganisha dhidi ya rangi husika. |
| `export_prediction_data` |  | boolean | no | `true` |  | Hamisha utabiri ghafi kama faili tofauti za JSON kwa fremu mahususi. Kila faili lina depth na confidence yake, mask, na mkao wa kamera uliosimbwa. |
| `export_depth_maps` |  | boolean | no | `true` |  | Hamisha raster za depth zenye upangaji wa mstari wa `depth_range` hadi thamani za pikseli 0–65535. Kila fremu hupata PNG ya grayscale tofauti yenye usahihi wa biti-16. |
| `export_point_cloud` |  | boolean | no | `true` |  | Hamisha point cloud ya rangi iliyounganishwa katika muundo wa GLB, huku kamera zilizokadiriwa zikiwakilishwa na meshes za koni mahususi kwenye tukio. |
| `array_encoding` |  | enum (string) | no | `base64` | `base64`, `list` | Muundo wa hifadhi ya array kwa faili za JSON za utabiri, ambapo 'list' hutumia nafasi kubwa zaidi kuliko 'base64'. Chagua 'list' kwa orodha za JSON zilizowekwa ndani au 'base64' kwa vitu vyenye {data, shape, dtype}. |
| `exclude_keys` |  | array of enum (string) | no |  |  | Funguo zinazoondolewa kwenye kila faili ya JSON ya utabiri. |
| `confidence_percentile` |  | number | no | `50` | 0 – 100 | Asilimia ya uchujaji kulingana na confidence kwa uundaji wa point cloud: 0 huzima uchujaji, huku thamani nyingine zikiondoa asilimia hiyo ya pointi, kuanzia zenye confidence ndogo zaidi. |
| `max_points` |  | integer | no | `250000` | 1,000 – 5,000,000 | Kikomo cha idadi ya pointi za GLB, chaguomsingi ni 250,000. Ili kupunguza muda wa kuserialisha na kupakia, uteuzi uliopunguzwa kwa usawa huandikwa cloud inapozidi bajeti hii. |
| `enable_safety_checker` |  | boolean | no | `true` |  | Kigeuzi cha ukaguzi wa usalama kwa picha na video za ingizo. |

File parameters (`images`, `video`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{}
```

A fuller example:

```json
{}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/vggt-1b?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/vggt-1b?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/vggt-1b", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.com/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "vggt-1b",
      "input": {},
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "vggt-1b",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 1755,
    "usd": "1.755",
    "charged": 1755,
    "refunded": 0
  },
  "input": {},
  "output": {
    "point_cloud": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200
    },
    "depth_maps": [
      {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200,
        "width": 1024,
        "height": 768
      }
    ],
    "prediction_data": [
      {
        "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
        "content_type": "image/jpeg",
        "file_name": "0-output.jpeg",
        "file_size": 1843200
      }
    ],
    "num_frames": 1,
    "depth_range": [
      1.0
    ],
    "extrinsics": [
      [
        [
          1.0
        ]
      ]
    ],
    "intrinsics": [
      [
        [
          1.0
        ]
      ]
    ],
    "timings": {}
  },
  "outputs": [
    {
      "type": "file",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `point_cloud` | object {url, content_type, file_name, file_size} \| null | Uhamishaji wa point cloud unaorejeshwa wakati `export_point_cloud` ni true; tukio lake la GLB huunganisha cloud iliyounganishwa na koni za kamera. |
| `depth_maps` | array of object {url, content_type, file_name, file_size, width, height} | Uhamishaji wa ramani ya depth unaopatikana wakati `export_depth_maps` ni true. Maingizo hufuata mfuatano wa fremu za chanzo, kila fremu ikiwa raster ya PNG ya grayscale yenye depth ya biti-16. |
| `prediction_data` | array of object {url, content_type, file_name, file_size} | Uhamishaji wa utabiri ghafi: wakati `export_prediction_data` ni true, kila fremu huwa na faili yake ya JSON, na faili hizo hufuata mfuatano wa fremu. |
| `num_frames` | integer | Jumla ya idadi ya fremu zilizoundwa upya, ikijumuisha picha na fremu zilizochaguliwa kutoka video. |
| `depth_range` | array of number | Mipaka ya depth [min, max] inayotumika kwa quantization ya `depth_maps`. Rejesha depth kama min + pixel * (max - min) / 65535. |
| `extrinsics` | array of array of array of number | Matrisi za extrinsic za kamera-kutoka-world, za ukubwa 3x4, kwa kila fremu; mihimili ya OpenCV inaelekea kulia kwenye x, chini kwenye y, na mbele kwenye z. |
| `intrinsics` | array of array of array of number | Matrisi za intrinsic za pinhole, za ukubwa 3x3, kwa kila fremu, zilizoonyeshwa katika viwianishi vya pikseli vya fremu ya modeli ya 518x518. |
| `timings` | object | Muda uliopita wa saa halisi kwa kila hatua, kwa sekunde. |

## Related models

- [Sam 3 · Image · Embed](https://doitong.com/developers/models/sam-3/image/embed.md) (`sam-3/image/embed`): $0.005 / run
- [Bagel · Understand](https://doitong.com/developers/models/bagel/understand.md) (`bagel/understand`): $0.05 / request
- [Bria Ad Delayer](https://doitong.com/developers/models/bria/ad-delayer.md) (`bria/ad-delayer`): $0.30 / request
- [Florence 2 Large Caption](https://doitong.com/developers/models/florence-2-large/caption.md) (`florence-2-large/caption`): $0.003 / run
- [Florence 2 Large Detailed Caption](https://doitong.com/developers/models/florence-2-large/detailed-caption.md) (`florence-2-large/detailed-caption`): $0.004 / run
- [Florence 2 Large OCR](https://doitong.com/developers/models/florence-2-large/ocr.md) (`florence-2-large/ocr`): $0.003 / run
- [Florence 2 Large Region To Category](https://doitong.com/developers/models/florence-2-large/region-to-category.md) (`florence-2-large/region-to-category`): $0.003 / run
- [Florence-2 Large · More Detailed Caption](https://doitong.com/developers/models/florence-2-large/more-detailed-caption.md) (`florence-2-large/more-detailed-caption`): $0.004 / run

## Links

- HTML page: https://doitong.com/developers/models/vggt-1b
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=vggt-1b
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/vggt-1b
