# Changelog

## Documentation correction (2026-08)

`credits_consumed`, `balance`, and `frozen` are JSON **numbers** with up to two decimal places (e.g. `48.00`, `41465.00`). Parse them as floating-point or decimal values — **do not** use integer parsing (`int`, `parseInt`, etc.), which will fail or truncate fractional credits (e.g. VIP discounts).

## v3.0 (2026-04)

### New API Architecture

- **Dedicated endpoints replace the universal POST endpoint**: Capability-specific endpoints, such as `POST /v3/generation/text-to-model`, replace the previous universal `POST /v2/openapi/task` endpoint with a `type` field
- **Unified `{input}-to-{output}` naming convention**: All generation endpoints use intuitive names such as `text-to-model`, `image-to-multiview`, and `multiview-to-model`
- **Unified `input` field**: Supports automatic input source inference from `task_id`, `file_token`, or URL, without requiring you to manually specify the input type
- **Removed the redundant `/openapi` path**: The Base URL is simplified from `/v2/openapi/` to `/v3/`
- **Text-to-image and image-to-image are separated into dedicated endpoints**: `text-to-image` and `image-to-image` are no longer combined in a single API

### Endpoint Changes

| v2 Endpoint | v3 Endpoint |
| :-: | :-: |
| `POST /v2/openapi/task` type=text_to_model | `POST /v3/generation/text-to-model` |
| `POST /v2/openapi/task` type=image_to_model | `POST /v3/generation/image-to-model` |
| `POST /v2/openapi/task` type=multiview_to_model | `POST /v3/generation/multiview-to-model` |
| `POST /v2/openapi/task` type=text_to_image | `POST /v3/generation/text-to-image` |
| `POST /v2/openapi/task` type=generate_image | `POST /v3/generation/image-to-image` |
| `POST /v2/openapi/task` type=generate_multiview_image | `POST /v3/generation/image-to-multiview` |
| `POST /v2/openapi/task` type=edit_multiview_image | `POST /v3/generation/edit-multiview` |
| `POST /v2/openapi/task` type=refine_model | `POST /v3/models/refine` |
| `POST /v2/openapi/task` type=convert_model | `POST /v3/models/convert` |
| `POST /v2/openapi/task` type=import_model | `POST /v3/models/import` |
| `POST /v2/openapi/task` type=stylize_model | `POST /v3/models/stylize` |
| `POST /v2/openapi/task` type=texture_model | `POST /v3/models/texture` |
| `POST /v2/openapi/task` type=animate_prerigcheck | `POST /v3/animations/rig-check` |
| `POST /v2/openapi/task` type=animate_rig | `POST /v3/animations/rig` |
| `POST /v2/openapi/task` type=animate_retarget | `POST /v3/animations/retarget` |
| `POST /v2/openapi/task` type=mesh_segmentation | `POST /v3/mesh/segment` |
| `POST /v2/openapi/task` type=mesh_completion | `POST /v3/mesh/complete` |
| `POST /v2/openapi/task` type=highpoly_to_lowpoly | `POST /v3/mesh/decimate` |
| `GET /v2/openapi/task/{task_id}` | `GET /v3/tasks/{task_id}` |

### Field Changes

| v2 Field | v3 Field |
| :-: | :-: |
| `create_time` | `created_at` |
| `consumed_credit` | `credits_consumed` |
| `file` / `file_token` / `url` / `object` | Unified as `input` |

### New Capabilities

- `POST /v3/tasks/list` - Query tasks in batch
- `POST /v3/files/upload-credentials` - Get direct file upload credentials
- `GET /v3/account/usage` - Query usage details
