Creative Lab — Fidget Pixel API

Zet een bronfoto in twee fasen om in een multi-kleuren 3D-printbaar pixel-art fidgetbord: prototype pixeliseert je foto tot een pixel-art afbeelding, waarna build die afbeelding bemonstert op een 16×16- of 32×32-raster en elke pixel omzet in een in elkaar grijpend vierkant of zeshoekig stukje, geleverd als één enkele 3MF waarvan de objecten hun kleuren meedragen, zodat een multi-filament slicer elk stukje in de juiste kleur print. De twee fasen zijn gekoppeld via input_task_id.

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

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

Create a Fidget Pixel Prototype Task

Genereer een enkele pixel-art afbeelding op basis van de bronfoto. De geretourneerde task-ID is wat u als input_task_id doorgeeft aan de build-endpoint. Roep deze endpoint opnieuw aan voor een nieuwe poging als het resultaat niet is wat u wilt — elke aanroep wordt afzonderlijk gefactureerd. Raadpleeg The Fidget Pixel Prototype Task Object voor de vorm van de response.

Parameters

  • Name
    image_url
    Type
    string
    Verplicht
    Description

    Bronfoto die Meshy moet pixelizeren. We ondersteunen momenteel de formaten .jpg, .jpeg, .png en .webp.

    Het formaat wordt gedetecteerd door de afbeeldingsgegevens te decoderen, niet aan de hand van de bestandsextensie van de URL — een URL zonder extensie, of een die doorverwijst, werkt zolang de bytes decoderen naar een ondersteund formaat. HTTP-redirects worden gevolgd.

    Er zijn twee manieren om de afbeelding aan te leveren:

    • Openbaar toegankelijke URL: Een URL die vanaf het openbare internet toegankelijk is.
    • Data URI: Een base64-gecodeerde data-URI van de afbeelding. Voorbeeld van een data-URI: data:image/jpeg;base64,<uw base64-gecodeerde afbeeldingsgegevens>.
  • Name
    type
    Type
    string
    Verplicht
    Description

    Wat de foto toont. Bepaalt de pixelizatiestijl, kies dus bewust — de twee opties leveren zichtbaar verschillende resultaten op. Beschikbare waarden:

    • person — het onderwerp is een persoon (portret of volledig lichaam). Produceert een chibi-stijl pixel-sprite van het onderwerp.
    • other — al het overige: huisdieren, objecten, mascottes, logo's, landschappen. Produceert een bead-art stijl pixel-icoon van het onderwerp.
  • Name
    name
    Type
    string
    Description

    Optionele tasknaam voor weergavedoeleinden. Maximaal 100 tekens.

Returns

De result-property van de response bevat de task-id van de nieuw aangemaakte fidget pixel prototype task. Poll de Get a Task endpoint of abonneer u op de stream totdat de task de status SUCCEEDED bereikt, en geef die ID vervolgens als input_task_id door aan de build-endpoint.

Foutmodi

  • Name
    400 - Bad Request
    Description

    Het verzoek was onaanvaardbaar. Veelvoorkomende oorzaken:

    • Ontbrekende parameter: zowel image_url als type zijn verplicht.
    • Ongeldig type: type moet person of other zijn.
    • Ongeldig afbeeldingsformaat: de opgegeven image_url heeft geen ondersteund formaat (.jpg, .jpeg, .png, .webp).
    • Afbeeldingsafmetingen buiten bereik: de afbeelding is te klein, overschrijdt de maximale bestandsgrootte of overschrijdt het maximale aantal pixels.
    • Onbereikbare URL: de image_url kon niet worden gedownload (404 of timeout).
    • Ongeldige Data URI: de base64-string is onjuist opgemaakt.
    • Content gemarkeerd: de invoerafbeelding is gemarkeerd door NSFW-moderation.
  • Name
    401 - Unauthorized
    Description

    Authenticatie mislukt. Controleer uw API-sleutel.

  • Name
    402 - Payment Required
    Description

    Onvoldoende credits om deze task uit te voeren, of de API-sleutel behoort tot een account met een gratis abonnement.

  • Name
    403 - Forbidden
    Description

    De invoerafbeelding is gemarkeerd door moderation op intellectueel eigendom (Content flagged for intellectual property violation). Alleen Enterprise-accounts met ingeschakelde filtering op intellectueel eigendom worden geblokkeerd; er wordt niets in rekening gebracht.

  • Name
    429 - Too Many Requests
    Description

    U heeft uw rate limit overschreden.

  • Name
    500 - Internal Server Error
    Description

    De controle op intellectueel eigendom zelf kon niet worden voltooid (Unable to perform intellectual property check, please try again). Enterprise-accounts met ingeschakelde filtering op intellectueel eigendom falen bij deze controle op een veilige manier (fail closed); er wordt niets in rekening gebracht — probeer het verzoek opnieuw.

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"
}

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

Een Fidget Pixel Build Task aanmaken

Genereer de 3D-printbare onderdelen uit een geslaagde prototype-task. De build bemonstert de pixel-art-afbeelding van het prototype op het gevraagde raster, kwantiseert deze tot maximaal color_count kleuren en genereert per rastercel één in elkaar grijpend onderdeel. Het resultaat is een enkel 3MF- bestand waarin elk onderdeel een apart object is, getagd met zijn kleur, klaar voor een multi-filament slicer. Raadpleeg Het Fidget Pixel Build Task-object voor de vorm van de response.

Parameters

  • Name
    input_task_id
    Type
    string
    Verplicht
    Description

    De task-ID van een prototype-task die via ditzelfde OpenAPI-endpoint is aangemaakt. Het prototype moet zijn aangemaakt door hetzelfde Meshy-account en moet SUCCEEDED hebben bereikt.

    Prototype-tasks die via de webapp zijn aangemaakt, worden niet geaccepteerd — het build-endpoint accepteert alleen prototype-tasks geproduceerd door POST /openapi/creative-lab/fidget-pixel/v1/prototype en weigert elke andere bron met 404.

  • Name
    name
    Type
    string
    Description

    Optionele tasknaam voor weergavedoeleinden. Maximaal 100 tekens.

options

Optionele geometrie van de onderdelen. Elk veld heeft een standaardwaarde — stuur alleen de velden die je wilt overschrijven. Dit zijn dezelfde instellingen die de Creative Lab-webapp blootstelt; plughoogte, kapschaal en de overige fabricagevoorinstellingen worden afgeleid van shape en piece_size_mm en worden niet blootgesteld.

  • Name
    shape
    Type
    string
    standaard square
    Description

    Voetafdruk van elk onderdeel. Beschikbare waarden:

    • square (standaard) — vierkante onderdelen op een vierkant raster.
    • hex — zeshoekige onderdelen op een zeshoekig raster. Hexagonale onderdelen zijn alleen beschikbaar in 6 en 8 mm.
  • Name
    grid_size
    Type
    integer
    standaard 32
    Description

    Aantal onderdelen langs elke zijde van het bord. Beschikbare waarden: 16 of 32. Een raster van 32 behoudt meer detail; een raster van 16 betekent minder, grotere onderdelen voor hetzelfde onderwerp.

  • Name
    piece_size_mm
    Type
    integer
    standaard 8
    Description

    Randlengte van elk onderdeel, in millimeters. Beschikbare waarden: 6, 8 of 10. Samen met grid_size bepaalt dit de geprinte bordgrootte — bijvoorbeeld 32 × 8 mm ≈ 26 cm per zijde. 10 is niet beschikbaar voor shape: "hex" (het schuine hexagonale vlak veroorzaakt overhang op de meeste consumenten-FDM-printers).

  • Name
    color_count
    Type
    integer
    standaard 8
    Description

    Maximaal aantal kleuren in het palet waartoe de afbeelding wordt gekwantiseerd. Bereik: [1, 8]. Elke kleur wordt één filament in je slicer.

  • Name
    piece_height_mm
    Type
    integer
    standaard 15
    Description

    Hoogte van elk onderdeel, in millimeters. Bereik: [10, 80].

output

Optionele selector voor het uitvoerformaat. Standaard 3mf, wat momenteel de enige ondersteunde waarde is.

  • Name
    format
    Type
    string
    standaard 3mf
    Description

    Artefact geretourneerd door de build. Beschikbare waarden:

    • 3mf (standaard) — retourneert een enkel model.3mf onder model_urls.3mf, met één object per onderdeel en de kleur van het onderdeel gekoppeld aan elk object.

Retourneert

De result-eigenschap van de response bevat de task-id van de nieuw aangemaakte fidget pixel build task. Poll het Get a Task-endpoint of abonneer je op de stream totdat de task SUCCEEDED bereikt, download vervolgens het artefact van model_urls.3mf.

Foutmodi

  • Name
    400 - Bad Request
    Description

    Het verzoek was onaanvaardbaar. Veelvoorkomende oorzaken:

    • Ontbrekende parameter: input_task_id is verplicht.
    • Ongeldige UUID: De input_task_id is geen geldige UUID.
    • Bovenliggende task niet geslaagd: De verwezen prototype-task heeft SUCCEEDED nog niet bereikt.
    • Geen kandidaat: De prototype-task is geslaagd, maar heeft geen pixel-art-afbeelding opgeleverd; maak een nieuw prototype aan.
    • Opties buiten bereik: Een van de options-velden valt buiten de toegestane set of het toegestane bereik — bijvoorbeeld options.grid_size must be 16 or 32, of options.piece_size_mm=10 is not supported for shape=hex; hex pieces are available in 6 and 8 mm.
    • Niet-ondersteund formaat: output.format moet 3mf zijn.
  • Name
    401 - Unauthorized
    Description

    Authenticatie is mislukt. Controleer je API-sleutel.

  • Name
    402 - Payment Required
    Description

    Onvoldoende credits om deze task uit te voeren, of de API-sleutel behoort tot een account met een gratis abonnement.

  • Name
    403 - Forbidden
    Description

    De afbeelding van het verwezen prototype is gemarkeerd door moderation op intellectueel eigendom. Alleen Enterprise-accounts met ingeschakelde filtering op intellectueel eigendom worden geblokkeerd; er wordt niets in rekening gebracht.

  • Name
    404 - Not Found
    Description

    De verwezen prototype-task bestaat niet, behoort tot een andere gebruiker, of is aangemaakt via de webapp (alleen prototype-tasks in API-mode kunnen worden doorgeschakeld naar build).

  • Name
    429 - Too Many Requests
    Description

    Je hebt je rate limit overschreden.

  • Name
    500 - Internal Server Error
    Description

    Het oordeel over intellectueel eigendom van het verwezen prototype kon niet worden vastgesteld (Unable to perform intellectual property check, please try again). Enterprise-accounts met ingeschakelde filtering op intellectueel eigendom slaan bij deze controle standaard dicht (fail closed); er wordt niets in rekening gebracht — probeer het verzoek opnieuw.

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"
}

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

Fidget Pixel-taak ophalen

Haal een prototype- of buildtaak op aan de hand van een geldige taak-id. Het URL-pad moet overeenkomen met de fase van de taak — een buildtaak die wordt opgehaald via /prototype/:id retourneert 404, en omgekeerd.

Raadpleeg Het Fidget Pixel Prototype Task-object en Het Fidget Pixel Build Task-object voor de vormen van de response.

Parameters

  • Name
    id
    Type
    path
    Description

    Unieke identifier voor de op te halen fidget pixel-taak.

Retourwaarden

De response bevat het fidget pixel-taakobject. De vorm hangt af van welke fase werd opgevraagd.

Faalmodi

  • Name
    400 - Bad Request
    Description

    id is geen geldige UUID (Invalid ID).

  • Name
    403 - Forbidden
    Description

    De afbeelding van de taak werd gemarkeerd door moderation voor intellectueel eigendom. Alleen Enterprise-accounts met filtering op intellectueel eigendom ingeschakeld worden geblokkeerd.

  • Name
    404 - Not Found
    Description

    De taak bestaat niet, behoort toe aan een andere gebruiker, of de fase komt niet overeen met het URL-pad.

  • Name
    500 - Internal Server Error
    Description

    De controle op intellectueel eigendom kon niet worden voltooid (Unable to perform intellectual property check, please try again); Enterprise-accounts met filtering op intellectueel eigendom ingeschakeld falen gesloten. Probeer het verzoek opnieuw.

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=***"
  }
}

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

Verwijder een Fidget Pixel-taak

Annuleer een fidget pixel-taak. Als de taak nog PENDING is, worden de credits die bij het aanmaken zijn verbruikt, terugbetaald. Taken die al IN_PROGRESS zijn, worden geannuleerd zonder terugbetaling (de worker verbruikt mogelijk al Bronnen). Taken die al een eindstatus hebben bereikt (SUCCEEDED, FAILED, CANCELED) kunnen niet worden geannuleerd.

Het URL-pad moet overeenkomen met de fase van de taak — DELETE op /prototype/:buildId retourneert 404.

Padparameters

  • Name
    id
    Type
    path
    Description

    Unieke identificatie voor de fidget pixel-taak die geannuleerd moet worden.

Retourneert

Retourneert 204 No Content bij succes met een lege body.

Foutmodi

  • Name
    400 - Bad Request
    Description

    Het verzoek was onaanvaardbaar. Veelvoorkomende oorzaken:

    • Ongeldige ID: id is geen geldige UUID.
    • Eindstatus: De taak is al SUCCEEDED, FAILED of CANCELED en kan niet worden geannuleerd.
  • Name
    404 - Not Found
    Description

    De taak bestaat niet, behoort toe aan een andere gebruiker, of de fase komt niet overeen met het URL-pad.

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

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

Stream een Fidget Pixel-taak

Stream realtime updates voor een fidget pixel-taak via Server-Sent Events (SSE). Het URL-pad moet overeenkomen met de fase van de taak — het openen van een stream op /prototype/:buildId/stream levert een enkele event: error payload op met status_code: 404 en sluit de stream; een onjuist gevormde id doet hetzelfde met status_code: 400 (Invalid ID).

Parameters

  • Name
    id
    Type
    path
    Description

    Unieke identifier voor de fidget pixel-taak die gestreamd moet worden.

Retourneert

Retourneert een stream van Fidget Pixel Prototype of Fidget Pixel Build taakobjecten als Server-Sent Events. Elk frame bevat het volledige taakobject voor die fase — dezelfde vorm die de Get-endpoint retourneert — dus zolang de taak PENDING of IN_PROGRESS is, zijn de outputvelden simpelweg nog niet ingevuld (null, [] of {}) en is finished_at gelijk aan null.

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=***"
  }
}

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

Fidget Pixel-taken weergeven

Haal een gepagineerde lijst op van uw fidget pixel-taken voor één enkele fase. Het URL-pad bepaalt de fase — /prototype retourneert prototype-taken; /build retourneert build-taken. Taken uit de andere fase worden in geen van beide antwoorden opgenomen.

Padparameters

  • Name
    stage
    Type
    path
    Verplicht
    Description

    Ofwel prototype of build. De collectie retourneert alleen taken waarvan de fase overeenkomt met de URL — het ophalen van /prototype retourneert nooit build-taken en vice versa.

Queryparameters

  • Name
    page_num
    Type
    integer
    standaard 1
    Description

    Paginanummer voor paginering.

  • Name
    page_size
    Type
    integer
    standaard 10
    Description

    Maximum aantal items per pagina. Maximaal toegestaan is 100 items.

  • Name
    sort_by
    Type
    string
    standaard -created_at
    Description

    Veld om op te sorteren. Beschikbare waarden:

    • +created_at: Sorteren op aanmaaktijd in oplopende volgorde.
    • -created_at: Sorteren op aanmaaktijd in aflopende volgorde.

Retourneert

Retourneert een gepagineerde lijst van het taakobject per fase — ofwel het fidget pixel prototype-taakobject bij het weergeven van /prototype of het fidget pixel build-taakobject bij het weergeven van /build.

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=***"
    ]
  }
]

Het Fidget Pixel Prototype Task-object

Het Fidget Pixel Prototype Task-object is een werkeenheid die Meshy bijhoudt om een bronfoto om te zetten in een pixel-art-afbeelding. De output van deze fase wordt via input_task_id gekoppeld aan de build-fase.

Eigenschappen

  • Name
    id
    Type
    string
    Description

    Unieke identifier voor de taak. Hoewel we een k-sorteerbare UUID gebruiken voor taak-id's als implementatiedetail, mag je geen aannames doen over de opmaak van de id.

  • Name
    type
    Type
    string
    Description

    Type van de taak. De waarde is creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    De taaknaam die is opgegeven bij het aanmaken van de taak. Lege tekenreeks als er geen naam is opgegeven.

  • Name
    status
    Type
    string
    Description

    Status van de taak. Mogelijke waarden zijn PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Voortgang van de taak. Als de taak nog niet is gestart, is deze eigenschap 0. Zodra de taak is geslaagd, wordt dit 100.

  • Name
    created_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de taak is aangemaakt, in milliseconden.

  • Name
    started_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de taak is gestart, in milliseconden. Als de taak nog niet is gestart, is deze eigenschap null.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de taak is voltooid, in milliseconden. Als de taak nog niet is voltooid, is deze eigenschap null.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer het taakresultaat verloopt, in milliseconden — 3 dagen nadat de taak is voltooid. Enterprise-accounts bewaren API-resultaten voor onbepaalde tijd (zie Asset-retentie); voor hen wordt deze tijdstempel ongeveer 100 jaar vooruit ingesteld.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Het aantal voorafgaande taken.

  • Name
    task_error
    Type
    object
    Description

    Foutdetails voor mislukte taken. Zie Fouten voor de volledige referentie van het task_error-object.

  • Name
    consumed_credits
    Type
    integer
    Description

    Het aantal credits dat door deze taak is verbruikt. Een taak die de status SUCCEEDED bereikt, wordt het volledige bedrag voor die fase in rekening gebracht. Een taak die nooit wordt aangemaakt (een 4xx bij het verzoek, inclusief een moderation-afwijzing) wordt helemaal niet in rekening gebracht. Een taak die FAILED bereikt, geeft 0 terug — het bedrag wordt terugbetaald. Annuleren via DELETE betaalt alleen terug zolang de taak nog PENDING is; een taak die al IN_PROGRESS is, blijft in rekening gebracht, omdat het werk al is uitgevoerd.

  • Name
    image_urls
    Type
    array of strings
    Description

    Downloadbare URL's voor de pixel-art-afbeelding die door deze prototypetaak is gegenereerd. Momenteel geeft de API altijd precies één afbeelding terug; het veld is een array zodat toekomstige revisies meerdere kandidaten kunnen tonen zonder een breaking change. Leeg totdat de taak de status SUCCEEDED bereikt.

    Dit zijn ondertekende URL's: haal ze op zonder een Authorization-header. Ze blijven geldig tot expires_at, dat 3 dagen na finished_at valt, en het opnieuw uitlezen van de taak binnen dat venster geeft dezelfde URL terug in plaats van een nieuw ondertekende. Download en bewaar de bestanden zelf vóór die tijd — er is geen manier om een verlopen link te vernieuwen.

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=***"
  ]
}

Het Fidget Pixel Build Task-object

Het Fidget Pixel Build Task-object is een werkeenheid die Meshy bijhoudt om de printbare onderdelen te genereren op basis van een geslaagde prototype-task. De build sampelt de pixel-art-afbeelding van het prototype op het gevraagde raster en publiceert één kleurgetagd 3MF-bestand.

Eigenschappen

  • Name
    id
    Type
    string
    Description

    Unieke identifier voor de task.

  • Name
    type
    Type
    string
    Description

    Type van de task. De waarde is creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    De taaknaam die is opgegeven bij het aanmaken van de task. Lege string als er geen naam is opgegeven.

  • Name
    status
    Type
    string
    Description

    Status van de task. Mogelijke waarden zijn PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progress van de task. Als de task nog niet is gestart, is deze eigenschap 0. Zodra de task is geslaagd, wordt dit 100.

  • Name
    created_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de task is aangemaakt, in milliseconden.

  • Name
    started_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de task is gestart, in milliseconden. null totdat de task start.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer de task is voltooid, in milliseconden. null totdat de task voltooid is.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tijdstempel van wanneer het taakresultaat verloopt, in milliseconden — 3 dagen nadat de task is voltooid. Enterprise-accounts bewaren API-resultaten onbeperkt (zie Asset-retentie); voor hen wordt deze tijdstempel ongeveer 100 jaar vooruit ingesteld.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Het aantal voorafgaande tasks. Alleen relevant wanneer de status PENDING is.

  • Name
    task_error
    Type
    object
    Description

    Foutdetails voor mislukte tasks. Zie Fouten voor de volledige referentie van het task_error-object.

  • Name
    consumed_credits
    Type
    integer
    Description

    Het aantal credits dat door deze task is verbruikt. Een task die SUCCEEDED bereikt, wordt het volledige bedrag voor die fase in rekening gebracht. Een task die nooit wordt aangemaakt (een 4xx bij het verzoek, inclusief een moderation-afwijzing) wordt helemaal niet in rekening gebracht. Een task die FAILED bereikt, geeft 0 terug — het bedrag wordt terugbetaald. Annuleren via DELETE betaalt alleen terug zolang de task nog PENDING is; een task die al IN_PROGRESS is, blijft in rekening gebracht, omdat het werk al is verricht.

  • Name
    model_urls
    Type
    object
    Description

    Downloadbare URL's voor het gegenereerde asset, gesleuteld op formaat. Bevat precies één item — het formaat dat is opgegeven via output.format van het build-verzoek. Leeg totdat de task SUCCEEDED bereikt.

    Dit zijn ondertekende URL's: haal ze op zonder een Authorization-header. Ze blijven geldig tot expires_at, wat 3 dagen na finished_at is, en het opnieuw uitlezen van de task binnen dat venster geeft dezelfde URL terug in plaats van een nieuw ondertekende. Download en bewaar de bestanden zelf vóór die tijd — er is geen manier om een verlopen link te vernieuwen.

    • Name
      3mf
      Type
      string
      Description

      Downloadbare URL naar het 3MF-bestand. Eén object per onderdeel, elk getagd met zijn paletkleur, zodat een multi-filament slicer per kleur filamenten toewijst. Aanwezig wanneer output.format 3mf was (de standaardwaarde).

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=***"
  }
}

End-to-End Example

De volledige flow: een prototype maken van een foto, dit pollen tot SUCCEEDED, er een build van maken, de build pollen tot SUCCEEDED, en vervolgens de 3MF downloaden via model_urls.

Een prototype is meestal binnen enkele minuten klaar; een build wordt doorgaans in ruim onder een minuut voltooid. In een echte integratie zou je het image_urls-item van het prototype aan de eindgebruiker tonen en deze laten bevestigen (of het prototype opnieuw laten uitvoeren) voordat credits worden besteed aan de build.

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"