# Conversão de formato de modelo

> **POST** `/v3/models/convert`

Converta um modelo 3D para outro formato.

## Parâmetros de solicitação

### Solicitar cabeçalhos

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
| :-: | :-: | :-: | :-: | :-: |
| Content-Type | cadeia | Sim | - | `application/json` |
| Authorization | cadeia | Sim | - | `Bearer {api_key}` |

### Corpo da Solicitação

#### Parâmetros Básicos

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
| :-: | :-: | :-: | :-: | :-: |
| input | cadeia | Sim | - | Fonte do modelo. Aceita um task_id começando com `task_` ou um file_token começando com `file_` |
| format | cadeia | Sim | - | Formato de destino. Valores disponíveis: `GLTF`, `USDZ`, `FBX`, `OBJ`, `STL`, `3MF`. 3MF: 3D com uma única cor. |

#### Opções de malha

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
| :-: | :-: | :-: | :-: | :-: |
| quad | booleano | Não | `false` | Redesenhação quádrupla |
| force_symmetry | booleano | Não | `false` | Simetria de força. Válido apenas quando `quad` é `true` |
| face_limit | inteiro | Não | - | Polycount máximo. Se omitido, a contagem original de faces será preservada |
| flatten_bottom | booleano | Não | `false` | Achatar fundo |
| flatten_bottom_threshold | flutuar | Não | `0.01` | Limiar de profundidade de achatamento |

#### Opções de textura

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
| :-: | :-: | :-: | :-: | :-: |
| texture_size | inteiro | Não | `4096` | Tamanho da textura difusa em pixels |
| texture_format | cadeia | Não | `JPEG` | Formato de textura. Valores disponíveis: `BMP`, `DPX`, `HDR`, `JPEG`, `PNG`, `TARGA`, `TIFF`, `WEBP` |
| bake | booleano | Não | `true` | Transforme materiais avançados em texturas básicas |
| pack_uv | booleano | Não | `false` | Empacote todos os UVs em um layout unificado |
| export_vertex_colors | booleano | Não | `false` | Inclui cores de vértices. Válido apenas para os formatos `OBJ` e `GLTF` |

#### Opções de exportação

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
| :-: | :-: | :-: | :-: | :-: |
| pivot_to_center_bottom | booleano | Não | `false` | Mova o pivô para o centro inferior |
| scale_factor | flutuar | Não | `1` | Fator de escala |
| with_animation | booleano | Não | `true` | Incluir dados de esqueleto e animação |
| animate_in_place | booleano | Não | `false` | Animação no local |
| part_names | sequência[] | Não | - | Nomes de peças a serem exportadas, a partir de dados mesh/segment |
| export_orientation | cadeia | Não | `+x` | Orientação para exportação. Valores disponíveis: `-x`, `-y`, `+y` |
| fbx_preset | cadeia | Não | `blender` | Predefinição FBX para compatibilidade. Valores disponíveis: `blender`, `3dsmax`, `mixamo` |

## Exemplos de solicitação

### curl

```bash
curl -X POST https://openapi.tripo3d.ai/v3/models/convert \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {api_key}" \
  -d '{
    "input": "task_abc123",
    "format": "FBX",
    "quad": true,
    "face_limit": 8000,
    "texture_size": 2048,
    "texture_format": "PNG",
    "pivot_to_center_bottom": true,
    "fbx_preset": "blender"
  }'
```

### Python

```python
import requests

url = "https://openapi.tripo3d.ai/v3/models/convert"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer {api_key}"
}
payload = {
    "input": "task_abc123",
    "format": "FBX",
    "quad": True,
    "face_limit": 8000,
    "texture_size": 2048,
    "texture_format": "PNG",
    "pivot_to_center_bottom": True,
    "fbx_preset": "blender"
}

response = requests.post(url, headers=headers, json=payload)
print(response.json())
```

### JavaScript

```javascript
const url = "https://openapi.tripo3d.ai/v3/models/convert";

const response = await fetch(url, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer {api_key}"
  },
  body: JSON.stringify({
    input: "task_abc123",
    format: "FBX",
    quad: true,
    face_limit: 8000,
    texture_size: 2048,
    texture_format: "PNG",
    pivot_to_center_bottom: true,
    fbx_preset: "blender"
  })
});

const data = await response.json();
console.log(data);
```

## Resposta

### Resposta bem sucedida

```json
{
  "code": 0,
  "data": {
    "task_id": "task_def456"
  }
}
```

### Campos de resposta

| Parâmetro | Tipo | Descrição |
| :-: | :-: | :-: |
| code | inteiro | Código de status. `0` indica sucesso |
| data.task_id | cadeia | Identificador de tarefa exclusivo usado para consultar o progresso e os resultados da geração |

## Códigos de erro

| Código de status HTTP | Código de erro | Descrição | Recomendação |
| :-: | :-: | :-: | :-: |
| 429 | 2000 | Limite de geração excedido | Reduza a taxa de solicitação e tente novamente mais tarde |
| 400 | 2002 | Parâmetros de solicitação não suportados | Verifique os nomes dos parâmetros do corpo da solicitação e os intervalos de valores |
| 400 | 2006 | Tipo de tarefa de origem de entrada inválido | Confirme se o tipo de tarefa para `task_id` está correto |
| 400 | 2007 | A tarefa de origem não foi concluída com sucesso | Aguarde a conclusão da tarefa de origem antes de iniciar a conversão |
| 403 | 2010 | Créditos insuficientes | Recarregue créditos e tente novamente |
