Creative Lab — Fidget Pixel API

元となる写真を、複数色に対応した3Dプリント可能なピクセルアート風フィジェットボードへと変換します。処理は2段階に分かれており、prototype(プロトタイプ)では写真をピクセルアート画像へと変換し、続くbuild(ビルド)ではその画像を16×16または32×32のグリッドへサンプリングして、各ピクセルを噛み合う正方形または六角形のピースへと変換します。最終的に、各オブジェクトが色情報を保持した単一の3MFとして出力されるため、マルチフィラメント対応のスライサーで各ピースを正しい色で印刷できます。この2つの段階は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

Fidget Pixel プロトタイプタスクの作成

元の写真から単一のピクセルアート画像を生成します。返されるタスク ID は、build エンドポイントに input_task_id として渡すものです。結果が望んだものでない場合は、この エンドポイントを再度呼び出して別のテイクを生成してください — 各 呼び出しは個別に課金されます。レスポンスの形については The Fidget Pixel Prototype Task Object を参照してください。

パラメータ

  • Name
    image_url
    Type
    string
    必須
    Description

    Meshy がピクセル化する元の写真。現在サポートしている形式は .jpg.jpeg.png.webp です。

    形式は画像データをデコードすることで検出され、URL のファイル拡張子からは判定されません — 拡張子のない URL や、リダイレクトする URL であっても、バイトデータがサポート対象の形式にデコードできる限り問題なく動作します。HTTP リダイレクトはたどられます。

    画像を指定する方法は2つあります。

    • 公開アクセス可能な URL: インターネット上から公開アクセス可能な URL。
    • Data URI: 画像を base64 エンコードした data URI。data URI の例: data:image/jpeg;base64,<your base64-encoded image data>
  • Name
    type
    Type
    string
    必須
    Description

    写真に写っているものを指定します。ピクセル化のスタイルを選択するため、慎重に選んでください — この2つは見た目に明確な違いのある結果を生成します。指定可能な値:

    • person — 被写体が人物(ポートレートまたは全身)の場合。被写体のちびキャラ風ピクセルスプライトを生成します。
    • other — それ以外のすべて: ペット、物体、マスコット、ロゴ、風景。被写体のビーズアート風ピクセルアイコンを生成します。
  • Name
    name
    Type
    string
    Description

    表示用の任意のタスク名。最大100文字。

返り値

レスポンスの result プロパティには、新しく作成された fidget pixel プロトタイプタスクのタスク id が含まれます。Get a Task エンドポイントをポーリングするか、stream を購読して、タスクが SUCCEEDED になるまで待ってから、その ID を build endpointinput_task_id として渡してください。

失敗モード

  • Name
    400 - Bad Request
    Description

    リクエストが受理できませんでした。よくある原因:

    • パラメータ不足: image_urltype はどちらも必須です。
    • 無効な type: typeperson または other である必要があります。
    • 無効な画像形式: 指定された image_url がサポート対象の形式(.jpg.jpeg.png.webp)ではありません。
    • 画像サイズが範囲外: 画像が小さすぎる、最大ファイルサイズを超えている、または最大ピクセル数を超えています。
    • URL に到達不可: image_url をダウンロードできませんでした(404 または timeout)。
    • 無効な Data URI: base64 文字列が不正な形式です。
    • コンテンツがフラグ付けされた: 入力画像が NSFW moderation によってフラグ付けされました。
  • Name
    401 - Unauthorized
    Description

    認証に失敗しました。APIキーを確認してください。

  • Name
    402 - Payment Required
    Description

    このタスクを実行するためのクレジットが不足しているか、APIキーが無料プランのアカウントに属しています。

  • Name
    403 - Forbidden
    Description

    入力画像が知的財産 moderation によってフラグ付けされました(Content flagged for intellectual property violation)。知的財産フィルタリングが有効な Enterprise アカウントのみがブロックされ、課金は発生しません。

  • Name
    429 - Too Many Requests
    Description

    レート制限を超過しました。

  • Name
    500 - Internal Server Error
    Description

    知的財産チェック自体を完了できませんでした(Unable to perform intellectual property check, please try again)。知的財産フィルタリングが有効な Enterprise アカウントは、このチェックで失敗した場合にフェイルクローズします — 課金は発生しませんので、リクエストを再試行してください。

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

Fidget Pixel ビルドタスクを作成する

成功したプロトタイプタスクから3Dプリント可能なピースを生成します。ビルドはプロトタイプのピクセルアート画像を指定されたグリッドにサンプリングし、最大color_count色に量子化して、グリッドセルごとに1つの噛み合うピースを生成します。成果物は単一の3MFファイルであり、その中では各ピースが色をタグ付けされた個別のオブジェクトとなっており、マルチフィラメント対応のスライサーですぐに使用できます。レスポンスの形式については、 Fidget Pixel ビルドタスクオブジェクト を参照してください。

パラメータ

  • Name
    input_task_id
    Type
    string
    必須
    Description

    同じOpenAPIエンドポイント経由で作成されたプロトタイプタスクのタスクIDです。プロトタイプは同じMeshyアカウントによって作成され、SUCCEEDEDに到達している必要があります。

    webapp経由で作成されたプロトタイプタスクは受け付けられません——ビルドエンドポイントはPOST /openapi/creative-lab/fidget-pixel/v1/prototypeによって生成されたプロトタイプタスクのみを受け付け、それ以外のソースは404で拒否します。

  • Name
    name
    Type
    string
    Description

    表示用のオプションのタスク名です。最大100文字です。

options

オプションのピースジオメトリです。各フィールドにはデフォルト値があります——上書きしたいものだけを送信してください。これらはCreative Lab webappが公開しているものと同じコントロールです。プラグの高さ、キャップスケール、その他の製造プリセットはshapepiece_size_mmから導出され、公開されていません。

  • Name
    shape
    Type
    string
    デフォルト square
    Description

    各ピースのフットプリントです。使用可能な値:

    • square(デフォルト)— 正方形グリッド上の正方形ピース。
    • hex — 六角形グリッド上の六角形ピース。六角形ピースは6mmと8mmのみで使用可能です。
  • Name
    grid_size
    Type
    integer
    デフォルト 32
    Description

    ボードの各辺に沿ったピースの数です。使用可能な値: 16または3232グリッドはより多くのディテールを保持し、16グリッドは同じ被写体に対してより少なく大きなピースになります。

  • Name
    piece_size_mm
    Type
    integer
    デフォルト 8
    Description

    各ピースの辺の長さ(ミリメートル単位)です。使用可能な値: 68、または10grid_sizeと組み合わせることで、印刷されるボードのサイズが決まります——例えば32 × 8 mm ≈ 1辺26 cmになります。10shape: "hex"では使用できません(斜めの六角形の面はほとんどの一般消費者向けFDMプリンターでオーバーハングになります)。

  • Name
    color_count
    Type
    integer
    デフォルト 8
    Description

    画像が量子化されるパレットの最大色数です。範囲: [1, 8]。各色はスライサーで1つのフィラメントになります。

  • Name
    piece_height_mm
    Type
    integer
    デフォルト 15
    Description

    各ピースの高さ(ミリメートル単位)です。範囲: [10, 80]

output

オプションの出力形式セレクターです。デフォルトは3mfで、現時点でこれが唯一サポートされている値です。

  • Name
    format
    Type
    string
    デフォルト 3mf
    Description

    ビルドによって返される成果物です。使用可能な値:

    • 3mf(デフォルト)— model_urls.3mfの下に単一のmodel.3mfを返します。ピースごとに1つのオブジェクトがあり、各オブジェクトにピースの色が付加されています。

戻り値

レスポンスのresultプロパティには、新しく作成されたfidget pixelビルドタスクのタスクidが含まれます。タスクがSUCCEEDEDに到達するまでタスクを取得するエンドポイントをポーリングするか、ストリームを購読し、その後model_urls.3mfから成果物をダウンロードしてください。

失敗モード

  • Name
    400 - Bad Request
    Description

    リクエストが受け付けられませんでした。一般的な原因:

    • パラメータの欠落: input_task_idは必須です。
    • 無効なUUID: input_task_idが有効なUUIDではありません。
    • 親タスクが未成功: 参照されているプロトタイプタスクがまだSUCCEEDEDに到達していません。
    • 候補なし: プロトタイプタスクは成功しましたが、ピクセルアート画像を生成しませんでした。新しいプロトタイプを作成してください。
    • オプションが範囲外: optionsのいずれかのフィールドが許可されたセットまたは範囲外です——例えばoptions.grid_size must be 16 or 32、またはoptions.piece_size_mm=10 is not supported for shape=hex; hex pieces are available in 6 and 8 mm
    • サポートされていない形式: output.format3mfである必要があります。
  • Name
    401 - Unauthorized
    Description

    認証に失敗しました。APIキーを確認してください。

  • Name
    402 - Payment Required
    Description

    このタスクを実行するためのクレジットが不足しているか、APIキーが無料プランのアカウントに属しています。

  • Name
    403 - Forbidden
    Description

    参照されているプロトタイプの画像が知的財産moderationによってフラグ付けされました。知的財産フィルタリングが有効なEnterpriseアカウントのみがブロックされます。料金は請求されません。

  • Name
    404 - Not Found
    Description

    参照されているプロトタイプタスクが存在しない、別のユーザーに属している、またはwebapp経由で作成されています(API modeのプロトタイプタスクのみがビルドに連鎖できます)。

  • Name
    429 - Too Many Requests
    Description

    レート制限を超えました。

  • Name
    500 - Internal Server Error
    Description

    参照されているプロトタイプの知的財産の判定を確立できませんでした(Unable to perform intellectual property check, please try again)。知的財産フィルタリングが有効なEnterpriseアカウントは、このチェックで失敗した場合にフェイルクローズします。料金は請求されません——リクエストを再試行してください。

Request

POST
/openapi/creative-lab/fidget-pixel/v1/build
# Stage 2: chain build off a succeeded prototype task
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "input_task_id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
    "options": {
      "shape": "square",
      "grid_size": 32,
      "piece_size_mm": 8,
      "color_count": 8,
      "piece_height_mm": 15
    },
    "output": {
      "format": "3mf"
    }
  }'

Response

{
  "result": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98"
}

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

Fidget Pixel タスクを取得

有効なタスク id を指定して、プロトタイプまたはビルドのタスクを取得します。URLパスは タスクのステージと一致している必要があります — /prototype/:id を通じて ビルドタスクを取得した場合は 404 が返され、その逆も同様です。

レスポンスの形式については、The Fidget Pixel Prototype Task Object および The Fidget Pixel Build Task Object を参照してください。

パラメータ

  • Name
    id
    Type
    path
    Description

    取得対象の fidget pixel タスクを識別する一意の識別子です。

戻り値

レスポンスには fidget pixel タスクオブジェクトが含まれます。その形式は リクエストされたステージによって異なります。

失敗モード

  • Name
    400 - Bad Request
    Description

    id が有効なUUIDではありません(Invalid ID)。

  • Name
    403 - Forbidden
    Description

    タスクの画像が知的財産モデレーションによってフラグ付けされました。知的財産フィルタリングが有効なEnterpriseアカウントのみがブロックされます。

  • Name
    404 - Not Found
    Description

    タスクが存在しない、別のユーザーに属している、またはそのステージがURLパスと一致していません。

  • Name
    500 - Internal Server Error
    Description

    知的財産チェックを完了できませんでした(Unable to perform intellectual property check, please try again)。知的財産フィルタリングが有効なEnterpriseアカウントはフェイルクローズ(安全側に倒して失敗)となります。リクエストを再試行してください。

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

Fidget Pixel タスクを削除する

fidget pixel タスクをキャンセルします。タスクがまだ PENDING の場合、作成時に消費されたクレジットは払い戻されます。すでに IN_PROGRESS のタスクは、払い戻しなしでキャンセルされます(ワーカーがすでにリソースを消費している可能性があるため)。 すでに終了状態(SUCCEEDEDFAILEDCANCELED)に達しているタスクはキャンセルできません。

URL パスはタスクのステージと一致している必要があります。/prototype/:buildId に対する DELETE404 を返します。

パスパラメータ

  • Name
    id
    Type
    path
    Description

    キャンセルする fidget pixel タスクの一意の識別子。

戻り値

成功時は空のボディとともに 204 No Content を返します。

失敗モード

  • Name
    400 - Bad Request
    Description

    リクエストが受け入れられませんでした。よくある原因:

    • 無効な IDid が有効な UUID ではありません。
    • 終了状態:タスクがすでに SUCCEEDEDFAILED、または CANCELED であり、キャンセルできません。
  • Name
    404 - Not Found
    Description

    タスクが存在しない、別のユーザーに属している、またはそのステージが URL パスと一致していません。

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

Fidget Pixel タスクをストリーミングする

Server-Sent Events (SSE) を介して、fidget pixel タスクのリアルタイム更新をストリーミングします。 URLパスはタスクのステージと一致している必要があります — /prototype/:buildId/stream でストリームを開くと、status_code: 404 を持つ単一の event: error ペイロードが発行され、ストリームは閉じられます。不正な形式の id の場合も同様に、 status_code: 400Invalid ID)で同じ動作となります。

パラメータ

  • Name
    id
    Type
    path
    Description

    ストリーミング対象の fidget pixel タスクを識別する一意のIDです。

戻り値

Server-Sent Events として、Fidget Pixel Prototype または Fidget Pixel Build タスクオブジェクトのストリームを返します。 各フレームには、そのステージの完全なタスクオブジェクトが含まれます — これは Get エンドポイントが返すものと同じ形状です — そのため、タスクが PENDING または IN_PROGRESS の間、 出力フィールドはまだ入力されておらず(null[]、または {})、 finished_atnull です。

Request

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

Response Stream

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

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

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

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

Fidget Pixel タスク一覧の取得

単一のステージにおけるfidget pixelタスクのページ分割されたリストを取得します。 URLパスがステージを選択します — /prototypeはプロトタイプタスクを返し、 /buildはビルドタスクを返します。もう一方のステージのタスクは、 どちらのレスポンスにも含まれません。

パスパラメータ

  • Name
    stage
    Type
    path
    必須
    Description

    prototypeまたはbuildのいずれかです。このコレクションは、URLに一致する ステージのタスクのみを返します — /prototypeを取得してもビルドタスクが 返されることはなく、その逆も同様です。

クエリパラメータ

  • Name
    page_num
    Type
    integer
    デフォルト 1
    Description

    ページネーションのためのページ番号。

  • Name
    page_size
    Type
    integer
    デフォルト 10
    Description

    ページサイズの上限。最大許容値は100件です。

  • Name
    sort_by
    Type
    string
    デフォルト -created_at
    Description

    並べ替えに使用するフィールド。使用可能な値:

    • +created_at: 作成日時の昇順で並べ替え。
    • -created_at: 作成日時の降順で並べ替え。

返り値

ステージごとのタスクオブジェクトのページ分割されたリストを返します — /prototypeを リストする場合はfidget pixelプロトタイプタスクオブジェクト/buildをリストする場合は fidget pixelビルドタスクオブジェクトです。

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

The Fidget Pixel Prototype Task Object

Fidget Pixel Prototype Task オブジェクトは、元となる写真をピクセルアートの画像にピクセル化するために Meshy が管理するワークユニットです。このステージの出力は、input_task_id を介してビルドステージへと連結されます。

プロパティ

  • Name
    id
    Type
    string
    Description

    タスクの一意な識別子です。実装の詳細としてタスク id には k-sortable UUID を使用していますが、id の形式についていかなる前提も置かないようにしてください。

  • Name
    type
    Type
    string
    Description

    タスクの種類です。値は creative-lab-fidget-pixel-prototype です。

  • Name
    name
    Type
    string
    Description

    タスク作成時に指定されたタスク名です。名前が指定されなかった場合は空文字列になります。

  • Name
    status
    Type
    string
    Description

    タスクのステータスです。取り得る値は PENDINGIN_PROGRESSSUCCEEDEDFAILEDCANCELED のいずれかです。

  • Name
    progress
    Type
    integer
    Description

    タスクの progress です。タスクがまだ開始されていない場合、このプロパティは 0 になります。タスクが成功すると 100 になります。

  • Name
    created_at
    Type
    timestamp
    Description

    タスクが作成された時刻のタイムスタンプ(ミリ秒単位)です。

  • Name
    started_at
    Type
    timestamp
    Description

    タスクが開始された時刻のタイムスタンプ(ミリ秒単位)です。タスクがまだ開始されていない場合、このプロパティは null になります。

  • Name
    finished_at
    Type
    timestamp
    Description

    タスクが終了した時刻のタイムスタンプ(ミリ秒単位)です。タスクがまだ終了していない場合、このプロパティは null になります。

  • Name
    expires_at
    Type
    timestamp
    Description

    タスクの結果が失効する時刻のタイムスタンプ(ミリ秒単位)です — タスク終了から3日後です。Enterprise アカウントは API の結果を無期限に保持します(アセット保持期間を参照)。その場合、このタイムスタンプは約100年先に設定されます。

  • Name
    preceding_tasks
    Type
    integer
    Description

    先行するタスクの数です。

  • Name
    task_error
    Type
    object
    Description

    失敗したタスクのエラー詳細です。task_error オブジェクトの完全なリファレンスについては、エラーを参照してください。

  • Name
    consumed_credits
    Type
    integer
    Description

    このタスクによって消費されたクレジットの数です。SUCCEEDED に達したタスクは、そのステージの全額が請求されます。作成すら行われなかったタスク(リクエスト時の 4xx、moderation による却下を含む)には一切請求されません。FAILED に達したタスクは 0 を返します — 請求分は返金されます。DELETE によるキャンセルは、タスクがまだ PENDING の間のみ返金されます。すでに IN_PROGRESS のタスクは、作業が消費済みであるため課金されたままです。

  • Name
    image_urls
    Type
    array of strings
    Description

    このプロトタイプタスクによって生成されたピクセルアート画像のダウンロード可能な URL です。現在、API は常にちょうど1枚の画像を返しますが、将来のリビジョンで破壊的変更なしに複数の候補を提供できるよう、このフィールドは配列になっています。タスクが SUCCEEDED に達するまでは空です。

    これらは署名付き URL です。Authorization ヘッダーなしで取得してください。これらは expires_atfinished_at の3日後)まで有効であり、その期間内にタスクを再度読み取ると、新しく署名された URL ではなく同一の URL が返されます。期限が切れる前に、ファイルを自身でダウンロードして保存してください。期限切れのリンクを更新する方法はありません。

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

The Fidget Pixel Build Task Object

Fidget Pixel Build Taskオブジェクトは、成功したプロトタイプタスクから印刷可能なパーツを生成するためにMeshyが管理する作業単位です。ビルドはプロトタイプのピクセルアート画像を要求されたグリッドにサンプリングし、単一のカラータグ付き3MFを生成します。

プロパティ

  • Name
    id
    Type
    string
    Description

    タスクの一意な識別子。

  • Name
    type
    Type
    string
    Description

    タスクのタイプ。値はcreative-lab-fidget-pixel-buildです。

  • Name
    name
    Type
    string
    Description

    タスク作成時に指定されたタスク名。名前が指定されなかった場合は空文字列になります。

  • Name
    status
    Type
    string
    Description

    タスクのステータス。取り得る値はPENDINGIN_PROGRESSSUCCEEDEDFAILEDCANCELEDのいずれかです。

  • Name
    progress
    Type
    integer
    Description

    タスクのprogress。タスクがまだ開始されていない場合、このプロパティは0になります。タスクが成功すると、100になります。

  • Name
    created_at
    Type
    timestamp
    Description

    タスクが作成された時点のタイムスタンプ(ミリ秒単位)。

  • Name
    started_at
    Type
    timestamp
    Description

    タスクが開始された時点のタイムスタンプ(ミリ秒単位)。タスクが開始されるまではnullです。

  • Name
    finished_at
    Type
    timestamp
    Description

    タスクが終了した時点のタイムスタンプ(ミリ秒単位)。タスクが終了するまではnullです。

  • Name
    expires_at
    Type
    timestamp
    Description

    タスク結果が失効する時点のタイムスタンプ(ミリ秒単位)— タスク終了の3日後です。エンタープライズアカウントはAPI結果を無期限に保持します(アセット保持期間を参照)。その場合、このタイムスタンプは約100年先に設定されます。

  • Name
    preceding_tasks
    Type
    integer
    Description

    先行タスクの数。ステータスがPENDINGの場合にのみ意味を持ちます。

  • Name
    task_error
    Type
    object
    Description

    失敗したタスクのエラー詳細。task_errorオブジェクトの完全なリファレンスについてはエラーを参照してください。

  • Name
    consumed_credits
    Type
    integer
    Description

    このタスクによって消費されたクレジットの数。SUCCEEDEDに到達したタスクは、そのステージの全額が課金されます。作成に至らなかったタスク(リクエスト時の4xx、moderationによる拒否を含む)はまったく課金されません。FAILEDに到達したタスクは0を返します — 課金分は返金されます。DELETEによるキャンセルは、タスクがまだPENDINGである間のみ返金されます。すでにIN_PROGRESSのタスクは、作業がすでに消費されているため課金されたままとなります。

  • Name
    model_urls
    Type
    object
    Description

    生成されたアセットのダウンロード可能なURLで、フォーマットごとにキー付けされています。ビルドリクエストのoutput.formatで要求されたフォーマットに対応するエントリを1つだけ含みます。タスクがSUCCEEDEDに到達するまでは空です。

    これらは署名付きURLです。Authorizationヘッダーなしで取得してください。これらはexpires_atfinished_atの3日後)まで有効であり、その期間内にタスクを再読み込みすると、新しく署名されたURLではなく同一のURLが返されます。期限切れになる前に、自分でファイルをダウンロードして保存してください。期限切れになったリンクを更新する方法はありません。

    • Name
      3mf
      Type
      string
      Description

      3MFファイルへのダウンロード可能なURL。ピースごとに1つのオブジェクトがあり、それぞれにパレットの色がタグ付けされているため、マルチフィラメント対応のスライサーが色ごとにフィラメントを割り当てます。output.format3mf(デフォルト)だった場合に存在します。

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

エンドツーエンドの例

完全なフロー: 写真からプロトタイプを作成し、SUCCEEDED になるまでポーリングし、そこからビルドを作成し、ビルドが SUCCEEDED になるまでポーリングしてから、model_urls から3MFをダウンロードします。

プロトタイプは通常数分以内に完了し、ビルドは通常1分未満で完了します。実際の統合では、ビルドにクレジットを費やす前に、エンドユーザーにプロトタイプの image_urls エントリを表示し、確認(またはプロトタイプの再実行)をさせるようにします。

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"