lowpoly dihentikan pada 30 Okt 2026. Ganti model sebelum tanggal-tanggal ini agar permintaan tidak error. Lihat semua penghentian

API Creative Lab Fidget Pixel

Ubah sebuah foto menjadi papan fidget pixel-art multi-warna yang dapat dicetak 3D dalam dua tahap. Tugas prototipe mengubah foto menjadi gambar pixel-art. Tugas build mengubah gambar tersebut menjadi potongan-potongan yang saling mengunci dalam satu file 3MF, dan menggunakan ID dari tugas prototipe sebagai input_task_id.

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

Kedua endpoint POST tersebut memerlukan paket berbayar. Permintaan dari akun dengan paket gratis akan mengembalikan 402.


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

Buat tugas prototipe Fidget Pixel

Menghasilkan satu gambar pixel-art dari sebuah foto. Untuk membangun bagian-bagiannya, kirimkan ID tugas ini ke build endpoint sebagai input_task_id. Untuk field-field tugas, lihat The Fidget Pixel prototype task object.

Jika Anda tidak menyukai gambarnya, buat tugas prototipe lain. Setiap tugas dikenakan biaya secara terpisah.

Request

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

Response

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

Parameter

  • Name
    image_url
    Type
    string
    Wajib
    Description

    Foto yang akan diubah menjadi pixel art, berupa URL publik atau data URI (data:image/jpeg;base64,<data gambar Anda yang dienkode base64>).

    Gambar harus berupa file JPG, JPEG, PNG, atau WebP dengan ukuran maksimal 20 MB. Meshy mendeteksi format dari data gambar, bukan dari ekstensi file pada URL. URL tanpa ekstensi tetap berfungsi, dan Meshy mengikuti pengalihan (redirect).

  • Name
    type
    Type
    string
    Wajib
    Description

    Apa yang ditampilkan oleh foto tersebut, yang menentukan gaya pixel-art. Kedua gaya ini terlihat jelas berbeda. Nilai lain mengembalikan 400.

    Nilai yang tersedia:

    • person: seorang orang, dalam foto potret atau foto seluruh tubuh. Meshy menggambar sprite pixel bergaya chibi.
    • other: subjek lainnya, misalnya hewan peliharaan, objek, maskot, logo, atau pemandangan. Meshy menggambar ikon pixel bergaya bead-art.
  • Name
    name
    Type
    string
    Description

    Nama untuk tugas, maksimal 100 karakter. Nama ini akan muncul kembali di field name pada tugas. Nama yang lebih panjang mengembalikan 400.

Hasil

Field result menyimpan ID dari tugas prototipe yang baru. Ambil tugas tersebut atau streaming tugas tersebut hingga status bernilai SUCCEEDED. Lalu kirimkan ID tersebut ke build endpoint sebagai input_task_id.

Mode kegagalan

  • Name
    400 - Bad Request
    Description

    Permintaan tidak dapat dijalankan. Contohnya:

    • image_url atau type tidak ada.
    • type bukan person atau other.
    • Gambar bukan file JPG, JPEG, PNG, atau WebP.
    • Gambar terlalu kecil, melebihi 20 MB, atau melebihi jumlah piksel maksimum.
    • Meshy tidak dapat mengunduh gambar, misalnya karena URL mengembalikan 404 atau waktu habis (timeout).
    • Data URI bukan base64 yang valid.
    • Gambar ditandai sebagai NSFW.

    Pesan error menunjukkan masalah apa yang ditemukan. Perbaiki permintaan, lalu kirim ulang.

  • Name
    401 - Unauthorized
    Description

    Kunci API tidak ada atau tidak valid. Periksa header Authorization.

  • Name
    402 - Payment Required
    Description

    Salah satu dari berikut ini berlaku:

    • Akun tidak memiliki kredit yang cukup.
    • Kunci API, ruang kerja, atau anggota telah mencapai batas kreditnya.
    • Akun menggunakan paket gratis.

    Periksa kredit dan paket Anda, lalu coba lagi.

  • Name
    403 - Forbidden
    Description

    Tim Anda mengaktifkan IP Filtering, dan Meshy menandai gambar tersebut terkait kekayaan intelektual pihak ketiga. Kirim gambar yang hak penggunaannya Anda miliki.

  • Name
    429 - Too Many Requests
    Description

    Salah satu batas berikut telah tercapai:

    • Anda mengirim lebih banyak permintaan daripada yang diizinkan oleh batas laju Anda. Tunggu beberapa detik, lalu coba lagi. Lihat Rate limits.
    • Terlalu banyak tugas Anda yang sedang antre atau berjalan. Tunggu hingga beberapa selesai, lalu coba lagi.
    • Pada paket tak terbatas tanpa sisa kredit, Anda telah mencapai jumlah tugas yang dapat berjalan tanpa kredit. Tunggu hingga sebuah tugas selesai, atau tambahkan kredit.
  • Name
    500 - Internal Server Error
    Description

    Meshy mengalami kesalahan server, misalnya karena tidak dapat menjalankan pemeriksaan kekayaan intelektual pada gambar. Meshy tidak membuat tugas, dan mengembalikan kredit apa pun yang telah dikenakan. Coba ulangi permintaan.


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

Buat tugas build Fidget Pixel

Menghasilkan bagian-bagian yang dapat dicetak 3D dari tugas prototipe yang berhasil. Meshy mengambil sampel gambar pixel-art ke grid dan menguranginya menjadi paling banyak color_count warna. Setiap sel pada subjek menjadi satu bagian yang saling mengunci, dan latar belakangnya tidak dicetak.

Hasilnya adalah satu file 3MF multi-warna, siap dicetak berwarna. Setiap bagian memiliki badan berwarna abu-abu dan bagian atas dengan warna pixel-nya. Untuk field-fieldnya, lihat 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"
}

Parameter

  • Name
    input_task_id
    Type
    string
    Wajib
    Description

    ID dari tugas prototipe yang akan dibangun. Harus merupakan tugas yang dibuat oleh akun Anda dengan POST /openapi/creative-lab/fidget-pixel/v1/prototype, dengan status SUCCEEDED.

    Sebuah ID yang bukan merupakan tugas prototipe Fidget Pixel Anda dari API akan mengembalikan 404, termasuk prototipe yang dibuat di aplikasi web.

  • Name
    name
    Type
    string
    Description

    Nama untuk tugas, hingga 100 karakter. Nilai ini akan muncul kembali di field name tugas. Nama yang lebih panjang mengembalikan 400.

options

Pengaturan untuk bentuk dan ukuran bagian-bagian. Setiap field memiliki nilai default, jadi kirimkan hanya field yang ingin Anda ubah. Nilai 0 menggunakan default field tersebut. Ini adalah pengaturan yang sama seperti di aplikasi web Creative Lab. Pengaturan bentuk lainnya bersifat tetap, dan Meshy menetapkannya berdasarkan shape dan piece_size_mm.

  • Name
    shape
    Type
    string
    default square
    Description

    Bentuk dasar (footprint) dari setiap bagian. Nilai lain mengembalikan 400.

    Nilai yang tersedia:

    • square: bagian persegi pada grid persegi
    • hex: bagian heksagonal pada grid heksagonal, dengan piece_size_mm diatur ke 6 atau 8
  • Name
    grid_size
    Type
    integer
    default 32
    Description

    Jumlah sel grid di sepanjang setiap sisi papan, 16 atau 32. Nilai lain mengembalikan 400. Grid 32 mempertahankan lebih banyak detail. Grid 16 menghasilkan bagian yang lebih sedikit dengan ukuran yang sama, sehingga papan menjadi sekitar setengah lebarnya.

  • Name
    piece_size_mm
    Type
    integer
    default 8
    Description

    Panjang sisi setiap bagian dalam milimeter, 6, 8, atau 10. Nilai lain mengembalikan 400. Bersama grid_size, ini menentukan ukuran papan yang dicetak. Misalnya, grid 32 dengan bagian 8 mm berukuran sekitar 26,5 cm per sisi.

    10 tidak bekerja dengan hex dan mengembalikan 400, karena permukaan heksagonal yang miring akan menjorok keluar pada sebagian besar printer FDM konsumen.

  • Name
    color_count
    Type
    integer
    default 8
    Description

    Jumlah maksimum warna dalam palet pixel-art, dari 1 hingga 8. Nilai di luar rentang ini mengembalikan 400. Untuk mencetak, Anda memerlukan hingga color_count ditambah satu filamen, satu per warna dan satu untuk badan abu-abu.

  • Name
    piece_height_mm
    Type
    integer
    default 15
    Description

    Tinggi setiap bagian dalam milimeter, dari 10 hingga 80. Nilai di luar rentang ini mengembalikan 400.

output

Pengaturan untuk file hasil.

  • Name
    format
    Type
    string
    default 3mf
    Description

    Format file dari hasil. Nilai lain mengembalikan 400.

    Nilai yang tersedia:

    • 3mf: satu file model.3mf multi-warna, dikembalikan di model_urls.3mf

Returns

Field result menyimpan ID dari tugas build baru. Dapatkan tugasnya atau streaming hingga status menjadi SUCCEEDED. Kemudian unduh file 3MF dari model_urls.3mf.

Mode kegagalan

  • Name
    400 - Bad Request
    Description

    Permintaan tidak dapat dijalankan. Misalnya:

    • input_task_id hilang atau bukan ID tugas yang valid.
    • Status tugas prototipe bukan SUCCEEDED. Jika masih berjalan, tunggu dan coba lagi. Jika gagal atau dibatalkan, buat tugas prototipe baru.
    • Tugas prototipe berhasil tetapi tidak memiliki gambar. Buat tugas prototipe baru.
    • Sebuah field options berada di luar nilai yang diizinkan, misalnya grid_size selain 16 atau 32.
    • piece_size_mm adalah 10 dan shape adalah hex. Bagian heksagonal hanya tersedia dalam ukuran 6 dan 8 mm.
    • output.format bukan 3mf.

    Pesan error akan menunjukkan masalah apa yang ditemukan.

  • Name
    401 - Unauthorized
    Description

    Kunci API hilang atau tidak valid. Periksa header Authorization.

  • Name
    402 - Payment Required
    Description

    Salah satu dari ini berlaku:

    • Akun tidak memiliki cukup kredit.
    • Kunci API, ruang kerja, atau anggota mencapai batas kreditnya.
    • Akun berada pada paket gratis.

    Periksa kredit dan paket Anda, lalu coba lagi.

  • Name
    403 - Forbidden
    Description

    Tim Anda mengaktifkan IP Filtering, dan Meshy menandai gambar tugas prototipe tersebut karena hak kekayaan intelektual pihak ketiga. Buat tugas prototipe dari gambar yang memang berhak Anda gunakan.

  • Name
    404 - Not Found
    Description

    input_task_id tidak cocok dengan tugas prototipe Fidget Pixel mana pun yang dibuat akun Anda melalui API. Prototipe yang dibuat di aplikasi web juga akan mengembalikan 404. Kirimkan ID result dari respons pembuatan prototipe.

  • Name
    429 - Too Many Requests
    Description

    Salah satu batas ini tercapai:

    • Anda mengirim lebih banyak permintaan daripada yang diizinkan oleh batas laju Anda. Tunggu beberapa detik, lalu coba lagi. Lihat Rate limits.
    • Terlalu banyak tugas Anda yang sedang antre atau berjalan. Tunggu beberapa selesai, lalu coba lagi.
    • Pada paket tanpa batas tanpa sisa kredit, Anda telah mencapai jumlah tugas yang dapat berjalan tanpa kredit. Tunggu salah satu tugas selesai, atau tambahkan kredit.
  • Name
    500 - Internal Server Error
    Description

    Meshy mengalami kesalahan server, misalnya karena tidak dapat menjalankan pemeriksaan hak kekayaan intelektual pada gambar tugas prototipe. Meshy tidak membuat tugas tersebut, dan mengembalikan kredit apa pun yang telah dikenakan. Coba lagi permintaannya.


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

Mendapatkan task Fidget Pixel

Mengembalikan task prototype atau build. Path harus sesuai dengan tahap task tersebut. Task build yang diminta melalui /prototype/:id akan mengembalikan 404, begitu juga task prototype yang diminta melalui /build/:id.

Untuk kolom-kolomnya, lihat Objek task prototype Fidget Pixel dan Objek task build Fidget Pixel.

Request

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

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

Prototype Response

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

Build Response

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

Parameter

  • Name
    id
    Type
    path
    Description

    ID task dari respons pembuatan.

Returns

Objek task prototype atau objek task build, sesuai dengan tahap pada path.

Mode kegagalan

  • Name
    400 - Bad Request
    Description

    id bukan ID task yang valid. Kirim ID result dari respons pembuatan.

  • Name
    403 - Forbidden
    Description

    Tim Anda mengaktifkan IP Filtering, dan Meshy menandai gambar task prototype tersebut karena melanggar kekayaan intelektual pihak ketiga. Task build dan tim pada paket Enterprise tidak mendapatkan error ini. Buat task prototype dari gambar yang hak penggunaannya Anda miliki.

  • Name
    404 - Not Found
    Description

    Tidak ada task Fidget Pixel dengan ID ini yang dimiliki akun Anda, atau tahap task tidak sesuai dengan path. Periksa ID, dan gunakan /prototype atau /build yang sesuai dengan task tersebut.

  • Name
    500 - Internal Server Error
    Description

    Meshy tidak dapat menjalankan pemeriksaan kekayaan intelektual. Coba lagi permintaan tersebut.


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

Hapus tugas Fidget Pixel

Membatalkan tugas Fidget Pixel. Membatalkan tugas berstatus PENDING akan mengembalikan kreditnya. Tugas IN_PROGRESS dibatalkan tanpa pengembalian kredit, karena worker sudah mulai mengerjakannya. Tugas dengan status akhir (SUCCEEDED, FAILED, atau CANCELED) tidak dapat dibatalkan.

Path harus sesuai dengan tahap tugas tersebut. Misalnya, DELETE pada /prototype/:id dengan ID tugas build akan mengembalikan 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).

Parameter path

  • Name
    id
    Type
    path
    Description

    ID tugas yang akan dibatalkan.

Returns

204 No Content dengan body kosong.

Mode kegagalan

  • Name
    400 - Bad Request
    Description

    Salah satu dari hal berikut berlaku:

    • id bukan ID tugas yang valid. Kirim ID result dari respons pembuatan.
    • Tugas sudah memiliki status akhir (SUCCEEDED, FAILED, atau CANCELED), sehingga tidak dapat dibatalkan.
  • Name
    404 - Not Found
    Description

    Tidak ada tugas Fidget Pixel dengan ID ini yang dimiliki akun Anda, atau tahap tugas tidak sesuai dengan path. Periksa ID, dan gunakan /prototype atau /build yang sesuai dengan tugas tersebut.


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

Stream tugas Fidget Pixel

Melakukan streaming pembaruan tugas Fidget Pixel sebagai Server-Sent Events (SSE). Path harus sesuai dengan tahap tugas. Jika tidak, misalnya ID tugas build digunakan di /prototype/:id/stream, stream akan mengirim satu event error dengan status_code: 404 lalu ditutup. Sebuah id yang bukan ID tugas yang valid akan melakukan hal yang sama dengan status_code: 400.

Request

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

Response Stream

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

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

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

Parameter

  • Name
    id
    Type
    path
    Description

    ID tugas dari respons pembuatan.

Returns

Sebuah stream objek tugas prototype atau build. Setiap event berisi objek tugas lengkap, sebagaimana dikembalikan oleh Get a Fidget Pixel task. Selama tugas masih PENDING atau IN_PROGRESS, kolom output-nya masih kosong (null, [], atau {}), dan finished_at bernilai null.

Jika IP Filtering memblokir hasil tugas, stream akan mengirim satu event error sebagai penggantinya, dengan status_code yang sama seperti yang akan dikembalikan oleh permintaan get.


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

Daftar tugas Fidget Pixel

Mengembalikan tugas Fidget Pixel Anda untuk satu tahap, satu halaman dalam satu waktu. Path menentukan tahapnya. /prototype hanya mengembalikan tugas prototype, dan /build hanya mengembalikan tugas 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=***"
    ]
  }
]

Parameter path

  • Name
    stage
    Type
    path
    Wajib
    Description

    Tahap yang akan didaftar, prototype atau build.

Parameter query

  • Name
    page_num
    Type
    integer
    default 1
    Description

    Halaman yang akan dikembalikan, dari 1 hingga 255. 0 mengembalikan halaman pertama. Nilai di luar 0 hingga 255 mengembalikan 400.

  • Name
    page_size
    Type
    integer
    default 10
    Description

    Jumlah tugas per halaman, hingga 100. Nilai dari 101 hingga 255 mengembalikan 100 tugas, dan 0 menggunakan nilai default. Nilai di luar 0 hingga 255 mengembalikan 400.

  • Name
    sort_by
    Type
    string
    default -created_at
    Description

    Urutan pengurutan.

    Nilai yang tersedia:

    • -created_at: terbaru lebih dulu
    • +created_at: terlama lebih dulu

Hasil

Sebuah array berisi objek tugas prototype atau objek tugas build, sesuai dengan tahap pada path.


Objek tugas prototipe Fidget Pixel

Tugas prototipe mengubah foto menjadi gambar pixel-art. Untuk mengubah gambar tersebut menjadi bagian-bagian yang siap dicetak 3D, kirimkan ID tugas tersebut ke build endpoint sebagai input_task_id.

Properti

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

    ID tugas. Jangan bergantung pada formatnya.

  • Name
    type
    Type
    string
    Description

    Jenis tugas, selalu creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    name yang Anda kirim saat membuat tugas, atau "" jika Anda tidak mengirimkannya.

  • Name
    status
    Type
    string
    Description

    Status tugas.

    Nilai yang tersedia:

    • PENDING: menunggu dalam antrean
    • IN_PROGRESS: sedang menghasilkan hasil
    • SUCCEEDED: final, dengan hasil
    • FAILED: final, dengan alasan di task_error
    • CANCELED: final, tanpa hasil
  • Name
    progress
    Type
    integer
    Description

    Persentase pekerjaan yang telah selesai, dari 0 hingga 100. Nilainya 0 sampai tugas dimulai dan 100 saat berhasil.

  • Name
    created_at
    Type
    timestamp
    Description

    Waktu tugas dibuat, dalam milidetik Unix.

  • Name
    started_at
    Type
    timestamp
    Description

    Waktu sebuah worker memulai tugas, dalam milidetik Unix. null sampai saat itu.

  • Name
    finished_at
    Type
    timestamp
    Description

    Waktu tugas mencapai status final, dalam milidetik Unix. null sampai saat itu.

  • Name
    expires_at
    Type
    timestamp
    Description

    Waktu hasil tugas kedaluwarsa, dalam milidetik Unix. Nilainya 3 hari setelah finished_at, atau 3 hari setelah created_at sampai tugas selesai. Untuk akun Enterprise, yang menyimpan hasil API tanpa batas waktu, nilainya sekitar 100 tahun kemudian. Lihat Asset retention.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Posisi tugas dalam antrean selama berstatus PENDING. 1 berarti tugas ini akan dimulai berikutnya. 0 setelah tugas keluar dari antrean, dan selalu 0 dalam hasil daftar.

  • Name
    task_error
    Type
    object
    Description

    Alasan tugas gagal. null kecuali status adalah FAILED. Lihat Kesalahan.

  • Name
    consumed_credits
    Type
    integer
    Description

    Jumlah kredit yang dikenakan untuk tugas ini, setelah pengembalian dana (jika ada). Permintaan yang mengembalikan kesalahan tidak dikenakan biaya. Tugas yang gagal bernilai 0, karena Meshy mengembalikan dananya. Membatalkan tugas hanya mengembalikan dana selama tugas masih PENDING. Jika Meshy tidak dapat membaca biaya yang dikenakan, respons get atau stream akan menghilangkan field ini, dan permintaan daftar akan mengembalikan 500. Dalam kasus tersebut, coba lagi permintaannya.

  • Name
    image_urls
    Type
    array of strings
    Description

    URL unduhan untuk gambar pixel-art. Array ini memiliki satu URL setelah tugas berhasil, dan kosong sebelum itu.

    URL tersebut ditandatangani (signed), jadi ambillah tanpa header Authorization. URL tetap berlaku hingga expires_at. Mengambil tugas tersebut lagi sebelum waktu itu akan mengembalikan URL yang sama, bukan yang baru ditandatangani. URL yang kedaluwarsa tidak dapat diperbarui, jadi unduh dan simpan berkasnya sebelum waktu itu.


Objek tugas build Fidget Pixel

Tugas build menghasilkan bagian-bagian yang dapat dicetak 3D dari tugas prototipe yang berhasil. Meshy mengambil sampel gambar pixel-art ke dalam grid dan mengembalikan bagian-bagiannya dalam satu file 3MF multi-warna.

Properties

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

    ID tugas. Jangan bergantung pada formatnya.

  • Name
    type
    Type
    string
    Description

    Jenis tugas, selalu creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    name yang Anda kirim saat membuat tugas, atau "" jika Anda tidak mengirimkannya.

  • Name
    status
    Type
    string
    Description

    Status tugas.

    Nilai yang tersedia:

    • PENDING: menunggu dalam antrean
    • IN_PROGRESS: sedang menghasilkan hasil
    • SUCCEEDED: final, dengan hasil
    • FAILED: final, dengan alasan di task_error
    • CANCELED: final, tanpa hasil
  • Name
    progress
    Type
    integer
    Description

    Persentase pekerjaan yang telah selesai, dari 0 hingga 100. Nilainya 0 sampai tugas dimulai dan 100 saat berhasil.

  • Name
    created_at
    Type
    timestamp
    Description

    Waktu tugas dibuat, dalam milidetik Unix.

  • Name
    started_at
    Type
    timestamp
    Description

    Waktu seorang pekerja memulai tugas, dalam milidetik Unix. null sampai saat itu.

  • Name
    finished_at
    Type
    timestamp
    Description

    Waktu tugas mencapai status final, dalam milidetik Unix. null sampai saat itu.

  • Name
    expires_at
    Type
    timestamp
    Description

    Waktu hasil tugas kedaluwarsa, dalam milidetik Unix. Nilainya 3 hari setelah finished_at, atau 3 hari setelah created_at sampai tugas selesai. Untuk akun Enterprise, yang menyimpan hasil API tanpa batas waktu, nilainya sekitar 100 tahun kemudian. Lihat Retensi aset.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Posisi tugas dalam antrean selama statusnya PENDING. 1 berarti tugas ini akan dimulai berikutnya. 0 setelah tugas keluar dari antrean, dan selalu 0 pada hasil daftar.

  • Name
    task_error
    Type
    object
    Description

    Alasan kegagalan tugas. null kecuali status adalah FAILED. Lihat Kesalahan.

  • Name
    consumed_credits
    Type
    integer
    Description

    Jumlah kredit yang dikenakan untuk tugas, setelah pengembalian dana (jika ada). Permintaan yang mengembalikan kesalahan tidak dikenakan biaya. Tugas yang gagal bernilai 0, karena Meshy mengembalikan dananya. Membatalkan tugas hanya mengembalikan dana selama statusnya PENDING. Jika Meshy tidak dapat membaca biaya yang dikenakan, respons get atau stream akan menghilangkan field ini, dan permintaan daftar akan mengembalikan 500. Dalam kasus ini, coba ulangi permintaan tersebut.

  • Name
    model_urls
    Type
    object
    Description

    URL unduhan untuk hasil, dikelompokkan berdasarkan format file. Objek ini memiliki satu entri, untuk output.format yang Anda kirim, dan kosong sampai tugas berhasil.

    URL-nya ditandatangani, jadi ambil tanpa header Authorization. URL ini tetap berlaku hingga expires_at. Mengambil tugas lagi sebelum itu akan mengembalikan URL yang sama, bukan yang baru ditandatangani. URL yang sudah kedaluwarsa tidak dapat diperbarui, jadi unduh dan simpan file-file tersebut sebelum itu terjadi.

    • Name
      3mf
      Type
      string
      Description

      URL unduhan untuk file 3MF multi-warna. Setiap bagian memiliki badan berwarna abu-abu dan bagian atas dengan warna pixel-nya. Tersedia ketika output.format adalah 3mf, yang merupakan nilai default.


Contoh alur end-to-end

Skrip cURL dan Python berikut menjalankan seluruh alur. Setiap skrip membuat task prototype dari sebuah foto dan menunggu hingga berhasil. Kemudian skrip tersebut membuat task build, menunggu task tersebut selesai, dan mengunduh file 3MF dari model_urls.3mf.

Skrip cURL membutuhkan curl dan jq, sedangkan skrip Python membutuhkan paket requests. Untuk menjalankan skrip, ikuti langkah-langkah berikut:

  1. Atur MESHY_API_KEY ke kunci API Anda.
  2. Atur IMAGE_PATH ke path foto lokal, atau IMAGE_URL ke URL gambar publik.
  3. Opsional: Untuk mem-pixelisasi subjek selain orang, atur PIXEL_TYPE ke other.
  4. Jalankan skrip.

Task prototype biasanya selesai dalam beberapa menit. Task build biasanya selesai dalam waktu kurang dari satu menit.

Di aplikasi Anda, tampilkan gambar dari image_urls kepada pengguna sebelum Anda membuat task build. Jika mereka tidak menyukainya, buat task prototype lain sebagai gantinya. Dengan cara ini, Anda hanya menggunakan kredit build untuk gambar yang telah disetujui pengguna.

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"