Creative Lab — API Fidget Pixel

Transforme uma foto de origem numa placa fidget de pixel art multicolor imprimível em 3D, em duas fases: prototype pixeliza a sua foto numa imagem de pixel art, e depois build amostra essa imagem numa grelha de 16×16 ou 32×32 e transforma cada pixel numa peça quadrada ou hexagonal interligada, entregue como um único 3MF cujos objetos transportam as suas cores, para que um software de corte multi-filamento imprima cada peça na cor correta. As duas fases estão ligadas através de 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

Create a Fidget Pixel Prototype Task

Gera uma única imagem em pixel art a partir da foto de origem. O ID de tarefa devolvido é o que passa como input_task_id para o endpoint de build. Chame este endpoint novamente para obter outro resultado, caso o resultado não seja o pretendido — cada chamada é faturada separadamente. Consulte The Fidget Pixel Prototype Task Object para conhecer a estrutura da resposta.

Parâmetros

  • Name
    image_url
    Type
    string
    Obrigatório
    Description

    Foto de origem para o Meshy pixelizar. Atualmente suportamos os formatos .jpg, .jpeg, .png e .webp.

    O formato é detetado através da descodificação dos dados da imagem, não a partir da extensão do ficheiro no URL — um URL sem extensão, ou que redirecione, funciona desde que os bytes sejam descodificados para um formato suportado. Os redirecionamentos HTTP são seguidos.

    Existem duas formas de fornecer a imagem:

    • URL publicamente acessível: Um URL acessível a partir da internet pública.
    • Data URI: Um data URI da imagem codificado em base64. Exemplo de um data URI: data:image/jpeg;base64,<your base64-encoded image data>.
  • Name
    type
    Type
    string
    Obrigatório
    Description

    O que a foto mostra. Seleciona o estilo de pixelização, por isso escolha com atenção — os dois produzem resultados visivelmente diferentes. Valores disponíveis:

    • person — o sujeito é uma pessoa (retrato ou corpo inteiro). Produz um sprite em pixel de estilo chibi do sujeito.
    • other — qualquer outra coisa: animais de estimação, objetos, mascotes, logótipos, paisagens. Produz um ícone em pixel de estilo bead-art do sujeito.
  • Name
    name
    Type
    string
    Description

    Nome de tarefa opcional para efeitos de exibição. Máximo de 100 caracteres.

Devolve

A propriedade result da resposta contém o id da tarefa da tarefa de protótipo fidget pixel recém-criada. Faça polling ao endpoint Get a Task ou subscreva o stream até que a tarefa atinja SUCCEEDED, e depois passe esse ID para o endpoint de build como input_task_id.

Modos de Falha

  • Name
    400 - Bad Request
    Description

    O pedido era inaceitável. Causas comuns:

    • Parâmetro em falta: image_url e type são ambos obrigatórios.
    • Type inválido: type deve ser person ou other.
    • Formato de imagem inválido: O image_url fornecido não corresponde a um formato suportado (.jpg, .jpeg, .png, .webp).
    • Dimensões da imagem fora do intervalo: A imagem é demasiado pequena, excede o tamanho máximo de ficheiro, ou excede o número máximo de pixels.
    • URL inacessível: Não foi possível transferir o image_url (404 ou timeout).
    • Data URI inválido: A string base64 está mal formada.
    • Conteúdo sinalizado: A imagem de entrada foi sinalizada pela moderation de NSFW.
  • Name
    401 - Unauthorized
    Description

    A autenticação falhou. Verifique a sua chave de API.

  • Name
    402 - Payment Required
    Description

    Créditos insuficientes para realizar esta tarefa, ou a chave de API pertence a uma conta de plano gratuito.

  • Name
    403 - Forbidden
    Description

    A imagem de entrada foi sinalizada pela moderation de propriedade intelectual (Content flagged for intellectual property violation). Apenas as contas Enterprise com filtragem de propriedade intelectual ativada são bloqueadas; nada é cobrado.

  • Name
    429 - Too Many Requests
    Description

    Excedeu o seu limite de taxa.

  • Name
    500 - Internal Server Error
    Description

    A verificação de propriedade intelectual em si não pôde ser concluída (Unable to perform intellectual property check, please try again). As contas Enterprise com filtragem de propriedade intelectual ativada falham de forma fechada nesta verificação; nada é cobrado — repita o pedido.

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

Criar uma tarefa de build Fidget Pixel

Gera as peças imprimíveis em 3D a partir de uma tarefa de protótipo bem-sucedida. O build amostra a imagem de pixel art do protótipo para a grelha solicitada, quantiza-a para no máximo color_count cores, e gera uma peça interligada por célula da grelha. O entregável é um único 3MF no qual cada peça é um objeto separado marcado com a sua cor, pronto para um software de corte multi-filamento. Consulte The Fidget Pixel Build Task Object para saber a forma da resposta.

Parâmetros

  • Name
    input_task_id
    Type
    string
    Obrigatório
    Description

    O ID da tarefa de um protótipo criado através deste mesmo endpoint OpenAPI. O protótipo deve ter sido criado pela mesma conta Meshy e deve ter atingido SUCCEEDED.

    Tarefas de protótipo criadas através da webapp não são aceites — o endpoint de build aceita apenas tarefas de protótipo produzidas por POST /openapi/creative-lab/fidget-pixel/v1/prototype e recusa qualquer outra origem com 404.

  • Name
    name
    Type
    string
    Description

    Nome opcional da tarefa para fins de exibição. Máximo de 100 caracteres.

options

Geometria opcional das peças. Todos os campos têm um valor predefinido — envie apenas os que pretende substituir. Estes são os mesmos controlos que a webapp Creative Lab expõe; a altura do encaixe, a escala da tampa e as outras predefinições de fabrico são derivadas de shape e piece_size_mm e não são expostas.

  • Name
    shape
    Type
    string
    predefinição square
    Description

    Forma de base de cada peça. Valores disponíveis:

    • square (predefinição) — peças quadradas numa grelha quadrada.
    • hex — peças hexagonais numa grelha hexagonal. As peças hex estão disponíveis apenas em 6 e 8 mm.
  • Name
    grid_size
    Type
    integer
    predefinição 32
    Description

    Número de peças ao longo de cada lado do tabuleiro. Valores disponíveis: 16 ou 32. Uma grelha 32 mantém mais detalhe; uma grelha 16 significa peças menos numerosas e maiores para o mesmo assunto.

  • Name
    piece_size_mm
    Type
    integer
    predefinição 8
    Description

    Comprimento da aresta de cada peça, em milímetros. Valores disponíveis: 6, 8, ou 10. Em conjunto com grid_size, isto define o tamanho do tabuleiro impresso — por exemplo, 32 × 8 mm ≈ 26 cm por lado. O valor 10 não está disponível para shape: "hex" (a face hexagonal inclinada causa saliências na maioria das impressoras FDM de consumo).

  • Name
    color_count
    Type
    integer
    predefinição 8
    Description

    Número máximo de cores na paleta para a qual a imagem é quantizada. Intervalo: [1, 8]. Cada cor torna-se um filamento no seu software de corte.

  • Name
    piece_height_mm
    Type
    integer
    predefinição 15
    Description

    Altura de cada peça, em milímetros. Intervalo: [10, 80].

output

Seletor opcional do formato de saída. A predefinição é 3mf, que é atualmente o único valor suportado.

  • Name
    format
    Type
    string
    predefinição 3mf
    Description

    Artefacto devolvido pelo build. Valores disponíveis:

    • 3mf (predefinição) — devolve um único model.3mf em model_urls.3mf, com um objeto por peça e a cor da peça associada a cada objeto.

Retorna

A propriedade result da resposta contém o id da tarefa da tarefa de build fidget pixel recém-criada. Consulte periodicamente o endpoint Get a Task ou subscreva o stream até a tarefa atingir SUCCEEDED, e depois transfira o artefacto a partir de model_urls.3mf.

Modos de Falha

  • Name
    400 - Bad Request
    Description

    O pedido foi inaceitável. Causas comuns:

    • Parâmetro em falta: input_task_id é obrigatório.
    • UUID inválido: input_task_id não é um UUID válido.
    • Parente não bem-sucedido: A tarefa de protótipo referenciada ainda não atingiu SUCCEEDED.
    • Sem candidato: A tarefa de protótipo foi bem-sucedida mas não produziu nenhuma imagem de pixel art; crie um novo protótipo.
    • Opções fora do intervalo: Um dos campos de options está fora do conjunto ou intervalo permitido — por exemplo options.grid_size must be 16 or 32, ou options.piece_size_mm=10 is not supported for shape=hex; hex pieces are available in 6 and 8 mm.
    • Formato não suportado: output.format deve ser 3mf.
  • Name
    401 - Unauthorized
    Description

    Falha na autenticação. Verifique a sua chave de API.

  • Name
    402 - Payment Required
    Description

    Créditos insuficientes para realizar esta tarefa, ou a chave de API pertence a uma conta de plano gratuito.

  • Name
    403 - Forbidden
    Description

    A imagem do protótipo referenciado foi sinalizada pela moderation de propriedade intelectual. Apenas contas Enterprise com filtragem de propriedade intelectual ativada são bloqueadas; nada é cobrado.

  • Name
    404 - Not Found
    Description

    A tarefa de protótipo referenciada não existe, pertence a outro utilizador, ou foi criada através da webapp (apenas tarefas de protótipo em modo API se encadeiam com o build).

  • Name
    429 - Too Many Requests
    Description

    Excedeu o seu limite de taxa.

  • Name
    500 - Internal Server Error
    Description

    Não foi possível estabelecer o veredito de propriedade intelectual do protótipo referenciado (Unable to perform intellectual property check, please try again). Contas Enterprise com filtragem de propriedade intelectual ativada falham de forma fechada nesta verificação; nada é cobrado — tente novamente o pedido.

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

Obter uma tarefa Fidget Pixel

Obtenha uma tarefa de protótipo ou de construção com base num id de tarefa válido. O caminho do URL tem de corresponder à fase da tarefa — uma tarefa de construção obtida através de /prototype/:id devolve 404, e vice-versa.

Consulte O Objeto de Tarefa de Protótipo Fidget Pixel e O Objeto de Tarefa de Construção Fidget Pixel para conhecer os formatos de resposta.

Parâmetros

  • Name
    id
    Type
    path
    Description

    Identificador único da tarefa fidget pixel a obter.

Devolve

A resposta contém o objeto de tarefa fidget pixel. O formato depende de qual fase foi solicitada.

Modos de Falha

  • Name
    400 - Bad Request
    Description

    id não é um UUID válido (Invalid ID).

  • Name
    403 - Forbidden
    Description

    A imagem da tarefa foi sinalizada pela moderação de propriedade intelectual. Apenas as contas Enterprise com a filtragem de propriedade intelectual ativada são bloqueadas.

  • Name
    404 - Not Found
    Description

    A tarefa não existe, pertence a outro utilizador ou a sua fase não corresponde ao caminho do URL.

  • Name
    500 - Internal Server Error
    Description

    Não foi possível concluir a verificação de propriedade intelectual (Unable to perform intellectual property check, please try again); as contas Enterprise com a filtragem de propriedade intelectual ativada falham de forma bloqueante. Tente novamente o pedido.

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

Eliminar uma Tarefa Fidget Pixel

Cancela uma tarefa fidget pixel. Se a tarefa ainda estiver PENDING, os créditos consumidos no momento da criação são reembolsados. Tarefas que já estejam IN_PROGRESS são canceladas sem reembolso (é possível que o worker já esteja a consumir recursos). Tarefas que já tenham atingido um estado terminal (SUCCEEDED, FAILED, CANCELED) não podem ser canceladas.

O caminho do URL deve corresponder à fase da tarefa — DELETE em /prototype/:buildId devolve 404.

Parâmetros de Caminho

  • Name
    id
    Type
    path
    Description

    Identificador único da tarefa fidget pixel a cancelar.

Devolve

Devolve 204 No Content em caso de sucesso, com um corpo vazio.

Modos de Falha

  • Name
    400 - Bad Request
    Description

    O pedido foi considerado inaceitável. Causas comuns:

    • ID inválido: id não é um UUID válido.
    • Estado terminal: A tarefa já está SUCCEEDED, FAILED ou CANCELED e não pode ser cancelada.
  • Name
    404 - Not Found
    Description

    A tarefa não existe, pertence a um utilizador diferente, ou a sua fase não corresponde ao caminho do 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

Transmitir uma tarefa Fidget Pixel

Transmite atualizações em tempo real para uma tarefa fidget pixel através de Server-Sent Events (SSE). O caminho do URL deve corresponder à fase da tarefa — abrir um stream em /prototype/:buildId/stream emite um único event: error payload com status_code: 404 e fecha o stream; um id mal formado faz o mesmo com status_code: 400 (Invalid ID).

Parâmetros

  • Name
    id
    Type
    path
    Description

    Identificador único da tarefa fidget pixel a transmitir.

Retorna

Devolve um stream de objetos de tarefa Fidget Pixel Prototype ou Fidget Pixel Build como Server-Sent Events. Cada frame contém o objeto de tarefa completo para a respetiva fase — a mesma forma devolvida pelo endpoint Get — pelo que, enquanto a tarefa está PENDING ou IN_PROGRESS, os campos de saída simplesmente ainda não estão preenchidos (null, [] ou {}) e finished_at é 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)

Listar Tarefas Fidget Pixel

Obtenha uma lista paginada das suas tarefas fidget pixel para uma única fase. O caminho do URL seleciona a fase — /prototype devolve tarefas de protótipo; /build devolve tarefas de build. As tarefas da outra fase não são incluídas em nenhuma das respostas.

Parâmetros de Caminho

  • Name
    stage
    Type
    path
    Obrigatório
    Description

    prototype ou build. A coleção devolve apenas as tarefas cuja fase corresponde ao URL — pedir /prototype nunca devolve tarefas de build e vice-versa.

Parâmetros de Consulta

  • Name
    page_num
    Type
    integer
    predefinição 1
    Description

    Número da página para paginação.

  • Name
    page_size
    Type
    integer
    predefinição 10
    Description

    Limite do tamanho da página. O máximo permitido é 100 itens.

  • Name
    sort_by
    Type
    string
    predefinição -created_at
    Description

    Campo pelo qual ordenar. Valores disponíveis:

    • +created_at: Ordenar pela hora de criação por ordem crescente.
    • -created_at: Ordenar pela hora de criação por ordem decrescente.

Devolve

Devolve uma lista paginada do objeto de tarefa por fase — quer o objeto de tarefa de protótipo fidget pixel ao listar /prototype, quer o objeto de tarefa de build fidget pixel ao listar /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=***"
    ]
  }
]

O objeto Task de Protótipo Fidget Pixel

O objeto Task de Protótipo Fidget Pixel é uma unidade de trabalho que a Meshy monitoriza para transformar uma foto de origem numa imagem em pixel art. O resultado desta etapa é encadeado com a etapa de construção através de input_task_id.

Propriedades

  • Name
    id
    Type
    string
    Description

    Identificador único da tarefa. Embora usemos um UUID k-sortable para os ids das tarefas como detalhe de implementação, não deve fazer quaisquer suposições sobre o formato do id.

  • Name
    type
    Type
    string
    Description

    Tipo da tarefa. O valor é creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    O nome da tarefa fornecido no momento da criação da tarefa. Cadeia vazia caso não tenha sido fornecido nenhum nome.

  • Name
    status
    Type
    string
    Description

    Estado da tarefa. Os valores possíveis são PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progress da tarefa. Se a tarefa ainda não tiver começado, esta propriedade será 0. Assim que a tarefa for concluída com sucesso, este valor passará a ser 100.

  • Name
    created_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando a tarefa foi criada, em milissegundos.

  • Name
    started_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando a tarefa foi iniciada, em milissegundos. Se a tarefa ainda não tiver começado, esta propriedade será null.

  • Name
    finished_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando a tarefa foi concluída, em milissegundos. Se a tarefa ainda não tiver sido concluída, esta propriedade será null.

  • Name
    expires_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando o resultado da tarefa expira, em milissegundos — 3 dias após a conclusão da tarefa. As contas empresariais mantêm os resultados da API indefinidamente (ver Retenção de recursos); para essas contas, este carimbo de data/hora é definido para cerca de 100 anos no futuro.

  • Name
    preceding_tasks
    Type
    integer
    Description

    A contagem de tarefas precedentes.

  • Name
    task_error
    Type
    object
    Description

    Detalhes do erro para tarefas com falha. Consulte Erros para a referência completa do objeto task_error.

  • Name
    consumed_credits
    Type
    integer
    Description

    O número de créditos consumidos por esta tarefa. Uma tarefa que atinge SUCCEEDED é cobrada com o valor total correspondente à sua etapa. Uma tarefa que nunca chega a ser criada (um 4xx no momento do pedido, incluindo uma rejeição por moderation) não é cobrada de todo. Uma tarefa que atinge FAILED retorna 0 — o valor cobrado é reembolsado. Cancelar através de DELETE só reembolsa enquanto a tarefa ainda estiver PENDING; uma tarefa já IN_PROGRESS mantém-se cobrada, pois o trabalho já foi realizado.

  • Name
    image_urls
    Type
    array of strings
    Description

    URLs transferíveis para a imagem em pixel art gerada por esta tarefa de protótipo. Atualmente, a API devolve sempre exatamente uma imagem; o campo é um array para que revisões futuras possam apresentar múltiplos candidatos sem uma alteração disruptiva. Vazio até a tarefa atingir SUCCEEDED.

    Estes são URLs assinados: obtenha-os sem um cabeçalho Authorization. Mantêm-se válidos até expires_at, que corresponde a 3 dias após finished_at, e voltar a ler a tarefa dentro desse período devolve o URL idêntico em vez de um novo URL assinado. Transfira e guarde os ficheiros por conta própria antes disso — não há forma de renovar uma ligação expirada.

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

O Objeto de Tarefa de Build Fidget Pixel

O objeto de Tarefa de Build Fidget Pixel é uma unidade de trabalho que a Meshy monitoriza para gerar as peças imprimíveis a partir de uma tarefa de protótipo bem-sucedida. O build amostra a imagem em pixel art do protótipo para a grelha solicitada e publica um único ficheiro 3MF com etiquetas de cor.

Propriedades

  • Name
    id
    Type
    string
    Description

    Identificador único da tarefa.

  • Name
    type
    Type
    string
    Description

    Tipo da tarefa. O valor é creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    O nome da tarefa fornecido quando a tarefa foi criada. Cadeia vazia se não tiver sido fornecido nenhum nome.

  • Name
    status
    Type
    string
    Description

    Estado da tarefa. Os valores possíveis são um de PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    progress
    Type
    integer
    Description

    Progresso da tarefa. Se a tarefa ainda não tiver começado, esta propriedade será 0. Assim que a tarefa for bem-sucedida, este valor passará a ser 100.

  • Name
    created_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando a tarefa foi criada, em milissegundos.

  • Name
    started_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando a tarefa foi iniciada, em milissegundos. null até a tarefa começar.

  • Name
    finished_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando a tarefa foi concluída, em milissegundos. null até a tarefa terminar.

  • Name
    expires_at
    Type
    timestamp
    Description

    Carimbo de data/hora de quando o resultado da tarefa expira, em milissegundos — 3 dias após a conclusão da tarefa. As contas Enterprise mantêm os resultados da API indefinidamente (ver Retenção de Recursos); para essas contas, este carimbo de data/hora é definido para cerca de 100 anos no futuro.

  • Name
    preceding_tasks
    Type
    integer
    Description

    A contagem de tarefas precedentes. Significativo apenas quando o estado é PENDING.

  • Name
    task_error
    Type
    object
    Description

    Detalhes do erro para tarefas falhadas. Consulte Erros para a referência completa do objeto task_error.

  • Name
    consumed_credits
    Type
    integer
    Description

    O número de créditos consumidos por esta tarefa. Uma tarefa que atinge SUCCEEDED é cobrada com o valor total correspondente à sua fase. Uma tarefa que nunca chega a ser criada (um 4xx no momento do pedido, incluindo uma rejeição por moderation) não é cobrada de todo. Uma tarefa que atinge FAILED devolve 0 — o valor cobrado é reembolsado. Cancelar através de DELETE só reembolsa enquanto a tarefa ainda estiver PENDING; uma tarefa já IN_PROGRESS mantém-se cobrada, porque o trabalho já foi despendido.

  • Name
    model_urls
    Type
    object
    Description

    URLs para transferência do artefacto gerado, indexados por formato. Contém exatamente uma entrada — o formato solicitado através de output.format no pedido de build. Vazio até a tarefa atingir SUCCEEDED.

    Estes são URLs assinados: obtenha-os sem um cabeçalho Authorization. Permanecem válidos até expires_at, que corresponde a 3 dias após finished_at, e voltar a ler a tarefa dentro desse período devolve o mesmo URL em vez de um novo assinado. Transfira e guarde os ficheiros por conta própria antes disso — não há forma de renovar uma ligação expirada.

    • Name
      3mf
      Type
      string
      Description

      URL para transferência do ficheiro 3MF. Um objeto por peça, cada um etiquetado com a sua cor da paleta, para que um software de corte multi-filamento atribua filamentos por cor. Presente quando output.format era 3mf (o valor predefinido).

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

Exemplo completo (ponta a ponta)

O fluxo completo: criar um protótipo a partir de uma fotografia, fazer polling até SUCCEEDED, criar uma construção (build) a partir dele, fazer polling da construção até SUCCEEDED e, depois, transferir o 3MF a partir de model_urls.

Um protótipo termina normalmente dentro de alguns minutos; uma construção tipicamente é concluída em bem menos de um minuto. Numa integração real, mostraria a entrada image_urls do protótipo ao utilizador final e deixaria que este confirmasse (ou voltasse a executar o protótipo) antes de gastar créditos na construção.

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"