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.


POST/openapi/v1/remesh

Crea un Remesh Task

Questo endpoint crea un nuovo task di Remesh.

Parametri

  • 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_polycount viene 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.

  • 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.

  • 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.

Si applica solo quando 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 come topology, resize_height e target_polycount. Consigliamo di utilizzare l'API dedicata Convert API.

  • 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 come alpha_thumbnail_url nella risposta GET. Il campo esistente thumbnail_url rimane 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_url oppure input_task_id.
    • Task di input non valido: input_task_id deve fare riferimento a un task completato con successo di un modello supportato.
    • Formato del modello non valido: model_url punta 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 topology non è valido.
    • Parametri mutuamente esclusivi: auto_size e resize_height non possono essere impostati entrambi.
  • 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

POST
/openapi/v1/remesh
# 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"
}

GET/openapi/v1/remesh/:id

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

GET
/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f
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,
}

DELETE/openapi/v1/remesh/:id

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

DELETE
/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f
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."
}

GET/openapi/v1/remesh

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 è 100 elementi.

  • 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

GET
/openapi/v1/remesh
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
  }
]

GET/openapi/v1/remesh/:id/stream

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

GET
/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream
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 tramite target_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 con alpha_thumbnail: true e 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.

  • 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_PROGRESS o SUCCEEDED. Restituisce 0 per i task FAILED (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
}