Creative Lab — Fidget Pixel API

Gawing multi-color na 3D-printable pixel-art fidget board ang isang source photo sa dalawang yugto: ang prototype ay nagko-convert ng iyong larawan tuloy pixel-art na imahe, pagkatapos ang build ay nagsa-sample ng imaheng iyon papunta sa isang 16×16 o 32×32 na grid at ginagawang interlocking square o hexagonal piece ang bawat pixel, na inihahatid bilang iisang 3MF kung saan taglay ng mga object nito ang kani-kanilang kulay para ang isang multi-filament slicer ay mag-print ng bawat piraso sa tamang kulay. Ang dalawang yugtong ito ay naka-link sa pamamagitan ng 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

Gumawa ng Fidget Pixel Prototype Task

Gumawa ng iisang pixel-art na imahe mula sa pinagmulang larawan. Ang ibinalik na task ID ang siyang ipapasa mo bilang input_task_id sa build endpoint. Tawagin muli ang endpoint na ito para sa isa pang pagsubok kung hindi ito ang resulta na gusto mo — bawat tawag ay sinisingil nang hiwalay. Sumangguni sa The Fidget Pixel Prototype Task Object para sa hugis ng response.

Mga Parameter

  • Name
    image_url
    Type
    string
    Kinakailangan
    Description

    Pinagmulang larawan na i-pixelize ni Meshy. Kasalukuyan naming sinusuportahan ang mga format na .jpg, .jpeg, .png, at .webp.

    Ang format ay natutukoy sa pamamagitan ng pag-decode sa data ng imahe, hindi mula sa file extension ng URL — isang URL na walang extension, o isa na nagre-redirect, ay gagana hangga't ang mga byte ay nade-decode sa isang suportadong format. Sinusunod ang mga HTTP redirect.

    May dalawang paraan para maibigay ang imahe:

    • Publicly accessible URL: Isang URL na maaaring ma-access mula sa pampublikong internet.
    • Data URI: Isang base64-encoded na data URI ng imahe. Halimbawa ng data URI: data:image/jpeg;base64,<your base64-encoded image data>.
  • Name
    type
    Type
    string
    Kinakailangan
    Description

    Kung ano ang ipinapakita ng larawan. Pinipili nito ang istilo ng pixelization, kaya piliin ito nang maingat — ang dalawa ay gumagawa ng kapansin-pansing magkaibang resulta. Mga available na value:

    • person — ang subject ay isang tao (portrait o buong katawan). Gumagawa ng chibi-style na pixel sprite ng subject.
    • other — anumang iba pa: mga alagang hayop, bagay, mascot, logo, tanawin. Gumagawa ng bead-art style na pixel icon ng subject.
  • Name
    name
    Type
    string
    Description

    Opsyonal na pangalan ng task para sa layuning ipakita. Maximum na 100 character.

Mga Ibinabalik

Ang result property ng response ay naglalaman ng task id ng bagong ginawang fidget pixel prototype task. I-poll ang Get a Task endpoint o mag-subscribe sa stream hanggang maabot ng task ang SUCCEEDED, pagkatapos ay ipasa ang ID na iyon sa build endpoint bilang input_task_id.

Mga Paraan ng Pagkabigo

  • Name
    400 - Bad Request
    Description

    Hindi katanggap-tanggap ang request. Karaniwang sanhi:

    • Nawawalang parameter: Kapwa kinakailangan ang image_url at type.
    • Di-wastong type: Ang type ay dapat na person o other.
    • Di-wastong format ng imahe: Ang ibinigay na image_url ay hindi isang suportadong format (.jpg, .jpeg, .png, .webp).
    • Wala sa saklaw ang mga dimensyon ng imahe: Masyadong maliit ang imahe, lumalampas sa maximum na laki ng file, o lumalampas sa maximum na bilang ng pixel.
    • Hindi maabot na URL: Hindi ma-download ang image_url (404 o timeout).
    • Di-wastong Data URI: Malformed ang base64 string.
    • Na-flag na nilalaman: Ang input na imahe ay na-flag ng NSFW moderation.
  • Name
    401 - Unauthorized
    Description

    Nabigo ang authentication. Pakisuri ang iyong API key.

  • Name
    402 - Payment Required
    Description

    Hindi sapat na credits para gawin ang task na ito, o ang API key ay pag-aari ng isang free-plan account.

  • Name
    403 - Forbidden
    Description

    Ang input na imahe ay na-flag ng intellectual property moderation (Content flagged for intellectual property violation). Tanging mga Enterprise account na may naka-enable na intellectual property filtering ang naharangan; walang sinisingil.

  • Name
    429 - Too Many Requests
    Description

    Nalagpasan mo na ang iyong rate limit.

  • Name
    500 - Internal Server Error
    Description

    Hindi makumpleto ang mismong pagsusuri ng intellectual property (Unable to perform intellectual property check, please try again). Ang mga Enterprise account na may naka-enable na intellectual property filtering ay nabibigo nang paksara sa pagsusuring ito; walang sinisingil — subukan muli ang request.

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

Gumawa ng Fidget Pixel Build Task

Bumuo ng mga 3D-printable na piraso mula sa isang matagumpay na prototype task. Sinasampol ng build ang pixel-art na larawan ng prototype papunta sa hiniling na grid, kino-quantize ito sa hanggang color_count na mga kulay, at bumubuo ng isang interlocking na piraso bawat grid cell. Ang deliverable ay isang solong 3MF kung saan bawat piraso ay hiwalay na object na naka-tag sa kulay nito, handa na para sa isang multi-filament na slicer. Sumangguni sa The Fidget Pixel Build Task Object para sa hugis ng response.

Mga Parameter

  • Name
    input_task_id
    Type
    string
    Kinakailangan
    Description

    Ang task ID ng isang prototype task na ginawa sa pamamagitan ng parehong OpenAPI endpoint na ito. Dapat na ginawa ang prototype ng parehong Meshy account at dapat na naabot na ang SUCCEEDED.

    Ang mga prototype task na ginawa sa pamamagitan ng webapp ay hindi tinatanggap — ang build endpoint ay tumatanggap lamang ng mga prototype task na nabuo ng POST /openapi/creative-lab/fidget-pixel/v1/prototype at tumatanggi sa anumang ibang pinagmulan na may 404.

  • Name
    name
    Type
    string
    Description

    Opsyonal na pangalan ng task para sa layuning pagpapakita. Maximum na 100 na character.

options

Opsyonal na heometriya ng piraso. May default ang bawat field — ipadala lamang ang mga gusto mong i-override. Ito ang parehong mga kontrol na inilalantad ng Creative Lab webapp; ang plug height, cap scale, at ang iba pang manufacturing presets ay hango mula sa shape at piece_size_mm at hindi inilalantad.

  • Name
    shape
    Type
    string
    default square
    Description

    Footprint ng bawat piraso. Mga magagamit na value:

    • square (default) — mga parisukat na piraso sa isang parisukat na grid.
    • hex — mga hexagonal na piraso sa isang hexagonal na grid. Available lamang ang mga hex na piraso sa 6 at 8 mm.
  • Name
    grid_size
    Type
    integer
    default 32
    Description

    Bilang ng mga piraso sa bawat gilid ng board. Mga magagamit na value: 16 o 32. Ang 32 na grid ay nagpapanatili ng mas maraming detalye; ang 16 na grid ay nangangahulugan ng mas kaunti, mas malalaking piraso para sa parehong subject.

  • Name
    piece_size_mm
    Type
    integer
    default 8
    Description

    Haba ng gilid ng bawat piraso, sa millimeters. Mga magagamit na value: 6, 8, o 10. Kasama ng grid_size, tinatakda nito ang naka-print na laki ng board — halimbawa 32 × 8 mm ≈ 26 cm bawat gilid. Hindi available ang 10 para sa shape: "hex" (ang pahilis na hex face ay may overhang sa karamihan ng consumer FDM printer).

  • Name
    color_count
    Type
    integer
    default 8
    Description

    Maximum na bilang ng mga kulay sa palette na kino-quantize ang larawan. Saklaw: [1, 8]. Ang bawat kulay ay nagiging isang filament sa iyong slicer.

  • Name
    piece_height_mm
    Type
    integer
    default 15
    Description

    Taas ng bawat piraso, sa millimeters. Saklaw: [10, 80].

output

Opsyonal na wire-format selector. Default sa 3mf, na kasalukuyang ang tanging suportadong value.

  • Name
    format
    Type
    string
    default 3mf
    Description

    Artifact na ibinabalik ng build. Mga magagamit na value:

    • 3mf (default) — nagbabalik ng isang solong model.3mf sa ilalim ng model_urls.3mf, na may isang object bawat piraso at ang kulay ng piraso na naka-attach sa bawat object.

Ibinabalik

Ang result property ng response ay naglalaman ng task id ng bagong ginawang fidget pixel build task. I-poll ang Get a Task endpoint o mag-subscribe sa stream hanggang sa maabot ng task ang SUCCEEDED, pagkatapos ay i-download ang artifact mula sa model_urls.3mf.

Mga Paraan ng Pagkabigo

  • Name
    400 - Bad Request
    Description

    Hindi katanggap-tanggap ang request. Karaniwang mga dahilan:

    • Kulang na parameter: Kailangan ang input_task_id.
    • Hindi wastong UUID: Ang input_task_id ay hindi wastong UUID.
    • Hindi pa matagumpay ang parent: Ang tinutukoy na prototype task ay hindi pa umaabot sa SUCCEEDED.
    • Walang kandidato: Matagumpay ang prototype task ngunit hindi nakabuo ng pixel-art na larawan; gumawa ng bagong prototype.
    • Options wala sa saklaw: Isa sa mga field ng options ay wala sa pinapayagang set o saklaw nito — halimbawa options.grid_size must be 16 or 32, o options.piece_size_mm=10 is not supported for shape=hex; hex pieces are available in 6 and 8 mm.
    • Hindi suportadong format: Dapat na 3mf ang output.format.
  • Name
    401 - Unauthorized
    Description

    Nabigo ang authentication. Pakisuri ang iyong API key.

  • Name
    402 - Payment Required
    Description

    Hindi sapat na credits upang isagawa ang task na ito, o ang API key ay kabilang sa isang free-plan account.

  • Name
    403 - Forbidden
    Description

    Na-flag ng intellectual property moderation ang larawan ng tinutukoy na prototype. Mga Enterprise account lamang na may pinaganang intellectual property filtering ang naba-block; walang sisingilin.

  • Name
    404 - Not Found
    Description

    Ang tinutukoy na prototype task ay hindi umiiral, kabilang sa ibang user, o ginawa sa pamamagitan ng webapp (mga prototype task lamang sa API-mode ang maaaring i-chain sa build).

  • Name
    429 - Too Many Requests
    Description

    Lumampas ka na sa iyong rate limit.

  • Name
    500 - Internal Server Error
    Description

    Hindi maitatag ang intellectual property verdict ng tinutukoy na prototype (Unable to perform intellectual property check, please try again). Ang mga Enterprise account na may pinaganang intellectual property filtering ay nabigo nang naka-close sa pagsusuring ito; walang sisingilin — subukan muli ang request.

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

Kunin ang Fidget Pixel Task

Kunin ang isang prototype o build task gamit ang isang wastong id ng task. Ang URL path ay dapat tumugma sa yugto (stage) ng task — ang isang build task na kinuha sa pamamagitan ng /prototype/:id ay magbabalik ng 404, at ganoon din sa kabaligtaran.

Sumangguni sa The Fidget Pixel Prototype Task Object at The Fidget Pixel Build Task Object para sa hugis ng tugon (response shapes).

Mga Parameter

  • Name
    id
    Type
    path
    Description

    Natatanging identifier para sa fidget pixel task na kukunin.

Ibinabalik

Ang tugon ay naglalaman ng fidget pixel task object. Ang hugis nito ay nakadepende sa kung aling yugto (stage) ang hiniling.

Mga Paraan ng Pagkabigo

  • Name
    400 - Bad Request
    Description

    Ang id ay hindi wastong UUID (Invalid ID).

  • Name
    403 - Forbidden
    Description

    Na-flag ng intellectual property moderation ang larawan ng task. Tanging mga Enterprise account na may pinagana ang intellectual property filtering lamang ang haharangin.

  • Name
    404 - Not Found
    Description

    Hindi umiiral ang task, pag-aari ito ng ibang user, o hindi tumutugma ang yugto (stage) nito sa URL path.

  • Name
    500 - Internal Server Error
    Description

    Hindi natapos ang pagsusuri ng intellectual property (Unable to perform intellectual property check, please try again); ang mga Enterprise account na may pinagana ang intellectual property filtering ay mabibigo nang sarado (fail closed). Ulitin ang kahilingan.

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

Tanggalin ang Isang Fidget Pixel Task

Kanselahin ang isang fidget pixel task. Kung ang task ay PENDING pa rin, ire-refund ang mga credits na nagamit noong oras ng paggawa. Ang mga task na IN_PROGRESS na ay kinakansela nang walang refund (posibleng nagagamit na ng worker ang mga resources). Ang mga task na nakarating na sa isang terminal state (SUCCEEDED, FAILED, CANCELED) ay hindi na maaaring kanselahin.

Dapat tumugma ang URL path sa stage ng task — kung gagamitin ang DELETE sa /prototype/:buildId, magbabalik ito ng 404.

Path Parameters

  • Name
    id
    Type
    path
    Description

    Natatanging identifier para sa fidget pixel task na kakanselahin.

Returns

Nagbabalik ng 204 No Content kapag matagumpay, na may walang laman na body.

Failure Modes

  • Name
    400 - Bad Request
    Description

    Hindi katanggap-tanggap ang request. Mga karaniwang dahilan:

    • Invalid ID: Ang id ay hindi isang valid na UUID.
    • Terminal state: Ang task ay SUCCEEDED, FAILED, o CANCELED na at hindi na maaaring kanselahin.
  • Name
    404 - Not Found
    Description

    Hindi umiiral ang task, pag-aari ito ng ibang user, o hindi tumutugma ang stage nito sa URL path.

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

I-stream ang Fidget Pixel Task

I-stream ang mga real-time na update para sa isang fidget pixel task sa pamamagitan ng Server-Sent Events (SSE). Ang URL path ay dapat tumugma sa yugto ng task — ang pagbukas ng isang stream sa /prototype/:buildId/stream ay maglalabas ng iisang event: error na payload na may status_code: 404 at isasara ang stream; ang isang maling id ay gagawa ng pareho na may status_code: 400 (Invalid ID).

Mga Parameter

  • Name
    id
    Type
    path
    Description

    Natatanging identifier para sa fidget pixel task na i-stream.

Ibinabalik

Nagbabalik ng stream ng mga Fidget Pixel Prototype o Fidget Pixel Build na task object bilang Server-Sent Events. Bawat frame ay nagdadala ng buong task object para sa yugtong iyon — ang parehong hugis na ibinabalik ng Get endpoint — kaya habang ang task ay PENDING o IN_PROGRESS ang mga output field ay hindi pa lamang na-populate (null, [] o {}) at ang finished_at ay 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)

List Fidget Pixel Tasks

Kunin ang isang paginated na listahan ng iyong mga fidget pixel task para sa isang yugto (stage). Ang URL path ang pumipili ng yugto — ibinabalik ng /prototype ang mga prototype task; ibinabalik ng /build ang mga build task. Ang mga task mula sa ibang yugto ay hindi kasama sa alinmang tugon.

Path Parameters

  • Name
    stage
    Type
    path
    Kinakailangan
    Description

    Alinman sa prototype o build. Ang koleksyon ay nagbabalik lamang ng mga task na ang yugto ay tumutugma sa URL — ang pagkuha ng /prototype ay hindi kailanman nagbabalik ng mga build task at vice versa.

Query Parameters

  • Name
    page_num
    Type
    integer
    default 1
    Description

    Numero ng pahina para sa pagination.

  • Name
    page_size
    Type
    integer
    default 10
    Description

    Limitasyon sa laki ng pahina. Ang maximum na pinapayagan ay 100 item.

  • Name
    sort_by
    Type
    string
    default -created_at
    Description

    Field na gagamitin sa pag-uuri. Mga available na value:

    • +created_at: Ayusin ayon sa oras ng paglikha nang paakyat (ascending).
    • -created_at: Ayusin ayon sa oras ng paglikha nang pababa (descending).

Ibinabalik

Nagbabalik ng isang paginated na listahan ng per-stage na task object — alinman sa ang fidget pixel prototype task object kapag nililista ang /prototype o ang fidget pixel build task object kapag nilislista ang /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=***"
    ]
  }
]

Ang Fidget Pixel Prototype Task Object

Ang Fidget Pixel Prototype Task object ay isang work unit na sinusubaybayan ng Meshy upang gawing pixel-art image ang isang source photo. Ang output ng yugtong ito ay naka-chain sa build stage sa pamamagitan ng input_task_id.

Mga Katangian

  • Name
    id
    Type
    string
    Description

    Natatanging identifier para sa task. Bagaman gumagamit kami ng k-sortable UUID para sa mga task id bilang detalye ng implementasyon, hindi mo dapat ipagpalagay ang anumang bagay tungkol sa format ng id.

  • Name
    type
    Type
    string
    Description

    Uri ng task. Ang value ay creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    Ang pangalan ng task na ibinigay noong nilikha ang task. Empty string kung walang ibinigay na pangalan.

  • Name
    status
    Type
    string
    Description

    Status ng task. Ang mga posibleng value ay isa sa PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progress ng task. Kung hindi pa nasisimulan ang task, ang property na ito ay magiging 0. Kapag nagtagumpay na ang task, ito ay magiging 100.

  • Name
    created_at
    Type
    timestamp
    Description

    Timestamp ng kung kailan nilikha ang task, sa milliseconds.

  • Name
    started_at
    Type
    timestamp
    Description

    Timestamp ng kung kailan sinimulan ang task, sa milliseconds. Kung hindi pa nasisimulan ang task, ang property na ito ay magiging null.

  • Name
    finished_at
    Type
    timestamp
    Description

    Timestamp ng kung kailan natapos ang task, sa milliseconds. Kung hindi pa natatapos ang task, ang property na ito ay magiging null.

  • Name
    expires_at
    Type
    timestamp
    Description

    Timestamp ng kung kailan mag-eexpire ang resulta ng task, sa milliseconds — 3 araw pagkatapos matapos ang task. Ang mga Enterprise account ay nagpapanatili ng mga resulta ng API nang walang hanggan (tingnan ang Asset Retention); para sa kanila, ang timestamp na ito ay itinakda nang halos 100 taon ang layo.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Ang bilang ng mga naunang task.

  • Name
    task_error
    Type
    object
    Description

    Detalye ng error para sa mga nabigong task. Tingnan ang Errors para sa kumpletong reference ng task_error object.

  • Name
    consumed_credits
    Type
    integer
    Description

    Ang bilang ng credits na ginamit ng task na ito. Ang isang task na umabot sa SUCCEEDED ay sisingilin ng buong halaga para sa yugto nito. Ang isang task na hindi kailanman nalikha (isang 4xx sa oras ng request, kasama ang pagtanggi ng moderation) ay hindi sisingilin. Ang isang task na umabot sa FAILED ay nagbabalik ng 0 — nire-refund ang singil. Ang pagkansela sa pamamagitan ng DELETE ay nagre-refund lamang habang PENDING pa ang task; ang isang task na IN_PROGRESS na ay mananatiling sisingilin, dahil nagamit na ang trabaho.

  • Name
    image_urls
    Type
    array of strings
    Description

    Mga URL na maaaring i-download para sa pixel-art image na nilikha ng prototype task na ito. Sa kasalukuyan, palaging nagbabalik ang API ng eksaktong isang imahe; ang field ay isang array upang ang mga susunod na revision ay makapaglabas ng maraming kandidato nang hindi nasisira ang compatibility. Walang laman hanggang umabot ang task sa SUCCEEDED.

    Ito ay mga naka-sign na URL: kunin ang mga ito nang walang Authorization header. Mananatili itong valid hanggang expires_at, na 3 araw pagkatapos ng finished_at, at ang pagbabasa muli sa task sa loob ng window na iyon ay magbabalik ng magkaparehong URL sa halip na bago-lang-nai-sign. I-download at i-store ang mga file sa iyong sarili bago mangyari iyon — walang paraan upang i-refresh ang isang expired na link.

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

Ang Fidget Pixel Build Task Object

Ang Fidget Pixel Build Task object ay isang work unit na sinusubaybayan ng Meshy upang i-generate ang mga printable na piraso mula sa isang matagumpay na prototype task. Ang build ay sumasampol sa pixel-art na imahe ng prototype papunta sa hiniling na grid at nagla-publish ng iisang color-tagged na 3MF.

Mga Katangian

  • Name
    id
    Type
    string
    Description

    Natatanging identifier para sa task.

  • Name
    type
    Type
    string
    Description

    Uri ng task. Ang value ay creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    Ang pangalan ng task na ibinigay noong nilikha ang task. Walang laman na string kung walang ibinigay na pangalan.

  • Name
    status
    Type
    string
    Description

    Status ng task. Ang mga posibleng value ay isa sa PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progress ng task. Kung hindi pa nasisimulan ang task, ang property na ito ay magiging 0. Kapag nagtagumpay na ang task, ito ay magiging 100.

  • Name
    created_at
    Type
    timestamp
    Description

    Timestamp kung kailan nilikha ang task, sa milliseconds.

  • Name
    started_at
    Type
    timestamp
    Description

    Timestamp kung kailan sinimulan ang task, sa milliseconds. null hanggang magsimula ang task.

  • Name
    finished_at
    Type
    timestamp
    Description

    Timestamp kung kailan natapos ang task, sa milliseconds. null hanggang matapos ang task.

  • Name
    expires_at
    Type
    timestamp
    Description

    Timestamp kung kailan mag-e-expire ang resulta ng task, sa milliseconds — 3 araw pagkatapos matapos ang task. Ang mga Enterprise account ay nagpapanatili ng mga resulta ng API nang walang hanggan (tingnan ang Asset Retention); para sa kanila, ang timestamp na ito ay naka-set sa mga 100 taon mula ngayon.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Ang bilang ng mga naunang task. May kahulugan lamang kapag ang status ay PENDING.

  • Name
    task_error
    Type
    object
    Description

    Mga detalye ng error para sa mga nabigong task. Tingnan ang Errors para sa kumpletong reference ng task_error object.

  • Name
    consumed_credits
    Type
    integer
    Description

    Ang bilang ng credits na nagamit ng task na ito. Ang task na umabot sa SUCCEEDED ay sisingilin ng buong halaga para sa yugto nito. Ang task na hindi kailanman nalikha (isang 4xx sa oras ng request, kasama na ang pagtanggi ng moderation) ay hindi sinisingil. Ang task na umabot sa FAILED ay nagbabalik ng 0 — ang singil ay ire-refund. Ang pagkansela sa pamamagitan ng DELETE ay nagre-refund lamang habang ang task ay PENDING pa rin; ang task na IN_PROGRESS na ay mananatiling sisingilin, dahil nagamit na ang trabaho.

  • Name
    model_urls
    Type
    object
    Description

    Mga na-download na URL para sa nagawang artifact, na naka-key ayon sa format. Naglalaman ng eksaktong isang entry — ang format na hiniling sa pamamagitan ng output.format ng build request. Walang laman hanggang umabot ang task sa SUCCEEDED.

    Ang mga ito ay signed URL: kunin ang mga ito nang walang Authorization header. Mananatili silang valid hanggang sa expires_at, na 3 araw pagkatapos ng finished_at, at ang muling pagbasa sa task sa loob ng window na iyon ay magbabalik ng eksaktong parehong URL sa halip na isang bagong-signed na URL. I-download at itago ang mga file bago mangyari iyon — walang paraan upang i-refresh ang isang na-expire na link.

    • Name
      3mf
      Type
      string
      Description

      Na-download na URL papunta sa 3MF file. Isang object bawat piraso, bawat isa ay may tag ng kani-kaniyang palette color, kaya ang multi-filament na slicer ay nagtatalaga ng mga filament ayon sa kulay. Naroroon kapag ang output.format ay 3mf (ang default).

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

Halimbawang End-to-End

Ang kumpletong daloy: gumawa ng prototype mula sa isang larawan, i-poll ito hanggang SUCCEEDED, gumawa ng build mula rito, i-poll ang build hanggang SUCCEEDED, pagkatapos i-download ang 3MF mula sa model_urls.

Karaniwang natatapos ang isang prototype sa loob ng ilang minuto; karaniwang natatapos ang isang build sa loob ng mas kaunti sa isang minuto. Sa isang tunay na integrasyon, ipapakita mo ang entry na image_urls ng prototype sa end user at hahayaan silang kumpirmahin ito (o patakbuhin muli ang prototype) bago gumastos ng credits para sa 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"