lowpoly wird am 30.10.2026 abgeschaltet. Wechseln Sie vor diesen Terminen das Modell, um Fehler bei Anfragen zu vermeiden. Alle Abkündigungen ansehen

Creative Lab Fidget Pixel API

Verwandeln Sie ein Foto in zwei Schritten in ein mehrfarbiges, 3D-druckbares Pixel-Art-Fidget-Board. Ein Prototyp-Task wandelt das Foto in ein Pixel-Art-Bild um. Ein Build-Task wandelt dieses Bild in ineinandergreifende Teile in einer einzigen 3MF-Datei um und verwendet die ID des Prototyp-Tasks als input_task_id.

  • POST /openapi/creative-lab/fidget-pixel/v1/prototype
  • POST /openapi/creative-lab/fidget-pixel/v1/build

Beide POST-Endpoints erfordern einen kostenpflichtigen Plan. Eine Anfrage von einem Free-Plan-Konto liefert 402 zurück.


POST/openapi/creative-lab/fidget-pixel/v1/prototype

Erstellen einer Fidget-Pixel-Prototyp-Aufgabe

Erzeugt aus einem Foto ein Pixel-Art-Bild. Um daraus die Teile zu erstellen, übergeben Sie die ID dieser Aufgabe dem Build-Endpunkt als input_task_id. Die Felder der Aufgabe finden Sie unter Das Fidget-Pixel-Prototyp-Aufgabenobjekt.

Wenn Ihnen das Bild nicht gefällt, erstellen Sie eine weitere Prototyp-Aufgabe. Jede Aufgabe wird separat berechnet.

Request

POST
/openapi/creative-lab/fidget-pixel/v1/prototype
# Stage 1: pixelize the source photo
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "image_url": "<your publicly accessible image url or base64-encoded data URI>",
    "type": "person"
  }'

Response

{
  "result": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7"
}

Parameter

  • Name
    image_url
    Type
    string
    Erforderlich
    Description

    Das Foto, das in Pixel-Art umgewandelt werden soll, als öffentliche URL oder als Data URI (data:image/jpeg;base64,<Ihre base64-codierten Bilddaten>).

    Das Bild muss eine JPG-, JPEG-, PNG- oder WebP-Datei mit höchstens 20 MB sein. Meshy erkennt das Format anhand der Bilddaten, nicht anhand der Dateiendung in der URL. Eine URL ohne Dateiendung funktioniert ebenfalls, und Meshy folgt Weiterleitungen.

  • Name
    type
    Type
    string
    Erforderlich
    Description

    Was das Foto zeigt, wodurch der Pixel-Art-Stil festgelegt wird. Die beiden Stile unterscheiden sich deutlich. Jeder andere Wert führt zu 400.

    Verfügbare Werte:

    • person: eine Person, als Porträt- oder Ganzkörperfoto. Meshy zeichnet ein Pixel-Sprite im Chibi-Stil.
    • other: jedes andere Motiv, zum Beispiel ein Haustier, ein Gegenstand, ein Maskottchen, ein Logo oder eine Landschaft. Meshy zeichnet ein Pixel-Icon im Bead-Art-Stil.
  • Name
    name
    Type
    string
    Description

    Ein Name für die Aufgabe, mit bis zu 100 Zeichen. Er wird im Feld name der Aufgabe zurückgegeben. Ein längerer Name führt zu 400.

Rückgabewerte

Das Feld result enthält die ID der neuen Prototyp-Aufgabe. Rufen Sie die Aufgabe ab oder streamen Sie sie, bis status den Wert SUCCEEDED hat. Übergeben Sie die ID anschließend dem Build-Endpunkt als input_task_id.

Fehlermodi

  • Name
    400 - Bad Request
    Description

    Die Anfrage kann nicht ausgeführt werden. Zum Beispiel:

    • image_url oder type fehlt.
    • type ist weder person noch other.
    • Das Bild ist keine JPG-, JPEG-, PNG- oder WebP-Datei.
    • Das Bild ist zu klein, größer als 20 MB oder überschreitet die maximale Pixelanzahl.
    • Meshy kann das Bild nicht herunterladen, zum Beispiel weil die URL 404 zurückgibt oder ein Timeout auftritt.
    • Die Data URI ist kein gültiges base64.
    • Das Bild wurde als NSFW eingestuft.

    Die Fehlermeldung nennt das gefundene Problem. Beheben Sie die Anfrage und senden Sie sie erneut.

  • Name
    401 - Unauthorized
    Description

    Der API-Schlüssel fehlt oder ist ungültig. Überprüfen Sie den Authorization-Header.

  • Name
    402 - Payment Required
    Description

    Einer der folgenden Punkte trifft zu:

    • Das Konto verfügt nicht über genügend Credits.
    • Der API-Schlüssel, der Arbeitsbereich oder das Mitglied hat sein Credit-Limit erreicht.
    • Das Konto nutzt den kostenlosen Plan.

    Überprüfen Sie Ihre Credits und Ihren Plan und versuchen Sie es erneut.

  • Name
    403 - Forbidden
    Description

    Ihr Team hat die IP-Filterung aktiviert, und Meshy hat das Bild wegen geistigen Eigentums Dritter markiert. Senden Sie ein Bild, für das Sie die Nutzungsrechte besitzen.

  • Name
    429 - Too Many Requests
    Description

    Eine der folgenden Grenzen wurde erreicht:

    • Sie haben mehr Anfragen gesendet, als Ihre Ratenbegrenzung erlaubt. Warten Sie einige Sekunden und versuchen Sie es erneut. Siehe Ratenbegrenzungen.
    • Zu viele Ihrer Aufgaben sind in der Warteschlange oder werden gerade ausgeführt. Warten Sie, bis einige abgeschlossen sind, und versuchen Sie es erneut.
    • Bei einem unbegrenzten Plan ohne verbleibende Credits haben Sie die Anzahl der Aufgaben erreicht, die ohne Credits ausgeführt werden können. Warten Sie, bis eine Aufgabe abgeschlossen ist, oder fügen Sie Credits hinzu.
  • Name
    500 - Internal Server Error
    Description

    Bei Meshy ist ein Serverfehler aufgetreten, zum Beispiel weil die Prüfung auf geistiges Eigentum für das Bild nicht durchgeführt werden konnte. Meshy erstellt die Aufgabe nicht und erstattet alle dafür berechneten Credits zurück. Wiederholen Sie die Anfrage.


POST/openapi/creative-lab/fidget-pixel/v1/build

Erstellen einer Fidget Pixel-Build-Aufgabe

Generiert die 3D-druckbaren Teile aus einer erfolgreichen Prototyp-Aufgabe. Meshy tastet das Pixel-Art-Bild auf das Raster ab und reduziert es auf maximal color_count Farben. Jede Zelle des Motivs wird zu einem ineinandergreifenden Teil, und der Hintergrund wird nicht gedruckt.

Das Ergebnis ist eine einzelne mehrfarbige 3MF-Datei, die bereit für den Farbdruck ist. Jedes Teil hat einen grauen Grundkörper und eine Oberseite in der Farbe seines Pixels. Für die zugehörigen Felder siehe Das Fidget Pixel-Build-Aufgabenobjekt.

Request

POST
/openapi/creative-lab/fidget-pixel/v1/build
# Stage 2: chain build off a succeeded prototype task
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "input_task_id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
    "options": {
      "shape": "square",
      "grid_size": 32,
      "piece_size_mm": 8,
      "color_count": 8,
      "piece_height_mm": 15
    },
    "output": {
      "format": "3mf"
    }
  }'

Response

{
  "result": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98"
}

Parameter

  • Name
    input_task_id
    Type
    string
    Erforderlich
    Description

    Die ID der zu erstellenden Prototyp-Aufgabe. Sie muss eine Aufgabe sein, die Ihr Konto mit POST /openapi/creative-lab/fidget-pixel/v1/prototype erstellt hat und deren Status SUCCEEDED ist.

    Eine ID, die nicht zu einer Ihrer Fidget Pixel-Prototyp-Aufgaben aus der API gehört, liefert 404, auch wenn der Prototyp in der Web-App erstellt wurde.

  • Name
    name
    Type
    string
    Description

    Ein Name für die Aufgabe, mit bis zu 100 Zeichen. Er wird im Feld name der Aufgabe zurückgegeben. Ein längerer Name liefert 400.

options

Einstellungen für die Form und Größe der Teile. Jedes Feld hat einen Standardwert, senden Sie daher nur die Felder, die Sie ändern möchten. Eine 0 verwendet den Standardwert des Feldes. Dies sind dieselben Einstellungen wie in der Creative Lab-Web-App. Andere Formeinstellungen sind fest vorgegeben, und Meshy legt sie anhand von shape und piece_size_mm fest.

  • Name
    shape
    Type
    string
    Standard square
    Description

    Die Grundfläche jedes Teils. Jeder andere Wert liefert 400.

    Verfügbare Werte:

    • square: quadratische Teile auf einem quadratischen Raster
    • hex: sechseckige Teile auf einem sechseckigen Raster, mit piece_size_mm auf 6 oder 8 gesetzt
  • Name
    grid_size
    Type
    integer
    Standard 32
    Description

    Die Anzahl der Rasterzellen entlang jeder Seite des Bretts, 16 oder 32. Jeder andere Wert liefert 400. Ein 32-Raster behält mehr Details bei. Ein 16-Raster ergibt weniger Teile derselben Größe, sodass das Brett etwa halb so breit ist.

  • Name
    piece_size_mm
    Type
    integer
    Standard 8
    Description

    Die Kantenlänge jedes Teils in Millimetern, 6, 8 oder 10. Jeder andere Wert liefert 400. Zusammen mit grid_size bestimmt dieser Wert die Größe des gedruckten Bretts. Zum Beispiel ist ein 32-Raster aus 8-mm-Teilen etwa 26,5 cm pro Seite groß.

    10 funktioniert nicht mit hex und liefert 400, da die schräge Sechseckfläche bei den meisten handelsüblichen FDM-Druckern einen Überhang verursacht.

  • Name
    color_count
    Type
    integer
    Standard 8
    Description

    Die maximale Anzahl der Farben in der Pixel-Art-Palette, von 1 bis 8. Ein Wert außerhalb dieses Bereichs liefert 400. Zum Drucken benötigen Sie bis zu color_count plus eins Filamente, eines pro Farbe und eines für die grauen Grundkörper.

  • Name
    piece_height_mm
    Type
    integer
    Standard 15
    Description

    Die Höhe jedes Teils in Millimetern, von 10 bis 80. Ein Wert außerhalb dieses Bereichs liefert 400.

output

Einstellungen für die Ergebnisdatei.

  • Name
    format
    Type
    string
    Standard 3mf
    Description

    Das Dateiformat des Ergebnisses. Jeder andere Wert liefert 400.

    Verfügbare Werte:

    • 3mf: eine mehrfarbige model.3mf-Datei, zurückgegeben unter model_urls.3mf

Rückgabewerte

Das Feld result enthält die ID der neuen Build-Aufgabe. Rufen Sie die Aufgabe ab oder streamen Sie sie, bis status den Wert SUCCEEDED hat. Laden Sie anschließend die 3MF-Datei von model_urls.3mf herunter.

Fehlerfälle

  • Name
    400 - Bad Request
    Description

    Die Anfrage kann nicht ausgeführt werden. Zum Beispiel:

    • input_task_id fehlt oder ist keine gültige Aufgaben-ID.
    • Der Status der Prototyp-Aufgabe ist nicht SUCCEEDED. Wenn sie noch läuft, warten Sie und versuchen Sie es erneut. Wenn sie fehlgeschlagen oder abgebrochen wurde, erstellen Sie eine neue Prototyp-Aufgabe.
    • Die Prototyp-Aufgabe war erfolgreich, enthält aber kein Bild. Erstellen Sie eine neue Prototyp-Aufgabe.
    • Ein Feld in options liegt außerhalb der zulässigen Werte, zum Beispiel ein grid_size, das weder 16 noch 32 ist.
    • piece_size_mm ist 10 und shape ist hex. Sechseckige Teile gibt es nur in 6 und 8 mm.
    • output.format ist nicht 3mf.

    Die Fehlermeldung gibt an, welches Problem gefunden wurde.

  • Name
    401 - Unauthorized
    Description

    Der API-Schlüssel fehlt oder ist ungültig. Überprüfen Sie den Authorization-Header.

  • Name
    402 - Payment Required
    Description

    Einer der folgenden Fälle trifft zu:

    • Das Konto hat nicht genügend Credits.
    • Der API-Schlüssel, der Arbeitsbereich oder das Mitglied hat sein Credit-Limit erreicht.
    • Das Konto nutzt den kostenlosen Plan.

    Überprüfen Sie Ihre Credits und Ihren Plan und versuchen Sie es erneut.

  • Name
    403 - Forbidden
    Description

    Ihr Team hat IP-Filterung aktiviert, und Meshy hat das Bild der Prototyp-Aufgabe wegen geistigen Eigentums Dritter markiert. Erstellen Sie eine Prototyp-Aufgabe aus einem Bild, an dem Sie die Nutzungsrechte besitzen.

  • Name
    404 - Not Found
    Description

    input_task_id entspricht keiner Fidget Pixel-Prototyp-Aufgabe, die Ihr Konto über die API erstellt hat. Ein in der Web-App erstellter Prototyp liefert ebenfalls 404. Senden Sie die result-ID aus einer Prototyp-Erstellungsantwort.

  • Name
    429 - Too Many Requests
    Description

    Eines dieser Limits wurde erreicht:

    • Sie haben mehr Anfragen gesendet, als Ihre Ratenbegrenzung erlaubt. Warten Sie einige Sekunden und versuchen Sie es erneut. Siehe Ratenbegrenzungen.
    • Zu viele Ihrer Aufgaben sind in der Warteschlange oder werden bereits ausgeführt. Warten Sie, bis einige abgeschlossen sind, und versuchen Sie es erneut.
    • Bei einem unbegrenzten Plan ohne verbleibende Credits haben Sie die Anzahl der Aufgaben erreicht, die ohne Credits ausgeführt werden können. Warten Sie, bis eine Aufgabe abgeschlossen ist, oder fügen Sie Credits hinzu.
  • Name
    500 - Internal Server Error
    Description

    Bei Meshy ist ein Serverfehler aufgetreten, zum Beispiel weil die Prüfung auf geistiges Eigentum für das Bild der Prototyp-Aufgabe nicht ausgeführt werden konnte. Meshy erstellt die Aufgabe nicht und erstattet alle bereits belasteten Credits zurück. Versuchen Sie die Anfrage erneut.


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id

Eine Fidget Pixel-Aufgabe abrufen

Gibt eine Prototyp- oder Build-Aufgabe zurück. Der Pfad muss zur Phase der Aufgabe passen. Eine über /prototype/:id angeforderte Build-Aufgabe liefert 404, ebenso eine über /build/:id angeforderte Prototyp-Aufgabe.

Die Felder finden Sie unter Das Fidget Pixel-Prototyp-Aufgabenobjekt und Das Fidget Pixel-Build-Aufgabenobjekt.

Request

GET
/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7
# Prototype
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

# Build
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Prototype Response

{
  "id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
  "type": "creative-lab-fidget-pixel-prototype",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001000000,
  "started_at": 1757001005000,
  "finished_at": 1757001178000,
  "expires_at": 1757260378000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 6,
  "image_urls": [
    "https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
  ]
}

Build Response

{
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001300000,
  "started_at": 1757001304000,
  "finished_at": 1757001309000,
  "expires_at": 1757260509000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {
    "3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
  }
}

Parameter

  • Name
    id
    Type
    path
    Description

    Die Aufgaben-ID aus der Erstellungsantwort.

Rückgabe

Das Prototyp-Aufgabenobjekt oder das Build-Aufgabenobjekt, passend zur Phase im Pfad.

Fehlermodi

  • Name
    400 - Bad Request
    Description

    id ist keine gültige Aufgaben-ID. Senden Sie die result-ID aus der Erstellungsantwort.

  • Name
    403 - Forbidden
    Description

    Ihr Team hat die IP-Filterung aktiviert, und Meshy hat das Bild der Prototyp-Aufgabe wegen geistigen Eigentums Dritter markiert. Bei Build-Aufgaben und Teams im Enterprise-Plan tritt dieser Fehler nicht auf. Erstellen Sie eine Prototyp-Aufgabe mit einem Bild, an dem Sie die Nutzungsrechte besitzen.

  • Name
    404 - Not Found
    Description

    Keine Fidget Pixel-Aufgabe mit dieser ID gehört zu Ihrem Konto, oder die Phase der Aufgabe stimmt nicht mit dem Pfad überein. Überprüfen Sie die ID und verwenden Sie /prototype oder /build passend zur Aufgabe.

  • Name
    500 - Internal Server Error
    Description

    Meshy konnte die Prüfung auf geistiges Eigentum nicht durchführen. Wiederholen Sie die Anfrage.


DELETE/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id

Einen Fidget Pixel-Task löschen

Bricht einen Fidget Pixel-Task ab. Das Abbrechen eines PENDING-Tasks erstattet dessen Credits zurück. Ein IN_PROGRESS-Task wird ohne Rückerstattung abgebrochen, da bereits ein Worker mit der Bearbeitung begonnen hat. Ein Task mit einem endgültigen Status (SUCCEEDED, FAILED oder CANCELED) kann nicht abgebrochen werden.

Der Pfad muss zur Stufe des Tasks passen. Zum Beispiel gibt DELETE auf /prototype/:id mit der ID eines Build-Tasks 404 zurück.

Request

DELETE
/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7
curl --request DELETE \
  --url https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

// Returns 204 No Content on success (empty body).

Pfadparameter

  • Name
    id
    Type
    path
    Description

    Die ID des abzubrechenden Tasks.

Rückgabewerte

204 No Content mit leerem Textkörper.

Fehlerfälle

  • Name
    400 - Bad Request
    Description

    Einer der folgenden Fälle trifft zu:

    • id ist keine gültige Task-ID. Senden Sie die result-ID aus der Antwort der Erstellung.
    • Der Task hat bereits einen endgültigen Status (SUCCEEDED, FAILED oder CANCELED) und kann daher nicht abgebrochen werden.
  • Name
    404 - Not Found
    Description

    Es gehört kein Fidget Pixel-Task mit dieser ID zu Ihrem Konto, oder die Stufe des Tasks stimmt nicht mit dem Pfad überein. Überprüfen Sie die ID und verwenden Sie /prototype oder /build, um den passenden Task zu finden.


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id/stream

Einen Fidget-Pixel-Task streamen

Streamt die Updates eines Fidget-Pixel-Tasks als Server-Sent Events (SSE). Der Pfad muss zur Phase des Tasks passen. Ist das nicht der Fall, zum Beispiel wenn die ID eines Build-Tasks unter /prototype/:id/stream verwendet wird, sendet der Stream ein error-Event mit status_code: 404 und wird geschlossen. Eine id, die keine gültige Task-ID ist, verhält sich genauso, jedoch mit status_code: 400.

Request

GET
/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/stream
curl -N https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response Stream

// Error event example (wrong stage or task not found)
event: error
data: {
  "status_code": 404,
  "message": "Task not found"
}

// Message event examples illustrate task progress.
// Every frame is the full task object for the stage; fields not yet populated are null / empty.
event: message
data: {
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "name": "",
  "status": "PENDING",
  "progress": 0,
  "created_at": 1757001300000,
  "started_at": null,
  "finished_at": null,
  "expires_at": 1757260500000,
  "preceding_tasks": 2,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {}
}

event: message
data: {
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001300000,
  "started_at": 1757001304000,
  "finished_at": 1757001309000,
  "expires_at": 1757260509000,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {
    "3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
  }
}

Parameter

  • Name
    id
    Type
    path
    Description

    Die Task-ID aus der Erstellungsantwort.

Rückgabe

Ein Stream von Prototype- oder Build-Task-Objekten. Jedes Event enthält das vollständige Task-Objekt, so wie es Einen Fidget-Pixel-Task abrufen zurückgibt. Solange sich der Task im Status PENDING oder IN_PROGRESS befindet, sind seine Ausgabefelder noch leer (null, [] oder {}), und finished_at ist null.

Wenn IP Filtering das Ergebnis des Tasks blockiert, sendet der Stream an dessen Stelle ein error-Event mit dem status_code, den eine Get-Anfrage zurückgeben würde.


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)

Fidget Pixel-Aufgaben auflisten

Gibt Ihre Fidget Pixel-Aufgaben einer Stufe zurück, jeweils eine Seite auf einmal. Der Pfad wählt die Stufe aus. /prototype gibt nur Prototyp-Aufgaben zurück, und /build gibt nur Build-Aufgaben zurück.

Request

GET
/openapi/creative-lab/fidget-pixel/v1/prototype
# List prototype tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype?page_size=10 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

# List build tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build?page_size=10 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response (List Prototype Tasks)

[
  {
    "id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
    "type": "creative-lab-fidget-pixel-prototype",
    "name": "",
    "status": "SUCCEEDED",
    "progress": 100,
    "created_at": 1757001000000,
    "started_at": 1757001005000,
    "finished_at": 1757001178000,
    "expires_at": 1757260378000,
    "preceding_tasks": 0,
    "task_error": null,
    "consumed_credits": 6,
    "image_urls": [
      "https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
    ]
  }
]

Pfadparameter

  • Name
    stage
    Type
    path
    Erforderlich
    Description

    Die aufzulistende Stufe, prototype oder build.

Abfrageparameter

  • Name
    page_num
    Type
    integer
    Standard 1
    Description

    Die zurückzugebende Seite, von 1 bis 255. 0 gibt die erste Seite zurück. Ein Wert außerhalb von 0 bis 255 gibt 400 zurück.

  • Name
    page_size
    Type
    integer
    Standard 10
    Description

    Anzahl der Aufgaben pro Seite, bis zu 100. Ein Wert von 101 bis 255 gibt 100 Aufgaben zurück, und 0 verwendet den Standardwert. Ein Wert außerhalb von 0 bis 255 gibt 400 zurück.

  • Name
    sort_by
    Type
    string
    Standard -created_at
    Description

    Die Sortierreihenfolge.

    Verfügbare Werte:

    • -created_at: neueste zuerst
    • +created_at: älteste zuerst

Rückgabewerte

Ein Array von Prototyp-Aufgabenobjekten oder Build-Aufgabenobjekten, passend zur Stufe im Pfad.


Das Fidget-Pixel-Prototyp-Task-Objekt

Ein Prototyp-Task verwandelt ein Foto in ein Pixel-Art-Bild. Um das Bild in 3D-druckbare Teile umzuwandeln, übergeben Sie die ID des Tasks als input_task_id an den Build-Endpunkt.

Eigenschaften

Example Fidget Pixel Prototype Task Object

{
  "id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
  "type": "creative-lab-fidget-pixel-prototype",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001000000,
  "started_at": 1757001005000,
  "finished_at": 1757001178000,
  "expires_at": 1757260378000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 6,
  "image_urls": [
    "https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
  ]
}
  • Name
    id
    Type
    string
    Description

    Die Task-ID. Verlassen Sie sich nicht auf ihr Format.

  • Name
    type
    Type
    string
    Description

    Der Task-Typ, immer creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    Der name, den Sie beim Erstellen des Tasks gesendet haben, oder "", falls Sie keinen gesendet haben.

  • Name
    status
    Type
    string
    Description

    Der Status des Tasks.

    Verfügbare Werte:

    • PENDING: wartet in der Warteschlange
    • IN_PROGRESS: generiert das Ergebnis
    • SUCCEEDED: final, mit Ergebnis
    • FAILED: final, mit dem Grund in task_error
    • CANCELED: final, ohne Ergebnis
  • Name
    progress
    Type
    integer
    Description

    Prozentsatz der erledigten Arbeit, von 0 bis 100. Er ist 0, bis der Task beginnt, und 100, wenn er erfolgreich ist.

  • Name
    created_at
    Type
    timestamp
    Description

    Zeitpunkt der Erstellung des Tasks, in Unix-Millisekunden.

  • Name
    started_at
    Type
    timestamp
    Description

    Zeitpunkt, zu dem ein Worker den Task gestartet hat, in Unix-Millisekunden. Bis dahin null.

  • Name
    finished_at
    Type
    timestamp
    Description

    Zeitpunkt, zu dem der Task einen finalen Status erreicht hat, in Unix-Millisekunden. Bis dahin null.

  • Name
    expires_at
    Type
    timestamp
    Description

    Zeitpunkt, zu dem das Ergebnis des Tasks abläuft, in Unix-Millisekunden. Das ist 3 Tage nach finished_at, oder 3 Tage nach created_at, solange der Task noch nicht abgeschlossen ist. Bei Enterprise-Konten, die API-Ergebnisse unbegrenzt aufbewahren, liegt er etwa 100 Jahre später. Siehe Aufbewahrung von Assets.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Die Position des Tasks in der Warteschlange, solange er PENDING ist. 1 bedeutet, dass er als Nächstes startet. 0, nachdem der Task die Warteschlange verlassen hat, und immer 0 in Listenergebnissen.

  • Name
    task_error
    Type
    object
    Description

    Warum der Task fehlgeschlagen ist. null, sofern status nicht FAILED ist. Siehe Fehler.

  • Name
    consumed_credits
    Type
    integer
    Description

    Anzahl der für den Task berechneten Credits, nach etwaiger Rückerstattung. Eine Anfrage, die einen Fehler zurückgibt, wird nicht berechnet. Ein fehlgeschlagener Task hat den Wert 0, da Meshy ihn erstattet. Ein Abbruch erstattet einen Task nur, solange er PENDING ist. Wenn Meshy die Belastung nicht auslesen kann, lässt eine Get- oder Stream-Antwort das Feld weg, und eine Listenanfrage liefert 500. Wiederholen Sie die Anfrage in diesem Fall.

  • Name
    image_urls
    Type
    array of strings
    Description

    Download-URLs für das Pixel-Art-Bild. Das Array enthält eine URL, nachdem der Task erfolgreich war, und ist bis dahin leer.

    Die URLs sind signiert, rufen Sie sie daher ohne Authorization-Header ab. Sie bleiben bis expires_at gültig. Wird der Task vor diesem Zeitpunkt erneut abgerufen, liefert er dieselben URLs, nicht neu signierte. Eine abgelaufene URL kann nicht erneuert werden, laden Sie die Dateien daher vorher herunter und speichern Sie sie.


Das Fidget Pixel Build-Task-Objekt

Ein Build-Task erzeugt die 3D-druckbaren Teile aus einem erfolgreichen Prototyp-Task. Meshy tastet das Pixel-Art-Bild auf das Raster ab und liefert die Teile in einer einzigen mehrfarbigen 3MF-Datei zurück.

Eigenschaften

Example Fidget Pixel Build Task Object

{
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001300000,
  "started_at": 1757001304000,
  "finished_at": 1757001309000,
  "expires_at": 1757260509000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {
    "3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
  }
}
  • Name
    id
    Type
    string
    Description

    Die Task-ID. Verlassen Sie sich nicht auf ihr Format.

  • Name
    type
    Type
    string
    Description

    Der Task-Typ, immer creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    Der name, den Sie beim Erstellen des Tasks gesendet haben, oder "", wenn Sie keinen gesendet haben.

  • Name
    status
    Type
    string
    Description

    Der Status des Tasks.

    Verfügbare Werte:

    • PENDING: wartet in der Warteschlange
    • IN_PROGRESS: generiert das Ergebnis
    • SUCCEEDED: final, mit dem Ergebnis
    • FAILED: final, mit dem Grund in task_error
    • CANCELED: final, ohne Ergebnis
  • Name
    progress
    Type
    integer
    Description

    Prozentsatz der erledigten Arbeit, von 0 bis 100. Er ist 0, bis der Task beginnt, und 100, wenn er erfolgreich ist.

  • Name
    created_at
    Type
    timestamp
    Description

    Zeitpunkt der Erstellung des Tasks, in Unix-Millisekunden.

  • Name
    started_at
    Type
    timestamp
    Description

    Zeitpunkt, zu dem ein Worker den Task gestartet hat, in Unix-Millisekunden. Bis dahin null.

  • Name
    finished_at
    Type
    timestamp
    Description

    Zeitpunkt, zu dem der Task einen finalen Status erreicht hat, in Unix-Millisekunden. Bis dahin null.

  • Name
    expires_at
    Type
    timestamp
    Description

    Zeitpunkt, zu dem das Ergebnis des Tasks abläuft, in Unix-Millisekunden. Das ist 3 Tage nach finished_at, oder 3 Tage nach created_at, bis der Task abgeschlossen ist. Bei Enterprise-Konten, die API-Ergebnisse unbegrenzt aufbewahren, liegt er etwa 100 Jahre später. Siehe Aufbewahrung von Assets.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Die Position des Tasks in der Warteschlange, solange er PENDING ist. 1 bedeutet, dass er als Nächstes startet. 0, nachdem der Task die Warteschlange verlassen hat, und immer 0 in Listenergebnissen.

  • Name
    task_error
    Type
    object
    Description

    Warum der Task fehlgeschlagen ist. null, sofern status nicht FAILED ist. Siehe Fehler.

  • Name
    consumed_credits
    Type
    integer
    Description

    Anzahl der für den Task berechneten Credits, nach einer eventuellen Rückerstattung. Eine Anfrage, die einen Fehler zurückgibt, wird nicht berechnet. Ein fehlgeschlagener Task ist 0, da Meshy ihn erstattet. Das Abbrechen erstattet einen Task nur, solange er PENDING ist. Wenn Meshy die Belastung nicht lesen kann, lässt eine Get- oder Stream-Antwort das Feld weg, und eine Listenanfrage gibt 500 zurück. In diesem Fall wiederholen Sie die Anfrage.

  • Name
    model_urls
    Type
    object
    Description

    Download-URLs für das Ergebnis, mit dem Dateiformat als Schlüssel. Das Objekt enthält einen Eintrag für das von Ihnen gesendete output.format und ist leer, bis der Task erfolgreich ist.

    Die URLs sind signiert, rufen Sie sie daher ohne Authorization-Header ab. Sie bleiben bis expires_at gültig. Wird der Task vor diesem Zeitpunkt erneut abgerufen, werden dieselben URLs zurückgegeben, keine neu signierten. Eine abgelaufene URL kann nicht erneuert werden, laden Sie die Dateien also vorher herunter und speichern Sie sie.

    • Name
      3mf
      Type
      string
      Description

      Download-URL für die mehrfarbige 3MF-Datei. Jedes Teil hat einen grauen Körper und eine Oberseite in der Farbe seines Pixels. Vorhanden, wenn output.format den Wert 3mf hat, was der Standard ist.


End-to-end example

Die folgenden cURL- und Python-Skripte führen den gesamten Ablauf aus. Jedes Skript erstellt aus einem Foto einen Prototyp-Task und wartet, bis dieser erfolgreich abgeschlossen ist. Anschließend erstellt es einen Build-Task, wartet auf diesen Task und lädt die 3MF-Datei von model_urls.3mf herunter.

Das cURL-Skript benötigt curl und jq, das Python-Skript benötigt das Paket requests. Um ein Skript auszuführen, gehen Sie wie folgt vor:

  1. Setzen Sie MESHY_API_KEY auf Ihren API-Schlüssel.
  2. Setzen Sie IMAGE_PATH auf den Pfad eines lokalen Fotos, oder IMAGE_URL auf eine öffentlich zugängliche Bild-URL.
  3. Optional: Um ein anderes Motiv als eine Person zu pixeln, setzen Sie PIXEL_TYPE auf other.
  4. Führen Sie das Skript aus.

Ein Prototyp-Task ist normalerweise innerhalb weniger Minuten abgeschlossen. Ein Build-Task ist normalerweise in deutlich unter einer Minute abgeschlossen.

Zeigen Sie in Ihrer App das Bild aus image_urls Ihrem Nutzer, bevor Sie den Build-Task erstellen. Falls es ihm nicht gefällt, erstellen Sie stattdessen einen weiteren Prototyp-Task. So geben Sie Build-Credits nur für ein Bild aus, das der Nutzer genehmigt hat.

Complete flow

POST
/openapi/creative-lab/fidget-pixel/v1
#!/usr/bin/env bash
set -euo pipefail

# Requires curl and jq. Point IMAGE_PATH at a local photo, or IMAGE_URL at a public one:
#   export MESHY_API_KEY=msy_...
#   export IMAGE_PATH=./portrait.jpg          # or: export IMAGE_URL=https://...
#   export PIXEL_TYPE=person                  # or: other
: "${MESHY_API_KEY:?export MESHY_API_KEY first}"
if [[ -z "${IMAGE_PATH:-}" && -z "${IMAGE_URL:-}" ]]; then
  echo "export IMAGE_PATH (local file) or IMAGE_URL (public url) first" >&2
  exit 1
fi
PIXEL_TYPE=${PIXEL_TYPE:-person}

BASE="https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1"
AUTH="Authorization: Bearer $MESHY_API_KEY"

# api METHOD URL [curl args...] -> prints the response body, non-zero on failure.
# Note we do not use -f/--fail: it discards the body, and the body is the only
# place the reason appears.
api() {
  local method=$1 url=$2 out http_code body
  shift 2
  out=$(curl --silent --show-error --max-time 60 --write-out $'\n%{http_code}' \
    -X "$method" "$url" -H "$AUTH" "$@") || return 1
  http_code=${out##*$'\n'}
  body=${out%$'\n'*}
  if ((http_code >= 400)); then
    echo "HTTP $http_code for $url: $body" >&2
    return 1
  fi
  printf '%s' "$body"
}

# Each task gets its own 40-minute budget.
poll() {
  local kind=$1 id=$2 delay=5 task_status deadline
  deadline=$(($(date +%s) + 2400))
  while :; do
    if (($(date +%s) >= deadline)); then
      echo "gave up waiting for $kind $id" >&2
      return 1
    fi
    task_status=$(api GET "$BASE/$kind/$id" | jq -r '.status')
    echo "$kind: $task_status"
    case "$task_status" in
    SUCCEEDED) return 0 ;;
    FAILED | CANCELED) return 1 ;;
    esac
    sleep "$delay"
    delay=$((delay * 2 > 30 ? 30 : delay * 2))
  done
}

# Build the request body in a file. A base64 data URI must never go on the
# command line or into an exported variable - a photo of any real size will
# exceed the OS argument limit.
BODY=$(mktemp)
trap 'rm -f "$BODY"' EXIT
if [[ -n "${IMAGE_PATH:-}" ]]; then
  # Declare the real type: the API accepts JPEG, PNG and WebP.
  case "$(printf '%s' "${IMAGE_PATH##*.}" | tr 'A-Z' 'a-z')" in
    png) MIME=image/png ;;
    webp) MIME=image/webp ;;
    *) MIME=image/jpeg ;;
  esac
  {
    printf '{"type":"%s","image_url":"data:%s;base64,' "$PIXEL_TYPE" "$MIME"
    base64 <"$IMAGE_PATH" | tr -d '\n'
    printf '"}'
  } >"$BODY"
else
  jq -n --arg t "$PIXEL_TYPE" --arg u "$IMAGE_URL" \
    '{type: $t, image_url: $u}' >"$BODY"
fi

# 1. Create the prototype task
PROTO_ID=$(api POST "$BASE/prototype" \
  -H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')

# 2. Wait for the pixel-art image (show image_urls[0] to a user in production)
poll prototype "$PROTO_ID"

# 3. Create the build task (defaults: square pieces, 32x32 grid, 8 mm, 8 colors, 15 mm tall)
jq -n --arg p "$PROTO_ID" \
  '{input_task_id: $p, options: {shape: "square", grid_size: 32, piece_size_mm: 8, color_count: 8, piece_height_mm: 15}, output: {format: "3mf"}}' >"$BODY"
BUILD_ID=$(api POST "$BASE/build" \
  -H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')

# 4. Wait for the pieces
poll build "$BUILD_ID"

# 5. Download the 3MF. This is a signed URL: no Authorization header,
#    and it stays valid for 3 days after the task finishes.
TASK=$(api GET "$BASE/build/$BUILD_ID")
curl --silent --show-error --fail --max-time 900 \
  -o fidget-pixel.3mf "$(jq -r '.model_urls["3mf"]' <<<"$TASK")"
echo "Done: fidget-pixel.3mf"