API Remesh
L'API Remesh ti consente di ricreare la mesh (remesh) ed esportare modelli 3D esistenti generati da altre API di Meshy (come Immagine in 3D o Testo in 3D) in vari formati. Questa sezione fornisce i dettagli su come utilizzare l'API Remesh.
Crea un Remesh Task
Questo endpoint crea un nuovo task di Remesh.
Per la conversione di formato e il ridimensionamento, utilizza le API dedicate Convert API e Resize API. I parametri deprecati riportati di seguito continueranno a funzionare, ma per le nuove integrazioni consigliamo di utilizzare i nuovi endpoint.
Parametri
È richiesto solo uno tra input_task_id o model_url. Se vengono forniti entrambi, input_task_id ha la priorità.
- Name
- input_task_id
- Type
- string
- Obbligatorio
- Description
L'ID del task Immagine in 3D o Testo in 3D completato che desideri sottoporre a remesh. Questo task deve essere uno dei seguenti: Testo in 3D Preview, Testo in 3D Refine, Immagine in 3D o Retexture. Inoltre, deve avere uno stato
SUCCEEDED.
- Name
- model_url
- Type
- string
- Obbligatorio
- Description
Fornisci un modello 3D che Meshy possa sottoporre a remesh tramite un URL pubblicamente accessibile o una data URI. Formati supportati:
.glb,.gltf,.obj,.fbx,.stl.Per le Data URI, utilizza il MIME type:
application/octet-stream.
- Name
- target_formats
- Type
- string[]
- predefinito ["glb"]
- Description
Un elenco di formati di destinazione per il modello sottoposto a remesh. Se omesso, viene generato solo il formato GLB.
Valori disponibili:
glb,fbx,obj,usdz,blend,stl,3mf.
- Name
- topology
- Type
- string
- predefinito triangle
- Description
Specifica il topology del modello generato.
Valori disponibili:
quad: Genera una mesh a dominanza di quadrilateri.triangle: Genera una mesh triangolare decimata.
- Name
- target_polycount
- Type
- integer
- predefinito 30,000
- Description
Specifica il numero di poligoni di destinazione nel modello generato. Il numero effettivo di poligoni potrebbe discostarsi dall'obiettivo in base alla complessità della geometria.
L'intervallo di valori validi varia a seconda del livello utente:
- Da 100 a 300.000 (inclusi)
- Name
- decimation_mode
- Type
- integer
- Description
Abilita la decimazione adattiva impostando un livello di conteggio poligoni. Quando impostato,
target_polycountviene ignorato.Valori disponibili:
1: Adattivo — conteggio poligoni ultra.2: Adattivo — conteggio poligoni alto.3: Adattivo — conteggio poligoni medio.4: Adattivo — conteggio poligoni basso.
- Name
- resize_height
- Type
- number
- ⚠ deprecato
- predefinito 0
- Description
Ridimensiona il modello a una determinata altezza misurata in metri. Consigliamo di utilizzare l'API dedicata Resize API.
auto_size,resize_heighteresize_longest_sidesi escludono a vicenda.
- Name
- resize_longest_side
- Type
- number
- ⚠ deprecato
- predefinito 0
- Description
Ridimensiona il modello in modo che la dimensione più lunga del bounding box sia uguale al valore specificato in metri. Consigliamo di utilizzare l'API dedicata Resize API.
auto_size,resize_heighteresize_longest_sidesi escludono a vicenda.
- Name
- auto_size
- Type
- boolean
- ⚠ deprecato
- predefinito false
- Description
Quando impostato su
true, il servizio utilizza la visione artificiale per stimare automaticamente l'altezza reale dell'oggetto e ridimensionare il modello di conseguenza. Consigliamo di utilizzare l'API dedicata Resize API.auto_size,resize_heighteresize_longest_sidesi escludono a vicenda.
auto_size = true- Name
- origin_at
- Type
- string
- ⚠ deprecato
- predefinito bottom
- Description
Posizione dell'origine. Consigliamo di utilizzare l'API dedicata Resize API.
Valori disponibili:
bottom,center.
- Name
- convert_format_only
- Type
- boolean
- ⚠ deprecato
- Description
Se
true, il servizio cambierà solo il formato del file del modello di input, ignorando altri input cometopology,resize_heightetarget_polycount. Consigliamo di utilizzare l'API dedicata Convert API.target_formatsdeve essere fornito seconvert_format_onlyè impostato sutrue.
- Name
- alpha_thumbnail
- Type
- boolean
- predefinito false
- Description
Quando impostato su
true, il task genera inoltre una versione con sfondo trasparente (RGBA) dell'anteprima e la restituisce comealpha_thumbnail_urlnella risposta GET. Il campo esistentethumbnail_urlrimane invariato.
Valori restituiti
La proprietà result della risposta contiene l'id del nuovo task di Remesh creato.
Modalità di errore
- Name
400 - Bad Request- Description
La richiesta non è stata accettata. Cause comuni:
- Parametro mancante: È necessario fornire
model_urloppureinput_task_id. - Task di input non valido:
input_task_iddeve fare riferimento a un task completato con successo di un modello supportato. - Formato del modello non valido:
model_urlpunta a un file con un'estensione non supportata. - URL non raggiungibile: Non è stato possibile scaricare il file da
model_url. - Topology non valido: Il parametro
topologynon è valido. - Parametri mutuamente esclusivi:
auto_sizeeresize_heightnon possono essere impostati entrambi.
- Parametro mancante: È necessario fornire
- Name
401 - Unauthorized- Description
Autenticazione non riuscita. Controlla la tua chiave API.
- Name
402 - Payment Required- Description
Crediti insufficienti per eseguire questo task.
- Name
429 - Too Many Requests- Description
Hai superato il tuo limite di frequenza.
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"
}
Recupera un'attività di Remesh
Questo endpoint recupera un'attività di remesh tramite il suo ID.
Parametri
- Name
- id
- Type
- path
- Description
L'ID dell'attività di remesh da recuperare.
Restituisce
L'oggetto Remesh Task.
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,
}
Elimina un'attività di Remesh
Questo endpoint elimina definitivamente un'attività di remesh, inclusi tutti i modelli e i dati associati. Questa azione è irreversibile.
Parametri del percorso
- Name
- id
- Type
- path
- Description
L'ID dell'attività di remesh da eliminare.
Stato dell'attività
Un'attività ancora in stato PENDING viene eliminata e i crediti consumati
al momento della creazione vengono rimborsati.
Un'attività già IN_PROGRESS non può essere eliminata: la richiesta viene
rifiutata con 409 Conflict e l'attività continua a essere eseguita. I crediti
per un'attività che il worker ha già iniziato non sono rimborsabili, quindi
eliminarla a metà esecuzione ti farebbe perdere sia i crediti che il risultato.
Attendi che raggiunga lo stato SUCCEEDED, FAILED o CANCELED, quindi eliminala.
Un'attività in uno stato finale (SUCCEEDED, FAILED o CANCELED) viene
eliminata senza rimborso.
Restituisce
Restituisce 200 OK in caso di successo, oppure 409 Conflict quando l'attività
è 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."
}
Elenco delle attività di Remesh
Questo endpoint consente di recuperare un elenco di attività di Remesh.
Parametri
- Name
- page_num
- Type
- integer
- predefinito 1
- Description
Numero di pagina per la paginazione.
- Name
- page_size
- Type
- integer
- predefinito 10
- Description
Limite della dimensione della pagina. Il massimo consentito è
100elementi.
- Name
- sort_by
- Type
- string
- Description
Campo su cui ordinare.
Valori disponibili:
+created_at: Ordina per data di creazione in ordine crescente.-created_at: Ordina per data di creazione in ordine decrescente.
Restituisce
Restituisce un elenco paginato di Oggetti Attività di Remesh.
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
}
]
Esegui lo streaming di un task di Remesh
Questo endpoint trasmette in streaming gli aggiornamenti in tempo reale di un task di Remesh utilizzando Server-Sent Events (SSE).
Parametri
- Name
- id
- Type
- path
- Description
Identificatore univoco del task di Remesh da trasmettere in streaming.
Risultati restituiti
Restituisce uno stream di The Remesh Task Objects come Server-Sent Events.
Per i task PENDING o IN_PROGRESS, lo stream di risposta includerà solo i campi necessari progress e 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,
}
L'oggetto Remesh Task
L'oggetto Remesh Task rappresenta un'unità di lavoro che Meshy utilizza per rieseguire il remesh ed esportare un modello 3D esistente in vari formati. L'oggetto ha le seguenti proprietà:
Proprietà
- Name
- id
- Type
- string
- Description
Identificatore univoco per il task. Sebbene utilizziamo un UUID k-sortable per gli id dei task come dettaglio implementativo, non dovresti fare alcuna assunzione sul formato dell'id.
- Name
- type
- Type
- string
- Description
Tipo del task Remesh. Il valore è
remesh.
- Name
- model_urls
- Type
- object
- Description
URL scaricabile del file del modello 3D texturizzato generato da Meshy. La proprietà per un formato sarà omessa se il formato non viene generato, invece di restituire una stringa vuota.
- Name
glb- Type
- string
- Description
URL scaricabile del file GLB.
- Name
fbx- Type
- string
- Description
URL scaricabile del file FBX.
- Name
obj- Type
- string
- Description
URL scaricabile del file OBJ.
- Name
usdz- Type
- string
- Description
URL scaricabile del file USDZ.
- Name
blend- Type
- string
- Description
URL scaricabile del file Blender.
- Name
stl- Type
- string
- Description
URL scaricabile del file STL.
- Name
3mf- Type
- string
- Description
URL scaricabile del file 3MF. Presente solo quando
3mfè stato richiesto tramitetarget_formats.
- Name
- thumbnail_url
- Type
- string
- Description
URL scaricabile di un'immagine di anteprima renderizzata dal modello sottoposto a remesh.
- Name
- alpha_thumbnail_url
- Type
- string
- Description
URL scaricabile di una versione con sfondo trasparente (RGBA) di
thumbnail_url. Presente solo quando il task è stato creato conalpha_thumbnail: truee l'anteprima trasparente è stata renderizzata con successo; altrimenti questo campo viene omesso.
- Name
- progress
- Type
- integer
- Description
Avanzamento del task. Se il task non è ancora iniziato, questa proprietà sarà
0. Una volta che il task è riuscito, diventerà100.
- Name
- status
- Type
- string
- Description
Stato del task. I valori possibili sono uno tra
PENDING,IN_PROGRESS,SUCCEEDED,FAILED.
- Name
- preceding_tasks
- Type
- integer
- Description
Il conteggio dei task precedenti.
Il valore di questo campo è significativo solo se lo stato del task è
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Timestamp di quando il task è stato creato, in millisecondi.
- Name
- started_at
- Type
- timestamp
- Description
Timestamp di quando il task è stato avviato, in millisecondi. Se il task non è ancora stato avviato, questa proprietà sarà
0.
- Name
- finished_at
- Type
- timestamp
- Description
Timestamp di quando il task è stato completato, in millisecondi. Se il task non è ancora stato completato, questa proprietà sarà
0.
- Name
- task_error
- Type
- object
- Description
Dettagli dell'errore per i task falliti. Consulta Errori per il riferimento completo dell'oggetto
task_error.
- Name
- consumed_credits
- Type
- integer
- Description
Il numero di crediti consumati da questo task. Presente quando lo stato del task è
PENDING,IN_PROGRESSoSUCCEEDED. Restituisce0per i taskFAILED(i crediti vengono rimborsati in caso di fallimento).
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
}