lowpoly avvecklas den 30 okt. 2026. Byt modell före dessa datum för att undvika fel i förfrågningar. Se alla utfasningar

Creative Lab Fidget Pixel API

Förvandla ett foto till en flerfärgad, 3D-utskrivbar pixelkonst-fidgetbräda i två steg. En prototypuppgift förvandlar fotot till en pixelkonstbild. En bygguppgift förvandlar den bilden till sammanlänkande delar i en enda 3MF-fil, och tar prototypuppgiftens ID som input_task_id.

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

Båda POST-endpointerna kräver en betalplan. En förfrågan från ett konto med gratisplan returnerar 402.


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

Skapa en Fidget Pixel-prototypuppgift

Genererar en pixelkonstbild från ett foto. För att bygga delarna skickar du den här uppgiftens ID till build-endpointen som input_task_id. För uppgiftens fält, se The Fidget Pixel prototype task object.

Om du inte gillar bilden kan du skapa en ny prototypuppgift. Varje uppgift debiteras separat.

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

Parametrar

  • Name
    image_url
    Type
    string
    Obligatorisk
    Description

    Fotot som ska omvandlas till pixelkonst, som en offentlig URL eller en data-URI (data:image/jpeg;base64,<dina base64-kodade bilddata>).

    Bilden måste vara en JPG-, JPEG-, PNG- eller WebP-fil på högst 20 MB. Meshy identifierar formatet utifrån bilddata, inte utifrån filändelsen i URL:en. En URL utan filändelse fungerar, och Meshy följer omdirigeringar.

  • Name
    type
    Type
    string
    Obligatorisk
    Description

    Vad fotot visar, vilket avgör pixelkonststilen. De två stilarna ser tydligt olika ut. Alla andra värden returnerar 400.

    Tillgängliga värden:

    • person: en person, på ett porträtt eller helkroppsfoto. Meshy ritar en pixelfigur i chibi-stil.
    • other: alla andra motiv, till exempel ett husdjur, ett föremål, en maskot, en logotyp eller ett landskap. Meshy ritar en pixelikon i pärlkonststil.
  • Name
    name
    Type
    string
    Description

    Ett namn för uppgiften, upp till 100 tecken. Det returneras i uppgiftens fält name. Ett längre namn returnerar 400.

Returvärden

Fältet result innehåller ID:t för den nya prototypuppgiften. Hämta uppgiften eller strömma den tills status är SUCCEEDED. Skicka sedan ID:t till build-endpointen som input_task_id.

Felscenarier

  • Name
    400 - Bad Request
    Description

    Begäran kan inte köras. Till exempel:

    • image_url eller type saknas.
    • type är varken person eller other.
    • Bilden är inte en JPG-, JPEG-, PNG- eller WebP-fil.
    • Bilden är för liten, över 20 MB, eller över det maximala antalet pixlar.
    • Meshy kan inte ladda ner bilden, till exempel för att URL:en returnerar 404 eller tidsgränsen löper ut.
    • Data-URI:n är inte giltig base64.
    • Bilden flaggades som olämplig (NSFW).

    Felmeddelandet anger vilket problem som hittades. Åtgärda begäran och skicka den igen.

  • Name
    401 - Unauthorized
    Description

    API-nyckeln saknas eller är ogiltig. Kontrollera Authorization-huvudet.

  • Name
    402 - Payment Required
    Description

    Något av följande gäller:

    • Kontot har inte tillräckligt med credits.
    • API-nyckeln, arbetsytan eller medlemmen har nått sin creditgräns.
    • Kontot använder den kostnadsfria planen.

    Kontrollera dina credits och din plan och försök sedan igen.

  • Name
    403 - Forbidden
    Description

    Ditt team har IP Filtering aktiverat, och Meshy har flaggat bilden för tredjepartsrättigheter. Skicka en bild som du har rätt att använda.

  • Name
    429 - Too Many Requests
    Description

    En av följande gränser har nåtts:

    • Du har skickat fler förfrågningar än vad din hastighetsgräns tillåter. Vänta några sekunder och försök sedan igen. Se Rate limits.
    • För många av dina uppgifter är köade eller pågående. Vänta tills några är klara och försök sedan igen.
    • På en plan utan gräns men utan kvarvarande credits har du nått det antal uppgifter som kan köras utan credits. Vänta tills en uppgift är klar, eller lägg till credits.
  • Name
    500 - Internal Server Error
    Description

    Meshy stötte på ett serverfel, till exempel för att det inte kunde köra kontrollen av immateriella rättigheter på bilden. Meshy skapar inte uppgiften och återbetalar eventuella credits som debiterats. Försök igen med begäran.


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

Skapa en Fidget Pixel-byggnadsuppgift

Genererar de 3D-utskrivbara delarna från en lyckad prototyp-uppgift. Meshy samplar pixelbilden på rutnätet och reducerar den till högst color_count färger. Varje cell i motivet blir en sammanfogande bit, och bakgrunden skrivs inte ut.

Resultatet är en enda flerfärgad 3MF-fil, redo att skrivas ut i färg. Varje bit har en grå kropp och en topp i sin pixels färg. För dess fält, se The Fidget Pixel build task object.

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

Parametrar

  • Name
    input_task_id
    Type
    string
    Obligatorisk
    Description

    ID:t för prototyp-uppgiften som ska byggas. Det måste vara en uppgift som ditt konto skapade med POST /openapi/creative-lab/fidget-pixel/v1/prototype, med statusen SUCCEEDED.

    Ett ID som inte är en av dina Fidget Pixel-prototypuppgifter från API:et returnerar 404, inklusive en prototyp gjord i webbappen.

  • Name
    name
    Type
    string
    Description

    Ett namn för uppgiften, upp till 100 tecken. Det kommer tillbaka i uppgiftens name-fält. Ett längre namn returnerar 400.

options

Inställningar för formen och storleken på bitarna. Varje fält har ett standardvärde, så skicka bara de fält du vill ändra. En 0 använder fältets standardvärde. Dessa är samma inställningar som i Creative Lab-webbappen. Andra forminställningar är fasta, och Meshy ställer in dem utifrån shape och piece_size_mm.

  • Name
    shape
    Type
    string
    standard square
    Description

    Avtrycket för varje bit. Alla andra värden returnerar 400.

    Tillgängliga värden:

    • square: fyrkantiga bitar på ett fyrkantigt rutnät
    • hex: hexagonala bitar på ett hexagonalt rutnät, med piece_size_mm satt till 6 eller 8
  • Name
    grid_size
    Type
    integer
    standard 32
    Description

    Antalet rutnätsceller längs varje sida av brädet, 16 eller 32. Alla andra värden returnerar 400. Ett 32-rutnät behåller mer detalj. Ett 16-rutnät ger färre bitar av samma storlek, så brädet blir ungefär hälften så brett.

  • Name
    piece_size_mm
    Type
    integer
    standard 8
    Description

    Kantlängden för varje bit i millimeter, 6, 8 eller 10. Alla andra värden returnerar 400. Tillsammans med grid_size bestämmer det storleken på det utskrivna brädet. Till exempel är ett 32-rutnät med 8 mm-bitar ungefär 26,5 cm per sida.

    10 fungerar inte med hex och returnerar 400, eftersom den sneda hexagonala ytan hänger ut på de flesta konsumentens FDM-skrivare.

  • Name
    color_count
    Type
    integer
    standard 8
    Description

    Det maximala antalet färger i pixelbildspaletten, från 1 till 8. Ett värde utanför intervallet returnerar 400. För att skriva ut behöver du upp till color_count plus ett filament, ett per färg och ett för de grå kropparna.

  • Name
    piece_height_mm
    Type
    integer
    standard 15
    Description

    Höjden på varje bit i millimeter, från 10 till 80. Ett värde utanför intervallet returnerar 400.

output

Inställningar för resultatfilen.

  • Name
    format
    Type
    string
    standard 3mf
    Description

    Filformatet för resultatet. Alla andra värden returnerar 400.

    Tillgängliga värden:

    • 3mf: en flerfärgad model.3mf-fil, returneras i model_urls.3mf

Returnerar

Fältet result innehåller ID:t för den nya byggnadsuppgiften. Hämta uppgiften eller strömma den tills status är SUCCEEDED. Ladda sedan ner 3MF-filen från model_urls.3mf.

Felscenarion

  • Name
    400 - Bad Request
    Description

    Begäran kan inte köras. Till exempel:

    • input_task_id saknas eller är inte ett giltigt uppgifts-ID.
    • Prototyp-uppgiftens status är inte SUCCEEDED. Om den fortfarande körs, vänta och försök igen. Om den misslyckades eller avbröts, skapa en ny prototyp-uppgift.
    • Prototyp-uppgiften lyckades men saknar bild. Skapa en ny prototyp-uppgift.
    • Ett options-fält ligger utanför sina tillåtna värden, till exempel ett grid_size som inte är 16 eller 32.
    • piece_size_mm är 10 och shape är hex. Hexagonala bitar finns bara i 6 och 8 mm.
    • output.format är inte 3mf.

    Felmeddelandet anger vilket problem det hittade.

  • Name
    401 - Unauthorized
    Description

    API-nyckeln saknas eller är ogiltig. Kontrollera Authorization-huvudet.

  • Name
    402 - Payment Required
    Description

    Något av följande gäller:

    • Kontot har inte tillräckligt med credits.
    • API-nyckeln, arbetsytan eller medlemmen nådde sin credit-gräns.
    • Kontot har den kostnadsfria planen.

    Kontrollera dina credits och din plan, och försök sedan igen.

  • Name
    403 - Forbidden
    Description

    Ditt team har IP Filtering aktiverat, och Meshy flaggade prototyp-uppgiftens bild för tredjepartsimmateriell egendom. Skapa en prototyp-uppgift från en bild du har rättigheter att använda.

  • Name
    404 - Not Found
    Description

    input_task_id matchar ingen Fidget Pixel-prototypuppgift som ditt konto skapat med API:et. En prototyp gjord i webbappen returnerar också 404. Skicka result-ID:t från ett svar på skapandet av en prototyp.

  • Name
    429 - Too Many Requests
    Description

    En av dessa gränser nåddes:

    • Du skickade fler förfrågningar än din hastighetsgräns tillåter. Vänta några sekunder och försök igen. Se Rate limits.
    • För många av dina uppgifter är köade eller körs. Vänta tills några är klara och försök sedan igen.
    • På en obegränsad plan utan credits kvar nådde du antalet uppgifter som kan köras utan credits. Vänta tills en uppgift är klar, eller lägg till credits.
  • Name
    500 - Internal Server Error
    Description

    Meshy stötte på ett serverfel, till exempel för att det inte kunde köra immaterialrättskontrollen på prototyp-uppgiftens bild. Meshy skapar inte uppgiften, och återbetalar eventuella credits den debiterade. Försök med begäran igen.


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

Hämta en Fidget Pixel-uppgift

Returnerar en prototyp- eller bygguppgift. Sökvägen måste matcha uppgiftens steg. En bygguppgift som efterfrågas via /prototype/:id returnerar 404, och detsamma gäller en prototypuppgift som efterfrågas via /build/:id.

För fälten, se Fidget Pixel-prototypuppgiftsobjektet och Fidget Pixel-byggguppgiftsobjektet.

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

Parametrar

  • Name
    id
    Type
    path
    Description

    Uppgifts-ID:t från skapandesvaret.

Returnerar

Prototypuppgiftsobjektet eller byggguppgiftsobjektet, beroende på steget i sökvägen.

Felscenarier

  • Name
    400 - Bad Request
    Description

    id är inte ett giltigt uppgifts-ID. Skicka result-ID:t från skapandesvaret.

  • Name
    403 - Forbidden
    Description

    Ditt team har IP-filtrering aktiverat, och Meshy flaggade prototypuppgiftens bild för immateriella rättigheter som tillhör tredje part. Byggguppgifter och team på Enterprise-planen får inte detta fel. Skapa en prototypuppgift från en bild du har rättigheter att använda.

  • Name
    404 - Not Found
    Description

    Ingen Fidget Pixel-uppgift med detta ID tillhör ditt konto, eller så matchar inte uppgiftens steg sökvägen. Kontrollera ID:t, och använd /prototype eller /build för att matcha uppgiften.

  • Name
    500 - Internal Server Error
    Description

    Meshy kunde inte köra kontrollen av immateriella rättigheter. Försök igen med förfrågan.


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

Ta bort en Fidget Pixel-uppgift

Avbryter en Fidget Pixel-uppgift. Att avbryta en PENDING-uppgift återbetalar dess credits. En IN_PROGRESS-uppgift avbryts utan återbetalning, eftersom en arbetare redan har påbörjat den. En uppgift med en slutgiltig status (SUCCEEDED, FAILED eller CANCELED) kan inte avbrytas.

Sökvägen måste matcha uppgiftens steg. Till exempel returnerar DELETE på /prototype/:id med ett bygguppgifts-ID 404.

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

Sökvägsparametrar

  • Name
    id
    Type
    path
    Description

    ID:t för uppgiften som ska avbrytas.

Returnerar

204 No Content med en tom kropp.

Felscenarier

  • Name
    400 - Bad Request
    Description

    Ett av följande gäller:

    • id är inte ett giltigt uppgifts-ID. Skicka result-ID:t från skapandesvaret.
    • Uppgiften har redan en slutgiltig status (SUCCEEDED, FAILED eller CANCELED), så den kan inte avbrytas.
  • Name
    404 - Not Found
    Description

    Ingen Fidget Pixel-uppgift med detta ID tillhör ditt konto, eller så matchar inte uppgiftens steg sökvägen. Kontrollera ID:t och använd /prototype eller /build för att matcha uppgiften.


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

Strömma en Fidget Pixel-uppgift

Strömmar uppdateringar för en Fidget Pixel-uppgift som Server-Sent Events (SSE). Sökvägen måste matcha uppgiftens steg. Om den inte gör det, till exempel en build-uppgifts ID på /prototype/:id/stream, skickar strömmen en error-händelse med status_code: 404 och stängs. Ett id som inte är ett giltigt uppgifts-ID gör samma sak med 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=***"
  }
}

Parametrar

  • Name
    id
    Type
    path
    Description

    Uppgifts-ID från skapandesvaret.

Returnerar

En ström av prototype- eller build-uppgiftsobjekt. Varje händelse innehåller det fullständiga uppgiftsobjektet, så som Hämta en Fidget Pixel-uppgift returnerar det. Medan uppgiften är PENDING eller IN_PROGRESS är dess utdatafält fortfarande tomma (null, [] eller {}), och finished_at är null.

Om IP-filtrering blockerar uppgiftens resultat skickar strömmen istället en error-händelse, med den status_code som ett get-anrop skulle returnera.


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

Lista Fidget Pixel-uppgifter

Returnerar dina Fidget Pixel-uppgifter för ett stadium, en sida i taget. Sökvägen väljer stadiet. /prototype returnerar endast prototyp-uppgifter, och /build returnerar endast build-uppgifter.

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

Sökvägsparametrar

  • Name
    stage
    Type
    path
    Obligatorisk
    Description

    Stadiet som ska listas, prototype eller build.

Frågeparametrar

  • Name
    page_num
    Type
    integer
    standard 1
    Description

    Sidan som ska returneras, från 1 till 255. 0 returnerar den första sidan. Ett värde utanför 0 till 255 returnerar 400.

  • Name
    page_size
    Type
    integer
    standard 10
    Description

    Antal uppgifter per sida, upp till 100. Ett värde från 101 till 255 returnerar 100 uppgifter, och 0 använder standardvärdet. Ett värde utanför 0 till 255 returnerar 400.

  • Name
    sort_by
    Type
    string
    standard -created_at
    Description

    Sorteringsordningen.

    Tillgängliga värden:

    • -created_at: nyaste först
    • +created_at: äldsta först

Returnerar

En array med prototyp-uppgiftsobjekt eller build-uppgiftsobjekt, som matchar stadiet i sökvägen.


Fidget Pixel-prototyptaskobjektet

En prototyptask omvandlar ett foto till en pixelkonstbild. För att omvandla bilden till 3D-utskrivbara delar skickar du taskens ID till build-endpointen som input_task_id.

Egenskaper

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

    Task-ID:t. Förlita dig inte på dess format.

  • Name
    type
    Type
    string
    Description

    Tasktypen, alltid creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    Det name du skickade när du skapade tasken, eller "" om du inte skickade något.

  • Name
    status
    Type
    string
    Description

    Taskens status.

    Tillgängliga värden:

    • PENDING: väntar i kön
    • IN_PROGRESS: genererar resultatet
    • SUCCEEDED: slutgiltig, med resultatet
    • FAILED: slutgiltig, med orsaken i task_error
    • CANCELED: slutgiltig, utan resultat
  • Name
    progress
    Type
    integer
    Description

    Procentandel av arbetet som utförts, från 0 till 100. Det är 0 tills tasken startar och 100 när den lyckas.

  • Name
    created_at
    Type
    timestamp
    Description

    Tidpunkten då tasken skapades, i Unix-millisekunder.

  • Name
    started_at
    Type
    timestamp
    Description

    Tidpunkten då en worker startade tasken, i Unix-millisekunder. null fram till dess.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tidpunkten då tasken nådde en slutgiltig status, i Unix-millisekunder. null fram till dess.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tidpunkten då taskens resultat upphör att gälla, i Unix-millisekunder. Det är 3 dagar efter finished_at, eller 3 dagar efter created_at tills tasken avslutas. För Enterprise-konton, som behåller API-resultat på obestämd tid, är det ungefär 100 år senare. Se Tillgångslagring.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Taskens position i kön medan den är PENDING. 1 betyder att den startar härnäst. 0 efter att tasken lämnar kön, och alltid 0 i listresultat.

  • Name
    task_error
    Type
    object
    Description

    Varför tasken misslyckades. null om inte status är FAILED. Se Fel.

  • Name
    consumed_credits
    Type
    integer
    Description

    Antal credits som debiterats för tasken, efter eventuell återbetalning. En begäran som returnerar ett fel debiteras inte. En misslyckad task är 0, eftersom Meshy återbetalar den. Att avbryta återbetalar en task endast medan den är PENDING. Om Meshy inte kan läsa debiteringen utelämnar ett get- eller stream-svar fältet, och en listbegäran returnerar 500. I så fall, försök igen med begäran.

  • Name
    image_urls
    Type
    array of strings
    Description

    Nedladdnings-URL:er för pixelkonstbilden. Arrayen har en URL när tasken har lyckats, och är tom fram till dess.

    URL:erna är signerade, så hämta dem utan en Authorization-header. De förblir giltiga fram till expires_at. Att hämta tasken igen innan dess returnerar samma URL:er, inte nyligen signerade sådana. En utgången URL kan inte förnyas, så ladda ner och lagra filerna innan dess.


Fidget Pixel-byggtaskobjektet

En byggtask genererar de 3D-utskrivbara delarna från en lyckad prototyptask. Meshy samplar pixel-art-bilden till rutnätet och returnerar delarna i en enda flerfärgad 3MF-fil.

Egenskaper

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

    Task-ID:t. Lita inte på dess format.

  • Name
    type
    Type
    string
    Description

    Tasktypen, alltid creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    Det name du skickade när du skapade tasken, eller "" om du inte skickade något.

  • Name
    status
    Type
    string
    Description

    Taskens status.

    Tillgängliga värden:

    • PENDING: väntar i kön
    • IN_PROGRESS: genererar resultatet
    • SUCCEEDED: slutgiltig, med resultatet
    • FAILED: slutgiltig, med anledningen i task_error
    • CANCELED: slutgiltig, utan resultat
  • Name
    progress
    Type
    integer
    Description

    Procentandel av arbetet som är klart, från 0 till 100. Det är 0 tills tasken startar och 100 när den lyckas.

  • Name
    created_at
    Type
    timestamp
    Description

    Tidpunkt då tasken skapades, i Unix-millisekunder.

  • Name
    started_at
    Type
    timestamp
    Description

    Tidpunkt då en worker startade tasken, i Unix-millisekunder. null fram till dess.

  • Name
    finished_at
    Type
    timestamp
    Description

    Tidpunkt då tasken nådde en slutgiltig status, i Unix-millisekunder. null fram till dess.

  • Name
    expires_at
    Type
    timestamp
    Description

    Tidpunkt då taskens resultat upphör att gälla, i Unix-millisekunder. Det är 3 dagar efter finished_at, eller 3 dagar efter created_at tills tasken är klar. För Enterprise-konton, som behåller API-resultat permanent, är det cirka 100 år senare. Se Tillgångslagring.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Taskens position i kön medan den är PENDING. 1 betyder att den startar härnäst. 0 efter att tasken lämnat kön, och alltid 0 i listresultat.

  • Name
    task_error
    Type
    object
    Description

    Varför tasken misslyckades. null om inte status är FAILED. Se Fel.

  • Name
    consumed_credits
    Type
    integer
    Description

    Antal credits som debiterats för tasken, efter eventuell återbetalning. En förfrågan som returnerar ett fel debiteras inte. En misslyckad task är 0, eftersom Meshy återbetalar den. Att avbryta återbetalar en task endast medan den är PENDING. Om Meshy inte kan läsa debiteringen utelämnas fältet i ett get- eller stream-svar, och en listförfrågan returnerar 500. Försök i så fall igen med förfrågan.

  • Name
    model_urls
    Type
    object
    Description

    Nedladdnings-URL:er för resultatet, med filformat som nyckel. Objektet har en post, för det output.format du skickade, och är tomt tills tasken lyckas.

    URL:erna är signerade, så hämta dem utan en Authorization-header. De förblir giltiga fram till expires_at. Att hämta tasken igen innan dess returnerar samma URL:er, inte nysignerade sådana. En utgången URL kan inte förnyas, så ladda ner och spara filerna innan dess.

    • Name
      3mf
      Type
      string
      Description

      Nedladdnings-URL för den flerfärgade 3MF-filen. Varje del har en grå kropp och en topp i sin pixels färg. Finns när output.format är 3mf, vilket är standardvärdet.


Fullständigt exempel

Följande cURL- och Python-skript kör hela flödet. Varje skript skapar en prototyp-task från ett foto och väntar på att den ska lyckas. Sedan skapar det en build-task, väntar på den tasken och laddar ner 3MF-filen från model_urls.3mf.

cURL-skriptet behöver curl och jq, och Python-skriptet behöver paketet requests. Följ dessa steg för att köra ett skript:

  1. Sätt MESHY_API_KEY till din API-nyckel.
  2. Sätt IMAGE_PATH till sökvägen för ett lokalt foto, eller IMAGE_URL till en publik bild-URL.
  3. Valfritt: För att pixelera ett annat motiv än en person, sätt PIXEL_TYPE till other.
  4. Kör skriptet.

En prototyp-task blir vanligtvis klar inom några minuter. En build-task blir vanligtvis klar på gott och väl under en minut.

I din app, visa bilden från image_urls för din användare innan du skapar build-tasken. Om de inte gillar den, skapa en ny prototyp-task istället. På så sätt spenderar du build-credits endast på en bild de godkänner.

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"