API de Remallado
La API de Remallado le permite realizar el remallado y exportar modelos 3D existentes generados por otras API de Meshy (como Imagen a 3D o Texto a 3D) a varios formatos. Esta sección proporciona detalles sobre cómo usar la API de Remallado.
Crear una tarea de Remallado
Este endpoint crea una nueva tarea de remallado.
Para la conversión de formato y el redimensionado, utiliza la API de Convertir y la API de Redimensionar dedicadas. Los parámetros obsoletos mencionados a continuación seguirán funcionando, pero recomendamos los nuevos endpoints para las nuevas integraciones.
Parámetros
Solo se requiere uno de input_task_id o model_url. Si se proporcionan ambos, input_task_id tiene prioridad.
- Name
- input_task_id
- Type
- string
- Requerido
- Description
El ID de la tarea completada de Imagen a 3D o Texto a 3D que deseas remallar. Esta tarea debe ser una de las siguientes: Text to 3D Preview, Text to 3D Refine, Imagen a 3D o Retexturizar. Además, debe tener un estado
SUCCEEDED.
- Name
- model_url
- Type
- string
- Requerido
- Description
Proporciona un modelo 3D para que Meshy lo remalle mediante una URL de acceso público o un data URI. Formatos admitidos:
.glb,.gltf,.obj,.fbx,.stl.Para Data URIs, usa el MIME type:
application/octet-stream.
- Name
- target_formats
- Type
- string[]
- predeterminado ["glb"]
- Description
Una lista de formatos de destino para el modelo remallado. Si se omite, solo se genera GLB.
Valores disponibles:
glb,fbx,obj,usdz,blend,stl,3mf.
- Name
- topology
- Type
- string
- predeterminado triangle
- Description
Especifica la topology del modelo generado.
Valores disponibles:
quad: Genera una malla predominantemente cuádruple.triangle: Genera una malla de triángulos decimada.
- Name
- target_polycount
- Type
- integer
- predeterminado 30,000
- Description
Especifica el número objetivo de polígonos en el modelo generado. El número real de polígonos puede variar respecto al objetivo según la complejidad de la geometría.
El rango de valores válido varía según el nivel de usuario:
- de 100 a 300,000 (inclusive)
- Name
- decimation_mode
- Type
- integer
- Description
Habilita la decimación adaptativa configurando un nivel de recuento de polígonos. Cuando se establece,
target_polycountse ignora.Valores disponibles:
1: Adaptativo — recuento de polígonos ultra.2: Adaptativo — recuento de polígonos alto.3: Adaptativo — recuento de polígonos medio.4: Adaptativo — recuento de polígonos bajo.
- Name
- resize_height
- Type
- number
- ⚠ obsoleto
- predeterminado 0
- Description
Redimensiona el modelo a una altura determinada medida en metros. Recomendamos usar la API de Redimensionar dedicada en su lugar.
auto_size,resize_heightyresize_longest_sideson mutuamente excluyentes.
- Name
- resize_longest_side
- Type
- number
- ⚠ obsoleto
- predeterminado 0
- Description
Redimensiona el modelo de modo que la dimensión más larga de su bounding box sea igual al valor especificado en metros. Recomendamos usar la API de Redimensionar dedicada en su lugar.
auto_size,resize_heightyresize_longest_sideson mutuamente excluyentes.
- Name
- auto_size
- Type
- boolean
- ⚠ obsoleto
- predeterminado false
- Description
Cuando se establece en
true, el servicio utiliza visión artificial para estimar automáticamente la altura real del objeto en el mundo real y redimensionar el modelo en consecuencia. Recomendamos usar la API de Redimensionar dedicada en su lugar.auto_size,resize_heightyresize_longest_sideson mutuamente excluyentes.
auto_size = true- Name
- origin_at
- Type
- string
- ⚠ obsoleto
- predeterminado bottom
- Description
Posición del origen. Recomendamos usar la API de Redimensionar dedicada en su lugar.
Valores disponibles:
bottom,center.
- Name
- convert_format_only
- Type
- boolean
- ⚠ obsoleto
- Description
Si es
true, el servicio solo cambiará el formato del archivo del modelo de entrada, ignorando otras entradas comotopology,resize_heightytarget_polycount. Recomendamos usar la API de Convertir dedicada en su lugar.target_formatsdebe proporcionarse siconvert_format_onlyse establece entrue.
- Name
- alpha_thumbnail
- Type
- boolean
- predeterminado false
- Description
Cuando se establece en
true, la tarea además renderiza una versión con fondo transparente (RGBA) de la vista previa y la devuelve comoalpha_thumbnail_urlen la respuesta GET. El campothumbnail_urlexistente no se modifica.
Devuelve
La propiedad result de la respuesta contiene el id de la tarea de remallado recién creada.
Modos de fallo
- Name
400 - Bad Request- Description
La solicitud fue inaceptable. Causas comunes:
- Parámetro faltante: Debe proporcionarse
model_urloinput_task_id. - Tarea de entrada inválida:
input_task_iddebe hacer referencia a una tarea exitosa de un modelo compatible. - Formato de modelo inválido:
model_urlapunta a un archivo con una extensión no compatible. - URL inaccesible: No se pudo descargar
model_url. - Topology inválida: El parámetro
topologyno es válido. - Parámetros mutuamente excluyentes:
auto_sizeyresize_heightno pueden establecerse ambos.
- Parámetro faltante: Debe proporcionarse
- Name
401 - Unauthorized- Description
Falló la autenticación. Por favor, verifica tu clave de API.
- Name
402 - Payment Required- Description
Créditos insuficientes para realizar esta tarea.
- Name
429 - Too Many Requests- Description
Has superado tu límite de tasa.
Request
# Basic remesh with custom formats and resize
curl https://api.meshy.ai/openapi/v1/remesh \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"target_formats": ["glb", "fbx"],
"topology": "quad",
"target_polycount": 50000,
"resize_height": 1.0,
"origin_at": "bottom"
}'
# Quad remesh with auto-size
curl https://api.meshy.ai/openapi/v1/remesh \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"target_formats": ["glb", "fbx"],
"topology": "quad",
"target_polycount": 50000,
"auto_size": true
}'
Response
{
"result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}
Recuperar una tarea de remallado
Este endpoint recupera una tarea de remallado mediante su ID.
Parámetros
- Name
- id
- Type
- path
- Description
El ID de la tarea de remallado a recuperar.
Devuelve
El objeto de la tarea de Remallado.
Request
curl https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
}
Eliminar una tarea de Remallado
Este endpoint elimina permanentemente una tarea de remallado, incluyendo todos los modelos y datos asociados. Esta acción es irreversible.
Parámetros de ruta
- Name
- id
- Type
- path
- Description
El ID de la tarea de remallado a eliminar.
Estado de la tarea
Una tarea que aún está en PENDING se elimina y los créditos consumidos en
el momento de su creación son reembolsados.
Una tarea que ya está IN_PROGRESS no puede eliminarse: la solicitud es
rechazada con 409 Conflict y la tarea sigue ejecutándose. Los créditos de una
tarea que el worker ya ha comenzado a procesar no son reembolsables, por lo que
eliminarla en pleno proceso te costaría tanto los créditos como el resultado.
Espera a que llegue a SUCCEEDED, FAILED o CANCELED, y luego elimínala.
Una tarea en un estado terminal (SUCCEEDED, FAILED o CANCELED) se elimina
sin reembolso.
Devuelve
Devuelve 200 OK en caso de éxito, o 409 Conflict cuando la tarea está en
estado IN_PROGRESS.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS — the task is left running:
{
"message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}
Listar tareas de remallado
Este endpoint le permite recuperar una lista de tareas de remallado.
Parámetros
- Name
- page_num
- Type
- integer
- predeterminado 1
- Description
Número de página para la paginación.
- Name
- page_size
- Type
- integer
- predeterminado 10
- Description
Límite del tamaño de página. El máximo permitido es
100elementos.
- Name
- sort_by
- Type
- string
- Description
Campo por el cual ordenar.
Valores disponibles:
+created_at: Ordenar por hora de creación en orden ascendente.-created_at: Ordenar por hora de creación en orden descendente.
Devuelve
Devuelve una lista paginada de Los objetos de tarea de remallado.
Request
curl https://api.meshy.ai/openapi/v1/remesh?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null
}
]
Transmitir una tarea de Remallado
Este endpoint transmite actualizaciones en tiempo real para una tarea de Remallado utilizando Server-Sent Events (SSE).
Parámetros
- Name
- id
- Type
- path
- Description
Identificador único de la tarea de Remallado que se desea transmitir.
Devuelve
Devuelve un flujo de objetos de tarea de Remallado como Server-Sent Events.
Para tareas en estado PENDING o IN_PROGRESS, el flujo de respuesta solo incluirá los campos necesarios progress y status.
Request
curl -N https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress.
// For PENDING or IN_PROGRESS tasks, the response stream will not include all fields.
event: message
data: {
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
}
El objeto Remesh Task
El objeto Remesh Task representa una unidad de trabajo que Meshy utiliza para remallar y exportar un modelo 3D existente a varios formatos. El objeto tiene las siguientes propiedades:
Propiedades
- Name
- id
- Type
- string
- Description
Identificador único de la tarea. Aunque usamos un UUID k-sortable para los ids de tareas como detalle de implementación, no debes hacer suposiciones sobre el formato del id.
- Name
- type
- Type
- string
- Description
Tipo de la tarea de Remallado. El valor es
remesh.
- Name
- model_urls
- Type
- object
- Description
URL descargable del archivo del modelo 3D con textura generado por Meshy. La propiedad de un formato se omitirá si dicho formato no se generó, en lugar de devolver una cadena vacía.
- Name
glb- Type
- string
- Description
URL descargable del archivo GLB.
- Name
fbx- Type
- string
- Description
URL descargable del archivo FBX.
- Name
obj- Type
- string
- Description
URL descargable del archivo OBJ.
- Name
usdz- Type
- string
- Description
URL descargable del archivo USDZ.
- Name
blend- Type
- string
- Description
URL descargable del archivo de Blender.
- Name
stl- Type
- string
- Description
URL descargable del archivo STL.
- Name
3mf- Type
- string
- Description
URL descargable del archivo 3MF. Solo está presente cuando se solicitó
3mfmediantetarget_formats.
- Name
- thumbnail_url
- Type
- string
- Description
URL descargable de una imagen de vista previa renderizada a partir del modelo remallado.
- Name
- alpha_thumbnail_url
- Type
- string
- Description
URL descargable de una versión con fondo transparente (RGBA) de
thumbnail_url. Solo está presente cuando la tarea se creó conalpha_thumbnail: truey la vista previa transparente se renderizó correctamente; de lo contrario, este campo se omite.
- Name
- progress
- Type
- integer
- Description
Progreso de la tarea. Si la tarea aún no ha comenzado, esta propiedad será
0. Una vez que la tarea se haya completado con éxito, será100.
- Name
- status
- Type
- string
- Description
Estado de la tarea. Los valores posibles son uno de
PENDING,IN_PROGRESS,SUCCEEDED,FAILED.
- Name
- preceding_tasks
- Type
- integer
- Description
La cantidad de tareas precedentes.
El valor de este campo solo es significativo si el estado de la tarea es
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Marca de tiempo de cuándo se creó la tarea, en milisegundos.
- Name
- started_at
- Type
- timestamp
- Description
Marca de tiempo de cuándo se inició la tarea, en milisegundos. Si la tarea aún no se ha iniciado, esta propiedad será
0.
- Name
- finished_at
- Type
- timestamp
- Description
Marca de tiempo de cuándo finalizó la tarea, en milisegundos. Si la tarea aún no ha finalizado, esta propiedad será
0.
- Name
- task_error
- Type
- object
- Description
Detalles del error para tareas fallidas. Consulta Errores para ver la referencia completa del objeto
task_error.
- Name
- consumed_credits
- Type
- integer
- Description
El número de créditos consumidos por esta tarea. Presente cuando el estado de la tarea es
PENDING,IN_PROGRESS, oSUCCEEDED. Devuelve0para tareasFAILED(los créditos se reembolsan en caso de fallo).
Example Remesh Task Object
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": {
"message": ""
},
"consumed_credits": 5
}