lowpoly será descontinuado em 30 de out. de 2026. Troque de modelo antes dessas datas para evitar erros nas solicitações. Ver todas as descontinuações

API Creative Lab Fidget Pixel

Transforme uma foto em uma placa fidget de pixel art multicolorida e imprimível em 3D em duas etapas. Uma tarefa de protótipo transforma a foto em uma imagem de pixel art. Uma tarefa de build transforma essa imagem em peças encaixáveis em um único arquivo 3MF, e utiliza o ID da tarefa de protótipo como input_task_id.

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

Ambos os endpoints POST exigem um plano pago. Uma requisição feita a partir de uma conta do plano gratuito retorna 402.


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

Criar uma tarefa de protótipo do Fidget Pixel

Gera uma imagem em pixel art a partir de uma foto. Para criar as peças, passe o ID dessa tarefa para o endpoint de build como input_task_id. Para os campos da tarefa, consulte O objeto de tarefa de protótipo do Fidget Pixel.

Se você não gostar da imagem, crie outra tarefa de protótipo. Cada tarefa é cobrada separadamente.

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

Parâmetros

  • Name
    image_url
    Type
    string
    Obrigatório
    Description

    A foto a ser transformada em pixel art, como uma URL pública ou um Data URI (data:image/jpeg;base64,<seus dados de imagem codificados em base64>).

    A imagem deve ser um arquivo JPG, JPEG, PNG ou WebP de no máximo 20 MB. A Meshy detecta o formato a partir dos dados da imagem, não da extensão do arquivo na URL. Uma URL sem extensão funciona, e a Meshy segue redirecionamentos.

  • Name
    type
    Type
    string
    Obrigatório
    Description

    O que a foto mostra, o que define o estilo da pixel art. Os dois estilos têm uma aparência claramente diferente. Qualquer outro valor retorna 400.

    Valores disponíveis:

    • person: uma pessoa, em um retrato ou em uma foto de corpo inteiro. A Meshy desenha um sprite em pixel no estilo chibi.
    • other: qualquer outro assunto, por exemplo um animal de estimação, um objeto, um mascote, um logotipo ou uma paisagem. A Meshy desenha um ícone em pixel no estilo bead-art.
  • Name
    name
    Type
    string
    Description

    Um nome para a tarefa, com até 100 caracteres. Ele é retornado no campo name da tarefa. Um nome mais longo retorna 400.

Retornos

O campo result contém o ID da nova tarefa de protótipo. Obtenha a tarefa ou transmita-a em stream até que status seja SUCCEEDED. Em seguida, passe o ID para o endpoint de build como input_task_id.

Modos de falha

  • Name
    400 - Bad Request
    Description

    A solicitação não pode ser executada. Por exemplo:

    • image_url ou type está ausente.
    • type não é person nem other.
    • A imagem não é um arquivo JPG, JPEG, PNG ou WebP.
    • A imagem é muito pequena, excede 20 MB ou excede a contagem máxima de pixels.
    • A Meshy não consegue baixar a imagem, por exemplo porque a URL retorna 404 ou expira por tempo limite.
    • O Data URI não é um base64 válido.
    • A imagem foi sinalizada como NSFW.

    A mensagem de erro indica qual problema foi encontrado. Corrija a solicitação e envie-a novamente.

  • Name
    401 - Unauthorized
    Description

    A chave de API está ausente ou é inválida. Verifique o cabeçalho Authorization.

  • Name
    402 - Payment Required
    Description

    Uma destas situações se aplica:

    • A conta não tem créditos suficientes.
    • A chave de API, o espaço de trabalho ou o membro atingiu seu limite de créditos.
    • A conta está no plano gratuito.

    Verifique seus créditos e seu plano e tente novamente.

  • Name
    403 - Forbidden
    Description

    Sua equipe está com a Filtragem de IP ativada, e a Meshy sinalizou a imagem por propriedade intelectual de terceiros. Envie uma imagem que você tenha os direitos de uso.

  • Name
    429 - Too Many Requests
    Description

    Um destes limites foi atingido:

    • Você enviou mais solicitações do que o seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Consulte Limites de taxa.
    • Há muitas tarefas suas na fila ou em execução. Aguarde algumas terminarem e tente novamente.
    • Em um plano ilimitado sem créditos restantes, você atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde uma tarefa terminar ou adicione créditos.
  • Name
    500 - Internal Server Error
    Description

    A Meshy encontrou um erro de servidor, por exemplo porque não conseguiu executar a verificação de propriedade intelectual na imagem. A Meshy não cria a tarefa e reembolsa quaisquer créditos cobrados. Tente a solicitação novamente.


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

Criar uma tarefa de build do Fidget Pixel

Gera as peças prontas para impressão 3D a partir de uma tarefa de protótipo bem-sucedida. A Meshy amostra a imagem em pixel art na grade e a reduz a no máximo color_count cores. Cada célula do sujeito se torna uma peça encaixável, e o fundo não é impresso.

O resultado é um único arquivo 3MF multicolorido, pronto para impressão colorida. Cada peça tem um corpo cinza e um topo na cor do seu pixel. Para conhecer seus campos, veja O objeto da tarefa de build do Fidget Pixel.

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

Parâmetros

  • Name
    input_task_id
    Type
    string
    Obrigatório
    Description

    O ID da tarefa de protótipo a ser construída. Deve ser uma tarefa criada pela sua conta com POST /openapi/creative-lab/fidget-pixel/v1/prototype, com o status SUCCEEDED.

    Um ID que não corresponde a uma de suas tarefas de protótipo do Fidget Pixel criadas pela API retorna 404, incluindo um protótipo feito no aplicativo web.

  • Name
    name
    Type
    string
    Description

    Um nome para a tarefa, com até 100 caracteres. Ele retorna no campo name da tarefa. Um nome mais longo retorna 400.

options

Configurações para o formato e tamanho das peças. Todo campo tem um valor padrão, então envie apenas os campos que deseja alterar. Um 0 usa o padrão do campo. São as mesmas configurações do aplicativo web do Creative Lab. Outras configurações de formato são fixas, e a Meshy as define a partir de shape e piece_size_mm.

  • Name
    shape
    Type
    string
    padrão square
    Description

    A pegada (footprint) de cada peça. Qualquer outro valor retorna 400.

    Valores disponíveis:

    • square: peças quadradas em uma grade quadrada
    • hex: peças hexagonais em uma grade hexagonal, com piece_size_mm definido como 6 ou 8
  • Name
    grid_size
    Type
    integer
    padrão 32
    Description

    O número de células da grade ao longo de cada lado do tabuleiro, 16 ou 32. Qualquer outro valor retorna 400. Uma grade 32 mantém mais detalhes. Uma grade 16 gera menos peças do mesmo tamanho, então o tabuleiro fica com cerca de metade da largura.

  • Name
    piece_size_mm
    Type
    integer
    padrão 8
    Description

    O comprimento da aresta de cada peça em milímetros, 6, 8 ou 10. Qualquer outro valor retorna 400. Junto com grid_size, define o tamanho do tabuleiro impresso. Por exemplo, uma grade 32 com peças de 8 mm tem cerca de 26,5 cm por lado.

    10 não funciona com hex e retorna 400, porque a face inclinada do hexágono gera saliências (overhang) na maioria das impressoras FDM para consumidor.

  • Name
    color_count
    Type
    integer
    padrão 8
    Description

    O número máximo de cores na paleta da pixel art, de 1 a 8. Um valor fora do intervalo retorna 400. Para imprimir, você precisa de até color_count mais um filamentos, um por cor e um para os corpos cinzas.

  • Name
    piece_height_mm
    Type
    integer
    padrão 15
    Description

    A altura de cada peça em milímetros, de 10 a 80. Um valor fora do intervalo retorna 400.

output

Configurações para o arquivo de resultado.

  • Name
    format
    Type
    string
    padrão 3mf
    Description

    O formato do arquivo do resultado. Qualquer outro valor retorna 400.

    Valores disponíveis:

    • 3mf: um único arquivo model.3mf multicolorido, retornado em model_urls.3mf

Retornos

O campo result contém o ID da nova tarefa de build. Obtenha a tarefa ou transmita-a em stream até que status seja SUCCEEDED. Em seguida, baixe o arquivo 3MF a partir de model_urls.3mf.

Modos de falha

  • Name
    400 - Bad Request
    Description

    A solicitação não pode ser executada. Por exemplo:

    • input_task_id está ausente ou não é um ID de tarefa válido.
    • O status da tarefa de protótipo não é SUCCEEDED. Se ainda estiver em execução, aguarde e tente novamente. Se falhou ou foi cancelada, crie uma nova tarefa de protótipo.
    • A tarefa de protótipo foi bem-sucedida, mas não tem imagem. Crie uma nova tarefa de protótipo.
    • Um campo de options está fora dos valores permitidos, por exemplo, um grid_size diferente de 16 ou 32.
    • piece_size_mm é 10 e shape é hex. Peças hexagonais vêm apenas em 6 e 8 mm.
    • output.format não é 3mf.

    A mensagem de erro informa qual problema foi encontrado.

  • Name
    401 - Unauthorized
    Description

    A chave de API está ausente ou inválida. Verifique o cabeçalho Authorization.

  • Name
    402 - Payment Required
    Description

    Uma destas situações se aplica:

    • A conta não tem créditos suficientes.
    • A chave de API, o espaço de trabalho ou o membro atingiu seu limite de créditos.
    • A conta está no plano gratuito.

    Verifique seus créditos e seu plano, depois tente novamente.

  • Name
    403 - Forbidden
    Description

    Sua equipe tem a Filtragem de IP ativada, e a Meshy sinalizou a imagem da tarefa de protótipo por propriedade intelectual de terceiros. Crie uma tarefa de protótipo a partir de uma imagem sobre a qual você tem os direitos de uso.

  • Name
    404 - Not Found
    Description

    input_task_id não corresponde a nenhuma tarefa de protótipo do Fidget Pixel criada pela sua conta por meio da API. Um protótipo feito no aplicativo web também retorna 404. Envie o ID result de uma resposta de criação de protótipo.

  • Name
    429 - Too Many Requests
    Description

    Um destes limites foi atingido:

    • Você enviou mais solicitações do que seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Veja Limites de taxa.
    • Há muitas tarefas suas na fila ou em execução. Aguarde algumas terminarem e tente novamente.
    • Em um plano ilimitado sem créditos restantes, você atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde uma tarefa terminar ou adicione créditos.
  • Name
    500 - Internal Server Error
    Description

    A Meshy encontrou um erro de servidor, por exemplo, porque não conseguiu executar a verificação de propriedade intelectual na imagem da tarefa de protótipo. A Meshy não cria a tarefa e reembolsa quaisquer créditos cobrados. Tente novamente a solicitação.


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

Obter uma tarefa do Fidget Pixel

Retorna uma tarefa de protótipo ou de build. O caminho deve corresponder ao estágio da tarefa. Uma tarefa de build solicitada por meio de /prototype/:id retorna 404, assim como uma tarefa de protótipo solicitada por meio de /build/:id.

Para os campos, consulte O objeto de tarefa de protótipo do Fidget Pixel e O objeto de tarefa de build do 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=***"
  }
}

Parâmetros

  • Name
    id
    Type
    path
    Description

    O ID da tarefa a partir da resposta de criação.

Retornos

O objeto de tarefa de protótipo ou o objeto de tarefa de build, correspondente ao estágio indicado no caminho.

Modos de falha

  • Name
    400 - Bad Request
    Description

    id não é um ID de tarefa válido. Envie o ID result da resposta de criação.

  • Name
    403 - Forbidden
    Description

    Sua equipe está com a Filtragem de IP ativada, e a Meshy sinalizou a imagem da tarefa de protótipo por propriedade intelectual de terceiros. Tarefas de build e equipes no plano Enterprise não recebem esse erro. Crie uma tarefa de protótipo a partir de uma imagem que você tem o direito de usar.

  • Name
    404 - Not Found
    Description

    Nenhuma tarefa do Fidget Pixel com esse ID pertence à sua conta, ou o estágio da tarefa não corresponde ao caminho. Verifique o ID e use /prototype ou /build de acordo com a tarefa.

  • Name
    500 - Internal Server Error
    Description

    A Meshy não conseguiu executar a verificação de propriedade intelectual. Tente a solicitação novamente.


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

Excluir uma tarefa do Fidget Pixel

Cancela uma tarefa do Fidget Pixel. Cancelar uma tarefa PENDING reembolsa seus créditos. Uma tarefa IN_PROGRESS é cancelada sem reembolso, porque um worker já a iniciou. Uma tarefa com status final (SUCCEEDED, FAILED ou CANCELED) não pode ser cancelada.

O caminho deve corresponder ao estágio da tarefa. Por exemplo, DELETE em /prototype/:id com o ID de uma tarefa de build retorna 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).

Parâmetros de caminho

  • Name
    id
    Type
    path
    Description

    O ID da tarefa a ser cancelada.

Retornos

204 No Content com corpo vazio.

Modos de falha

  • Name
    400 - Bad Request
    Description

    Uma destas situações se aplica:

    • id não é um ID de tarefa válido. Envie o ID result da resposta de criação.
    • A tarefa já possui um status final (SUCCEEDED, FAILED ou CANCELED), portanto não pode ser cancelada.
  • Name
    404 - Not Found
    Description

    Nenhuma tarefa do Fidget Pixel com este ID pertence à sua conta, ou o estágio da tarefa não corresponde ao caminho. Verifique o ID e use /prototype ou /build para corresponder à tarefa.


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

Transmitir uma tarefa Fidget Pixel por stream

Transmite as atualizações de uma tarefa Fidget Pixel como Server-Sent Events (SSE). O caminho deve corresponder ao estágio da tarefa. Caso contrário, por exemplo, o ID de uma tarefa de build em /prototype/:id/stream, o stream envia um evento error com status_code: 404 e é encerrado. Um id que não seja um ID de tarefa válido tem o mesmo comportamento, com 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=***"
  }
}

Parâmetros

  • Name
    id
    Type
    path
    Description

    O ID da tarefa retornado na resposta de criação.

Retornos

Um stream de objetos de tarefa prototype ou build. Cada evento contém o objeto de tarefa completo, assim como retornado por Obter uma tarefa Fidget Pixel. Enquanto a tarefa estiver PENDING ou IN_PROGRESS, seus campos de saída ainda estarão vazios (null, [] ou {}), e finished_at será null.

Se a Filtragem de IP bloquear o resultado da tarefa, o stream envia um evento error em seu lugar, com o status_code que uma requisição GET retornaria.


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

Listar tarefas do Fidget Pixel

Retorna suas tarefas do Fidget Pixel de um estágio, uma página por vez. O caminho seleciona o estágio. /prototype retorna apenas tarefas de prototype, e /build retorna apenas tarefas de 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=***"
    ]
  }
]

Parâmetros de caminho

  • Name
    stage
    Type
    path
    Obrigatório
    Description

    O estágio a ser listado, prototype ou build.

Parâmetros de consulta

  • Name
    page_num
    Type
    integer
    padrão 1
    Description

    A página a ser retornada, de 1 a 255. 0 retorna a primeira página. Um valor fora de 0 a 255 retorna 400.

  • Name
    page_size
    Type
    integer
    padrão 10
    Description

    Número de tarefas por página, até 100. Um valor de 101 a 255 retorna 100 tarefas, e 0 usa o padrão. Um valor fora de 0 a 255 retorna 400.

  • Name
    sort_by
    Type
    string
    padrão -created_at
    Description

    A ordem de classificação.

    Valores disponíveis:

    • -created_at: mais recentes primeiro
    • +created_at: mais antigos primeiro

Retorna

Um array de objetos de tarefa de prototype ou objetos de tarefa de build, correspondendo ao estágio no caminho.


O objeto de tarefa de protótipo do Fidget Pixel

Uma tarefa de protótipo transforma uma foto em uma imagem em pixel art. Para transformar a imagem em peças imprimíveis em 3D, passe o ID da tarefa para o endpoint de build como input_task_id.

Propriedades

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

    O ID da tarefa. Não dependa do seu formato.

  • Name
    type
    Type
    string
    Description

    O tipo da tarefa, sempre creative-lab-fidget-pixel-prototype.

  • Name
    name
    Type
    string
    Description

    O name que você enviou ao criar a tarefa, ou "" se não enviou um.

  • Name
    status
    Type
    string
    Description

    O status da tarefa.

    Valores disponíveis:

    • PENDING: aguardando na fila
    • IN_PROGRESS: gerando o resultado
    • SUCCEEDED: finalizado, com o resultado
    • FAILED: finalizado, com o motivo em task_error
    • CANCELED: finalizado, sem resultado
  • Name
    progress
    Type
    integer
    Description

    Porcentagem do trabalho concluído, de 0 a 100. É 0 até a tarefa começar e 100 quando ela é bem-sucedida.

  • Name
    created_at
    Type
    timestamp
    Description

    Momento em que a tarefa foi criada, em milissegundos Unix.

  • Name
    started_at
    Type
    timestamp
    Description

    Momento em que um worker iniciou a tarefa, em milissegundos Unix. null até então.

  • Name
    finished_at
    Type
    timestamp
    Description

    Momento em que a tarefa atingiu um status final, em milissegundos Unix. null até então.

  • Name
    expires_at
    Type
    timestamp
    Description

    Momento em que o resultado da tarefa expira, em milissegundos Unix. É 3 dias após finished_at, ou 3 dias após created_at até a tarefa terminar. Para contas Enterprise, que mantêm os resultados da API indefinidamente, é cerca de 100 anos depois. Consulte Retenção de recursos.

  • Name
    preceding_tasks
    Type
    integer
    Description

    A posição da tarefa na fila enquanto ela está PENDING. 1 significa que ela começa em seguida. 0 depois que a tarefa sai da fila, e sempre 0 em resultados de listagem.

  • Name
    task_error
    Type
    object
    Description

    Motivo pelo qual a tarefa falhou. null a menos que status seja FAILED. Consulte Erros.

  • Name
    consumed_credits
    Type
    integer
    Description

    Número de créditos cobrados pela tarefa, após qualquer reembolso. Uma requisição que retorna um erro não é cobrada. Uma tarefa que falha é 0, pois a Meshy a reembolsa. Cancelar reembolsa uma tarefa apenas enquanto ela está PENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de get ou stream deixa o campo de fora, e uma requisição de listagem retorna 500. Nesse caso, tente a requisição novamente.

  • Name
    image_urls
    Type
    array of strings
    Description

    URLs de download para a imagem em pixel art. O array tem uma URL depois que a tarefa é bem-sucedida, e fica vazio até então.

    As URLs são assinadas, então busque-as sem um cabeçalho Authorization. Elas permanecem válidas até expires_at. Buscar a tarefa novamente antes disso retorna as mesmas URLs, não URLs recém-assinadas. Uma URL expirada não pode ser renovada, então baixe e armazene os arquivos antes disso.


O objeto de tarefa de build do Fidget Pixel

Uma tarefa de build gera as peças imprimíveis em 3D a partir de uma tarefa de protótipo bem-sucedida. A Meshy amostra a imagem em pixel art na grade e retorna as peças em um único arquivo 3MF multicolorido.

Propriedades

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

    O ID da tarefa. Não dependa do seu formato.

  • Name
    type
    Type
    string
    Description

    O tipo da tarefa, sempre creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    O name que você enviou ao criar a tarefa, ou "" se você não enviou um.

  • Name
    status
    Type
    string
    Description

    O status da tarefa.

    Valores disponíveis:

    • PENDING: aguardando na fila
    • IN_PROGRESS: gerando o resultado
    • SUCCEEDED: final, com o resultado
    • FAILED: final, com o motivo em task_error
    • CANCELED: final, sem resultado
  • Name
    progress
    Type
    integer
    Description

    Porcentagem do trabalho concluído, de 0 a 100. É 0 até a tarefa começar e 100 quando ela é bem-sucedida.

  • Name
    created_at
    Type
    timestamp
    Description

    Horário em que a tarefa foi criada, em milissegundos Unix.

  • Name
    started_at
    Type
    timestamp
    Description

    Horário em que um worker iniciou a tarefa, em milissegundos Unix. null até então.

  • Name
    finished_at
    Type
    timestamp
    Description

    Horário em que a tarefa atingiu um status final, em milissegundos Unix. null até então.

  • Name
    expires_at
    Type
    timestamp
    Description

    Horário em que o resultado da tarefa expira, em milissegundos Unix. É 3 dias após finished_at, ou 3 dias após created_at até a tarefa terminar. Para contas Enterprise, que mantêm os resultados da API indefinidamente, é cerca de 100 anos depois. Veja Retenção de recursos.

  • Name
    preceding_tasks
    Type
    integer
    Description

    A posição da tarefa na fila enquanto ela está PENDING. 1 significa que ela começa em seguida. 0 depois que a tarefa sai da fila, e sempre 0 em resultados de lista.

  • Name
    task_error
    Type
    object
    Description

    Por que a tarefa falhou. null a menos que status seja FAILED. Veja Erros.

  • Name
    consumed_credits
    Type
    integer
    Description

    Número de créditos cobrados pela tarefa, após qualquer reembolso. Uma requisição que retorna um erro não é cobrada. Uma tarefa com falha é 0, pois a Meshy a reembolsa. Cancelar só reembolsa uma tarefa enquanto ela está PENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de get ou stream omite o campo, e uma requisição de lista retorna 500. Nesse caso, tente a requisição novamente.

  • Name
    model_urls
    Type
    object
    Description

    URLs de download para o resultado, indexadas pelo formato de arquivo. O objeto tem uma entrada, para o output.format que você enviou, e fica vazio até a tarefa ser bem-sucedida.

    As URLs são assinadas, então busque-as sem um cabeçalho Authorization. Elas permanecem válidas até expires_at. Obter a tarefa novamente antes disso retorna as mesmas URLs, não URLs recém-assinadas. Uma URL expirada não pode ser renovada, então baixe e armazene os arquivos antes disso.

    • Name
      3mf
      Type
      string
      Description

      URL de download para o arquivo 3MF multicolorido. Cada peça tem um corpo cinza e um topo na cor do seu pixel. Presente quando output.format é 3mf, que é o padrão.


Exemplo completo (end-to-end)

Os scripts cURL e Python a seguir executam todo o fluxo. Cada script cria uma tarefa de prototype a partir de uma foto e aguarda até que ela seja concluída com sucesso. Em seguida, cria uma tarefa de build, aguarda essa tarefa e baixa o arquivo 3MF a partir de model_urls.3mf.

O script cURL precisa do curl e do jq, e o script Python precisa do pacote requests. Para executar um script, siga estes passos:

  1. Defina MESHY_API_KEY com sua chave de API.
  2. Defina IMAGE_PATH com o caminho de uma foto local, ou IMAGE_URL com uma URL de imagem pública.
  3. Opcional: para pixelizar um assunto diferente de uma pessoa, defina PIXEL_TYPE como other.
  4. Execute o script.

Uma tarefa de prototype geralmente é concluída em poucos minutos. Uma tarefa de build geralmente é concluída em bem menos de um minuto.

No seu aplicativo, mostre a imagem de image_urls ao usuário antes de criar a tarefa de build. Se ele não gostar, crie outra tarefa de prototype em vez disso. Dessa forma, você gasta créditos de build apenas em uma imagem que ele aprovou.

Fluxo completo

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"