lowpoly wordt op 30 okt 2026 uitgefaseerd. Stap vóór deze datums over op een ander model om fouten bij verzoeken te voorkomen. Alle afschaffingen bekijken

Creative Lab Fidget Pixel API

Verander een foto in twee stappen in een meerkleurig, 3D-printbaar pixel-art fidget-board. Een prototype-taak zet de foto om in een pixel-art-afbeelding. Een build-taak zet die afbeelding om in in elkaar grijpende onderdelen in één enkel 3MF-bestand, en gebruikt de ID van de prototype-taak als input_task_id.

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

Beide POST-endpoints vereisen een betaald abonnement. Een verzoek vanaf een gratis account retourneert 402.


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

Fidget Pixel-prototypetaak aanmaken

Genereert één pixel-art-afbeelding op basis van een foto. Om de onderdelen te bouwen, geef je de ID van deze taak door aan de build-endpoint als input_task_id. Zie voor de velden van de taak Het Fidget Pixel-prototypetaakobject.

Als de afbeelding je niet bevalt, maak dan een nieuwe prototypetaak aan. Elke taak wordt afzonderlijk in rekening gebracht.

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

Parameters

  • Name
    image_url
    Type
    string
    Verplicht
    Description

    De foto die moet worden omgezet in pixel-art, als openbare URL of als data-URI (data:image/jpeg;base64,<je base64-gecodeerde afbeeldingsgegevens>).

    De afbeelding moet een JPG-, JPEG-, PNG- of WebP-bestand van maximaal 20 MB zijn. Meshy detecteert het formaat op basis van de afbeeldingsgegevens, niet op basis van de bestandsextensie in de URL. Een URL zonder extensie werkt ook, en Meshy volgt omleidingen.

  • Name
    type
    Type
    string
    Verplicht
    Description

    Wat de foto toont, wat de pixel-art-stijl bepaalt. De twee stijlen zien er duidelijk verschillend uit. Elke andere waarde geeft 400 terug.

    Beschikbare waarden:

    • person: een persoon, op een portret- of volledige-lichaamsfoto. Meshy tekent een pixelsprite in chibi-stijl.
    • other: elk ander onderwerp, bijvoorbeeld een huisdier, een object, een mascotte, een logo of een landschap. Meshy tekent een pixelicoon in kralenkunst-stijl.
  • Name
    name
    Type
    string
    Description

    Een naam voor de taak, tot 100 tekens. Deze komt terug in het name-veld van de taak. Een langere naam geeft 400 terug.

Retourwaarden

Het veld result bevat de ID van de nieuwe prototypetaak. Haal de taak op of stream deze totdat status gelijk is aan SUCCEEDED. Geef de ID vervolgens door aan de build-endpoint als input_task_id.

Foutmodi

  • Name
    400 - Bad Request
    Description

    Het verzoek kan niet worden uitgevoerd. Bijvoorbeeld:

    • image_url of type ontbreekt.
    • type is niet person of other.
    • De afbeelding is geen JPG-, JPEG-, PNG- of WebP-bestand.
    • De afbeelding is te klein, groter dan 20 MB, of overschrijdt het maximale aantal pixels.
    • Meshy kan de afbeelding niet downloaden, bijvoorbeeld omdat de URL 404 teruggeeft of de time-out verstrijkt.
    • De data-URI is geen geldige base64.
    • De afbeelding is gemarkeerd als NSFW.

    Het foutbericht geeft aan welk probleem er is gevonden. Herstel het verzoek en verstuur het opnieuw.

  • Name
    401 - Unauthorized
    Description

    De API-sleutel ontbreekt of is ongeldig. Controleer de Authorization-header.

  • Name
    402 - Payment Required
    Description

    Een van de volgende situaties doet zich voor:

    • Het account heeft niet genoeg credits.
    • De API-sleutel, werkruimte of het lid heeft het creditlimiet bereikt.
    • Het account gebruikt het gratis abonnement.

    Controleer je credits en abonnement, en probeer het opnieuw.

  • Name
    403 - Forbidden
    Description

    Je team heeft IP-filtering ingeschakeld, en Meshy heeft de afbeelding gemarkeerd vanwege intellectueel eigendom van derden. Stuur een afbeelding waarvoor je gebruiksrechten hebt.

  • Name
    429 - Too Many Requests
    Description

    Een van deze limieten is bereikt:

    • Je hebt meer verzoeken verstuurd dan je rate limit toestaat. Wacht een paar seconden en probeer het opnieuw. Zie Rate limits.
    • Er staan te veel van je taken in de wachtrij of lopen er al te veel. Wacht tot een aantal zijn afgerond en probeer het opnieuw.
    • Bij een onbeperkt abonnement zonder resterende credits heb je het aantal taken bereikt dat zonder credits kan worden uitgevoerd. Wacht tot een taak is afgerond, of voeg credits toe.
  • Name
    500 - Internal Server Error
    Description

    Meshy is op een serverfout gestuit, bijvoorbeeld omdat de controle op intellectueel eigendom van de afbeelding niet kon worden uitgevoerd. Meshy maakt de taak niet aan en betaalt eventueel in rekening gebrachte credits terug. Probeer het verzoek opnieuw.


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

Een Fidget Pixel build-taak aanmaken

Genereert de 3D-printbare onderdelen op basis van een geslaagde prototype-taak. Meshy bemonstert de pixel-art-afbeelding op het raster en reduceert deze tot maximaal color_count kleuren. Elke cel van het onderwerp wordt een in elkaar grijpend onderdeel, en de achtergrond wordt niet geprint.

Het resultaat is één enkel multicolor 3MF-bestand, klaar om in kleur te printen. Elk onderdeel heeft een grijs lichaam en een bovenkant in de kleur van zijn pixel. Voor de velden ervan, zie Het Fidget Pixel build-taakobject.

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

Parameters

  • Name
    input_task_id
    Type
    string
    Verplicht
    Description

    De ID van de prototype-taak om te builden. Het moet een taak zijn die uw account heeft aangemaakt met POST /openapi/creative-lab/fidget-pixel/v1/prototype, met de status SUCCEEDED.

    Een ID die niet een van uw Fidget Pixel prototype-taken via de API is, geeft 404 terug, inclusief een prototype gemaakt in de web-app.

  • Name
    name
    Type
    string
    Description

    Een naam voor de taak, tot 100 tekens. Deze komt terug in het name-veld van de taak. Een langere naam geeft 400 terug.

options

Instellingen voor de vorm en grootte van de onderdelen. Elk veld heeft een standaardwaarde, dus stuur alleen de velden die u wilt wijzigen. Een 0 gebruikt de standaardwaarde van het veld. Dit zijn dezelfde instellingen als in de Creative Lab web-app. Andere vorminstellingen liggen vast, en Meshy stelt ze in op basis van shape en piece_size_mm.

  • Name
    shape
    Type
    string
    standaard square
    Description

    De voetafdruk van elk onderdeel. Elke andere waarde geeft 400 terug.

    Beschikbare waarden:

    • square: vierkante onderdelen op een vierkant raster
    • hex: zeshoekige onderdelen op een zeshoekig raster, met piece_size_mm ingesteld op 6 of 8
  • Name
    grid_size
    Type
    integer
    standaard 32
    Description

    Het aantal rastercellen langs elke zijde van het bord, 16 of 32. Elke andere waarde geeft 400 terug. Een 32-raster behoudt meer detail. Een 16-raster geeft minder onderdelen van dezelfde grootte, waardoor het bord ongeveer half zo breed is.

  • Name
    piece_size_mm
    Type
    integer
    standaard 8
    Description

    De randlengte van elk onderdeel in millimeter, 6, 8, of 10. Elke andere waarde geeft 400 terug. Samen met grid_size bepaalt dit de grootte van het geprinte bord. Bijvoorbeeld, een 32-raster met onderdelen van 8 mm is ongeveer 26,5 cm per zijde.

    10 werkt niet met hex en geeft 400 terug, omdat het schuine zeshoeksvlak bij de meeste consumenten-FDM-printers overhangt.

  • Name
    color_count
    Type
    integer
    standaard 8
    Description

    Het maximale aantal kleuren in het pixel-art-palet, van 1 tot 8. Een waarde buiten het bereik geeft 400 terug. Om te printen heeft u tot color_count plus één filament nodig, één per kleur en één voor de grijze lichamen.

  • Name
    piece_height_mm
    Type
    integer
    standaard 15
    Description

    De hoogte van elk onderdeel in millimeter, van 10 tot 80. Een waarde buiten het bereik geeft 400 terug.

output

Instellingen voor het resultaatbestand.

  • Name
    format
    Type
    string
    standaard 3mf
    Description

    Het bestandsformaat van het resultaat. Elke andere waarde geeft 400 terug.

    Beschikbare waarden:

    • 3mf: één multicolor model.3mf-bestand, teruggegeven in model_urls.3mf

Retourwaarden

Het result-veld bevat de ID van de nieuwe build-taak. Haal de taak op of stream deze totdat status SUCCEEDED is. Download vervolgens het 3MF-bestand via model_urls.3mf.

Foutmodi

  • Name
    400 - Bad Request
    Description

    Het verzoek kan niet worden uitgevoerd. Bijvoorbeeld:

    • input_task_id ontbreekt of is geen geldige taak-ID.
    • De status van de prototype-taak is niet SUCCEEDED. Als deze nog loopt, wacht en probeer het opnieuw. Als deze is mislukt of geannuleerd, maak dan een nieuwe prototype-taak aan.
    • De prototype-taak is geslaagd, maar heeft geen afbeelding. Maak een nieuwe prototype-taak aan.
    • Een options-veld valt buiten de toegestane waarden, bijvoorbeeld een grid_size anders dan 16 of 32.
    • piece_size_mm is 10 en shape is hex. Zeshoekige onderdelen zijn alleen beschikbaar in 6 en 8 mm.
    • output.format is niet 3mf.

    Het foutbericht geeft aan welk probleem er is gevonden.

  • Name
    401 - Unauthorized
    Description

    De API-sleutel ontbreekt of is ongeldig. Controleer de Authorization-header.

  • Name
    402 - Payment Required
    Description

    Een van het volgende is van toepassing:

    • Het account heeft onvoldoende credits.
    • De API-sleutel, werkruimte of het lid heeft zijn creditlimiet bereikt.
    • Het account heeft een gratis abonnement.

    Controleer uw credits en abonnement en probeer het opnieuw.

  • Name
    403 - Forbidden
    Description

    Uw team heeft IP Filtering ingeschakeld, en Meshy heeft de afbeelding van de prototype-taak gemarkeerd wegens intellectueel eigendom van derden. Maak een prototype-taak aan vanuit een afbeelding waarvoor u de rechten heeft.

  • Name
    404 - Not Found
    Description

    input_task_id komt niet overeen met een Fidget Pixel prototype-taak die uw account via de API heeft aangemaakt. Een prototype gemaakt in de web-app geeft ook 404 terug. Stuur de result-ID uit een prototype-aanmaakrespons.

  • Name
    429 - Too Many Requests
    Description

    Een van deze limieten is bereikt:

    • U hebt meer verzoeken verstuurd dan uw rate limit toestaat. Wacht een paar seconden en probeer het opnieuw. Zie Rate limits.
    • Er staan te veel van uw taken in de wachtrij of lopen te veel. Wacht tot er een aantal zijn voltooid en probeer het opnieuw.
    • Bij een onbeperkt abonnement zonder resterende credits heeft u het aantal taken bereikt dat zonder credits kan draaien. Wacht tot een taak is voltooid, of voeg credits toe.
  • Name
    500 - Internal Server Error
    Description

    Meshy is op een serverfout gestuit, bijvoorbeeld omdat de controle op intellectueel eigendom op de afbeelding van de prototype-taak niet kon worden uitgevoerd. Meshy maakt de taak niet aan en vergoedt eventuele in rekening gebrachte credits. Probeer het verzoek opnieuw.


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

Een Fidget Pixel-taak ophalen

Retourneert een prototype- of build-taak. Het pad moet overeenkomen met de fase van de taak. Een build-taak die via /prototype/:id wordt opgevraagd, geeft 404 terug, en hetzelfde geldt voor een prototype-taak die via /build/:id wordt opgevraagd.

Zie voor de velden Het Fidget Pixel prototype-taakobject en Het Fidget Pixel build-taakobject.

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

Parameters

  • Name
    id
    Type
    path
    Description

    De taak-ID uit het aanmaakantwoord.

Retourneert

Het prototype-taakobject of het build-taakobject, overeenkomstig de fase in het pad.

Foutmodi

  • Name
    400 - Bad Request
    Description

    id is geen geldige taak-ID. Stuur de result-ID uit het aanmaakantwoord.

  • Name
    403 - Forbidden
    Description

    Uw team heeft IP Filtering ingeschakeld, en Meshy heeft de afbeelding van de prototype-taak gemarkeerd wegens intellectueel eigendom van derden. Build-taken en teams in het Enterprise-plan krijgen deze foutmelding niet. Maak een prototype-taak aan met een afbeelding waarvoor u de gebruiksrechten heeft.

  • Name
    404 - Not Found
    Description

    Er bestaat geen Fidget Pixel-taak met deze ID voor uw account, of de fase van de taak komt niet overeen met het pad. Controleer de ID en gebruik /prototype of /build om overeen te komen met de taak.

  • Name
    500 - Internal Server Error
    Description

    Meshy kon de controle op intellectueel eigendom niet uitvoeren. Probeer het verzoek opnieuw.


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

Delete a Fidget Pixel task

Annuleert een Fidget Pixel-taak. Het annuleren van een PENDING-taak restitueert de credits ervan. Een IN_PROGRESS-taak wordt geannuleerd zonder restitutie, omdat een worker er al mee is begonnen. Een taak met een definitieve status (SUCCEEDED, FAILED of CANCELED) kan niet worden geannuleerd.

Het pad moet overeenkomen met de fase van de taak. Bijvoorbeeld, DELETE op /prototype/:id met de ID van een build-taak geeft 404 terug.

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

Pad-parameters

  • Name
    id
    Type
    path
    Description

    De ID van de taak die moet worden geannuleerd.

Retourneert

204 No Content met een lege body.

Faalmodi

  • Name
    400 - Bad Request
    Description

    Een van het volgende is van toepassing:

    • id is geen geldige taak-ID. Stuur de result-ID uit de create-respons.
    • De taak heeft al een definitieve status (SUCCEEDED, FAILED of CANCELED), dus kan niet worden geannuleerd.
  • Name
    404 - Not Found
    Description

    Er bestaat geen Fidget Pixel-taak met deze ID die bij uw account hoort, of de fase van de taak komt niet overeen met het pad. Controleer de ID en gebruik /prototype of /build om overeen te komen met de taak.


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

Een Fidget Pixel-taak streamen

Streamt de updates van een Fidget Pixel-taak als Server-Sent Events (SSE). Het pad moet overeenkomen met de fase van de taak. Zo niet, bijvoorbeeld de ID van een build-taak op /prototype/:id/stream, dan stuurt de stream één error-event met status_code: 404 en wordt deze gesloten. Een id die geen geldige taak-ID is, doet hetzelfde met 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=***"
  }
}

Parameters

  • Name
    id
    Type
    path
    Description

    De taak-ID uit het antwoord van het aanmaken.

Retourwaarden

Een stream van prototype- of build-taakobjecten. Elke event bevat het volledige taakobject, zoals Een Fidget Pixel-taak ophalen dit retourneert. Zolang de taak PENDING of IN_PROGRESS is, zijn de uitvoervelden nog leeg (null, [] of {}), en is finished_at null.

Als IP-filtering het resultaat van de taak blokkeert, stuurt de stream in plaats daarvan één error-event, met de status_code die een get-verzoek zou retourneren.


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

Fidget Pixel-taken opvragen

Geeft uw Fidget Pixel-taken van één fase terug, één pagina per keer. Het pad bepaalt de fase. /prototype geeft alleen prototype-taken terug, en /build geeft alleen build-taken terug.

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

Padparameters

  • Name
    stage
    Type
    path
    Verplicht
    Description

    De op te vragen fase, prototype of build.

Queryparameters

  • Name
    page_num
    Type
    integer
    standaard 1
    Description

    De terug te geven pagina, van 1 tot 255. 0 geeft de eerste pagina terug. Een waarde buiten 0 tot 255 geeft 400 terug.

  • Name
    page_size
    Type
    integer
    standaard 10
    Description

    Aantal taken per pagina, tot 100. Een waarde van 101 tot 255 geeft 100 taken terug, en 0 gebruikt de standaardwaarde. Een waarde buiten 0 tot 255 geeft 400 terug.

  • Name
    sort_by
    Type
    string
    standaard -created_at
    Description

    De sorteervolgorde.

    Beschikbare waarden:

    • -created_at: nieuwste eerst
    • +created_at: oudste eerst

Retourwaarden

Een array van prototype-taakobjecten of build-taakobjecten, overeenkomend met de fase in het pad.


Het Fidget Pixel prototype-taakobject

Een prototype-taak zet een foto om in een pixel-art-afbeelding. Om de afbeelding om te zetten in 3D-printbare onderdelen, geef je de ID van de taak door aan de build-endpoint als input_task_id.

Eigenschappen

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

    De taak-ID. Vertrouw niet op het formaat ervan.

  • Name
    type
    Type
    string
    Description

    Het taaktype, altijd creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    De name die je hebt meegestuurd bij het aanmaken van de taak, of "" als je er geen hebt meegestuurd.

  • Name
    status
    Type
    string
    Description

    De status van de taak.

    Beschikbare waarden:

    • PENDING: wacht in de wachtrij
    • IN_PROGRESS: resultaat wordt gegenereerd
    • SUCCEEDED: definitief, met het resultaat
    • FAILED: definitief, met de reden in task_error
    • CANCELED: definitief, zonder resultaat
  • Name
    progress
    Type
    integer
    Description

    Percentage van het voltooide werk, van 0 tot 100. Dit is 0 totdat de taak start en 100 wanneer deze slaagt.

  • Name
    created_at
    Type
    timestamp
    Description

    Tijdstip waarop de taak werd aangemaakt, in Unix-milliseconden.

  • Name
    started_at
    Type
    timestamp
    Description

    Tijdstip waarop een worker de taak startte, in Unix-milliseconden. null tot dan.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tijdstip waarop de taak een definitieve status bereikte, in Unix-milliseconden. null tot dan.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tijdstip waarop het resultaat van de taak verloopt, in Unix-milliseconden. Dit is 3 dagen na finished_at, of 3 dagen na created_at totdat de taak voltooid is. Voor Enterprise-accounts, die API-resultaten onbeperkt bewaren, is dit ongeveer 100 jaar later. Zie Asset-retentie.

  • Name
    preceding_tasks
    Type
    integer
    Description

    De positie van de taak in de wachtrij terwijl deze PENDING is. 1 betekent dat deze als volgende start. 0 nadat de taak de wachtrij verlaat, en altijd 0 in lijstresultaten.

  • Name
    task_error
    Type
    object
    Description

    Waarom de taak is mislukt. null tenzij status gelijk is aan FAILED. Zie Fouten.

  • Name
    consumed_credits
    Type
    integer
    Description

    Aantal credits dat voor de taak in rekening is gebracht, na eventuele terugbetaling. Een verzoek dat een fout retourneert, wordt niet in rekening gebracht. Een mislukte taak is 0, omdat Meshy deze terugbetaalt. Annuleren betaalt een taak alleen terug terwijl deze PENDING is. Als Meshy de kosten niet kan uitlezen, laat een get- of streamrespons het veld weg, en retourneert een lijstverzoek 500. Probeer het verzoek in dat geval opnieuw.

  • Name
    image_urls
    Type
    array of strings
    Description

    Download-URL's voor de pixel-art-afbeelding. De array bevat één URL nadat de taak is geslaagd, en is leeg tot dan.

    De URL's zijn ondertekend, dus haal ze op zonder een Authorization-header. Ze blijven geldig tot expires_at. De taak opnieuw ophalen vóór die tijd levert dezelfde URL's op, niet opnieuw ondertekende. Een verlopen URL kan niet worden vernieuwd, dus download en bewaar de bestanden vóór die tijd.


Het Fidget Pixel build-taakobject

Een build-taak genereert de 3D-printbare onderdelen uit een geslaagde prototype-taak. Meshy bemonstert de pixelart-afbeelding op het raster en retourneert de onderdelen in één enkel multi-color 3MF-bestand.

Eigenschappen

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

    De taak-ID. Vertrouw niet op het formaat ervan.

  • Name
    type
    Type
    string
    Description

    Het taaktype, altijd creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    De name die je hebt meegestuurd toen je de taak hebt aangemaakt, of "" als je er geen hebt meegestuurd.

  • Name
    status
    Type
    string
    Description

    De status van de taak.

    Beschikbare waarden:

    • PENDING: wacht in de wachtrij
    • IN_PROGRESS: genereert het resultaat
    • SUCCEEDED: definitief, met het resultaat
    • FAILED: definitief, met de reden in task_error
    • CANCELED: definitief, zonder resultaat
  • Name
    progress
    Type
    integer
    Description

    Percentage van het voltooide werk, van 0 tot 100. Dit is 0 totdat de taak begint en 100 wanneer deze slaagt.

  • Name
    created_at
    Type
    timestamp
    Description

    Tijdstip waarop de taak is aangemaakt, in Unix-milliseconden.

  • Name
    started_at
    Type
    timestamp
    Description

    Tijdstip waarop een worker de taak heeft gestart, in Unix-milliseconden. null tot dat moment.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tijdstip waarop de taak een definitieve status heeft bereikt, in Unix-milliseconden. null tot dat moment.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tijdstip waarop het resultaat van de taak verloopt, in Unix-milliseconden. Dit is 3 dagen na finished_at, of 3 dagen na created_at totdat de taak voltooid is. Voor Enterprise-accounts, die API-resultaten onbeperkt bewaren, is dit ongeveer 100 jaar later. Zie Asset-retentie.

  • Name
    preceding_tasks
    Type
    integer
    Description

    De positie van de taak in de wachtrij terwijl deze PENDING is. 1 betekent dat deze als volgende start. 0 nadat de taak de wachtrij verlaat, en altijd 0 in lijstresultaten.

  • Name
    task_error
    Type
    object
    Description

    Waarom de taak is mislukt. null tenzij status gelijk is aan FAILED. Zie Fouten.

  • Name
    consumed_credits
    Type
    integer
    Description

    Aantal credits dat voor de taak in rekening is gebracht, na eventuele terugbetaling. Voor een verzoek dat een fout retourneert, worden geen kosten in rekening gebracht. Een mislukte taak is 0, omdat Meshy deze terugbetaalt. Annuleren betaalt een taak alleen terug terwijl deze PENDING is. Als Meshy de kosten niet kan uitlezen, laat een get- of streamrespons het veld weg, en retourneert een lijstverzoek 500. Probeer het verzoek in dat geval opnieuw.

  • Name
    model_urls
    Type
    object
    Description

    Download-URL's voor het resultaat, gesleuteld op bestandsformaat. Het object heeft één item, voor de output.format die je hebt meegestuurd, en is leeg totdat de taak slaagt.

    De URL's zijn ondertekend, dus haal ze op zonder een Authorization-header. Ze blijven geldig tot expires_at. Als je de taak vóór dat moment opnieuw ophaalt, krijg je dezelfde URL's terug, geen nieuw ondertekende. Een verlopen URL kan niet worden vernieuwd, dus download en bewaar de bestanden ervoor.

    • Name
      3mf
      Type
      string
      Description

      Download-URL voor het multi-color 3MF-bestand. Elk onderdeel heeft een grijs lichaam en een bovenkant in de kleur van zijn pixel. Aanwezig wanneer output.format gelijk is aan 3mf, wat de standaardwaarde is.


End-to-end voorbeeld

De volgende cURL- en Python-scripts voeren de volledige flow uit. Elk script maakt een prototype-taak aan op basis van een foto en wacht tot deze slaagt. Vervolgens maakt het een build-taak aan, wacht op die taak en downloadt het 3MF-bestand van model_urls.3mf.

Het cURL-script heeft curl en jq nodig, en het Python-script heeft het pakket requests nodig. Volg deze stappen om een script uit te voeren:

  1. Stel MESHY_API_KEY in op uw API-sleutel.
  2. Stel IMAGE_PATH in op het pad van een lokale foto, of IMAGE_URL op een openbare afbeeldings-URL.
  3. Optioneel: om een ander onderwerp dan een persoon te pixeliseren, stelt u PIXEL_TYPE in op other.
  4. Voer het script uit.

Een prototype-taak is meestal binnen enkele minuten voltooid. Een build-taak is meestal ruim binnen een minuut voltooid.

Toon in uw app de afbeelding uit image_urls aan uw gebruiker voordat u de build-taak aanmaakt. Als ze deze niet mooi vinden, maak dan in plaats daarvan een nieuwe prototype-taak aan. Op deze manier besteedt u build-credits alleen aan een afbeelding die zij goedkeuren.

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"