lowpoly será descontinuado a 30/10/2026. Mude de modelo antes destas datas para evitar erros nos pedidos. Ver todas as descontinuações

API Creative Lab Fidget Pixel

Transforme uma fotografia numa placa fidget de pixel art multicolor e imprimível em 3D, em duas fases. Uma tarefa de protótipo transforma a fotografia numa imagem de pixel art. Uma tarefa de construção transforma essa imagem em peças encaixáveis num único ficheiro 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 requerem um plano pago. Um pedido de uma conta com plano gratuito devolve 402.


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

Criar uma tarefa de protótipo Fidget Pixel

Gera uma imagem em pixel art a partir de uma fotografia. Para construir as peças, passe o ID desta tarefa ao endpoint de build como input_task_id. Para os campos da tarefa, consulte O objeto de tarefa de protótipo Fidget Pixel.

Se 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 fotografia a transformar em pixel art, como um URL público ou um data URI (data:image/jpeg;base64,<os seus dados de imagem codificados em base64>).

    A imagem deve ser um ficheiro JPG, JPEG, PNG ou WebP com, no máximo, 20 MB. O Meshy deteta o formato a partir dos dados da imagem, não da extensão do ficheiro no URL. Um URL sem extensão funciona, e o Meshy segue redirecionamentos.

  • Name
    type
    Type
    string
    Obrigatório
    Description

    O que a fotografia mostra, o que define o estilo da pixel art. Os dois estilos são claramente diferentes. Qualquer outro valor devolve 400.

    Valores disponíveis:

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

    Um nome para a tarefa, até 100 carateres. É devolvido no campo name da tarefa. Um nome mais longo devolve 400.

Devolve

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

Modos de falha

  • Name
    400 - Bad Request
    Description

    O pedido não pode ser executado. Por exemplo:

    • image_url ou type está em falta.
    • type não é person nem other.
    • A imagem não é um ficheiro JPG, JPEG, PNG ou WebP.
    • A imagem é demasiado pequena, excede 20 MB ou excede o número máximo de pixéis.
    • O Meshy não consegue transferir a imagem, por exemplo porque o URL devolve 404 ou atinge o tempo limite.
    • O data URI não é um base64 válido.
    • A imagem foi assinalada como NSFW.

    A mensagem de erro indica qual o problema encontrado. Corrija o pedido e envie-o novamente.

  • Name
    401 - Unauthorized
    Description

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

  • Name
    402 - Payment Required
    Description

    Aplica-se uma destas situações:

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

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

  • Name
    403 - Forbidden
    Description

    A sua equipa tem a Filtragem de IP ativada, e o Meshy assinalou a imagem por propriedade intelectual de terceiros. Envie uma imagem que tenha o direito de utilizar.

  • Name
    429 - Too Many Requests
    Description

    Um destes limites foi atingido:

    • Enviou mais pedidos do que o seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Consulte Limites de taxa.
    • Tem demasiadas tarefas em fila de espera ou em execução. Aguarde que algumas terminem e tente novamente.
    • Num plano ilimitado sem créditos restantes, atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde que uma tarefa termine ou adicione créditos.
  • Name
    500 - Internal Server Error
    Description

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


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

Criar uma tarefa de construção Fidget Pixel

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 grelha e reduz-a a, no máximo, color_count cores. Cada célula do sujeito torna-se uma peça interligável, e o fundo não é impresso.

O resultado é um único ficheiro 3MF multicor, pronto a imprimir a cores. Cada peça tem um corpo cinzento e um topo na cor do seu pixel. Para os seus campos, consulte O objeto da tarefa de construção 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 construir. Tem de ser uma tarefa criada pela sua conta com POST /openapi/creative-lab/fidget-pixel/v1/prototype, com o estado SUCCEEDED.

    Um ID que não corresponda a uma das suas tarefas de protótipo Fidget Pixel da API devolve 404, incluindo um protótipo feito na aplicação web.

  • Name
    name
    Type
    string
    Description

    Um nome para a tarefa, com até 100 carateres. É devolvido no campo name da tarefa. Um nome mais longo devolve 400.

options

Definições para a forma e o tamanho das peças. Cada campo tem um valor predefinido, pelo que só precisa de enviar os campos que pretende alterar. Um 0 utiliza o valor predefinido do campo. Estas são as mesmas definições existentes na aplicação web Creative Lab. As restantes definições de forma são fixas, e a Meshy define-as a partir de shape e piece_size_mm.

  • Name
    shape
    Type
    string
    predefinição square
    Description

    O contorno de cada peça. Qualquer outro valor devolve 400.

    Valores disponíveis:

    • square: peças quadradas numa grelha quadrada
    • hex: peças hexagonais numa grelha hexagonal, com piece_size_mm definido como 6 ou 8
  • Name
    grid_size
    Type
    integer
    predefinição 32
    Description

    O número de células da grelha ao longo de cada lado do tabuleiro, 16 ou 32. Qualquer outro valor devolve 400. Uma grelha de 32 mantém mais detalhe. Uma grelha de 16 produz menos peças do mesmo tamanho, pelo que o tabuleiro fica cerca de metade da largura.

  • Name
    piece_size_mm
    Type
    integer
    predefinição 8
    Description

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

    O valor 10 não funciona com hex e devolve 400, porque a face hexagonal inclinada faz saliência na maioria das impressoras FDM de consumo.

  • Name
    color_count
    Type
    integer
    predefinição 8
    Description

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

  • Name
    piece_height_mm
    Type
    integer
    predefinição 15
    Description

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

output

Definições para o ficheiro de resultado.

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

    O formato de ficheiro do resultado. Qualquer outro valor devolve 400.

    Valores disponíveis:

    • 3mf: um único ficheiro multicor model.3mf, devolvido em model_urls.3mf

Retorna

O campo result contém o ID da nova tarefa de construção. Obtenha a tarefa ou transmita-a em fluxo até que status seja SUCCEEDED. Depois, transfira o ficheiro 3MF a partir de model_urls.3mf.

Modos de falha

  • Name
    400 - Bad Request
    Description

    O pedido não pode ser executado. Por exemplo:

    • input_task_id está em falta ou não é um ID de tarefa válido.
    • O estado da tarefa de protótipo não é SUCCEEDED. Se ainda estiver em execução, aguarde e tente novamente. Se tiver falhado ou sido 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. As peças hexagonais só existem em 6 e 8 mm.
    • output.format não é 3mf.

    A mensagem de erro indica qual o problema encontrado.

  • Name
    401 - Unauthorized
    Description

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

  • Name
    402 - Payment Required
    Description

    Aplica-se uma das seguintes situações:

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

    Verifique os seus créditos e o plano, e tente novamente.

  • Name
    403 - Forbidden
    Description

    A sua equipa 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 tenha direitos de utilização.

  • Name
    404 - Not Found
    Description

    input_task_id não corresponde a nenhuma tarefa de protótipo Fidget Pixel criada pela sua conta através da API. Um protótipo feito na aplicação web também devolve 404. Envie o ID result de uma resposta de criação de protótipo.

  • Name
    429 - Too Many Requests
    Description

    Foi atingido um dos seguintes limites:

    • Enviou mais pedidos do que o seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Consulte Limites de taxa.
    • Demasiadas das suas tarefas estão em fila de espera ou em execução. Aguarde que algumas terminem e tente novamente.
    • Num plano ilimitado sem créditos restantes, atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde que uma tarefa termine, ou adicione créditos.
  • Name
    500 - Internal Server Error
    Description

    A Meshy encontrou um erro de servidor, por exemplo por não ter conseguido 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 que tenha cobrado. Tente o pedido novamente.


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

Obter uma tarefa Fidget Pixel

Devolve uma tarefa de protótipo ou de construção. O caminho deve corresponder à fase da tarefa. Uma tarefa de construção solicitada através de /prototype/:id devolve 404, e o mesmo acontece com uma tarefa de protótipo solicitada através de /build/:id.

Para os campos, consulte O objeto de tarefa de protótipo Fidget Pixel e O objeto de tarefa de construção 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 da resposta de criação.

Devolve

O objeto de tarefa de protótipo ou o objeto de tarefa de construção, consoante a fase indicada 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

    A sua equipa tem a opção IP Filtering ativada, e a Meshy sinalizou a imagem da tarefa de protótipo por direitos de propriedade intelectual de terceiros. As tarefas de construção e as equipas no plano Enterprise não recebem este erro. Crie uma tarefa de protótipo a partir de uma imagem para a qual tenha os direitos de utilização.

  • Name
    404 - Not Found
    Description

    Nenhuma tarefa Fidget Pixel com este ID pertence à sua conta, ou a fase da tarefa não corresponde ao caminho. Verifique o ID e utilize /prototype ou /build para corresponder à tarefa.

  • Name
    500 - Internal Server Error
    Description

    A Meshy não conseguiu executar a verificação de propriedade intelectual. Repita o pedido.


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

Eliminar uma tarefa Fidget Pixel

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

O caminho deve corresponder à fase da tarefa. Por exemplo, DELETE em /prototype/:id com o ID de uma tarefa de build devolve 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 do caminho

  • Name
    id
    Type
    path
    Description

    O ID da tarefa a cancelar.

Retorna

204 No Content com um corpo vazio.

Modos de falha

  • Name
    400 - Bad Request
    Description

    Aplica-se uma das seguintes situações:

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

    Nenhuma tarefa Fidget Pixel com este ID pertence à sua conta, ou a fase da tarefa não corresponde ao caminho. Verifique o ID e utilize /prototype ou /build para corresponder à tarefa.


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

Transmitir em stream uma tarefa Fidget Pixel

Transmite as atualizações de uma tarefa Fidget Pixel em stream através de Server-Sent Events (SSE). O caminho deve corresponder à fase 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 fecha-se. 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 proveniente da resposta de criação.

Devolve

Um stream de objetos de tarefa prototype ou build. Cada evento contém o objeto de tarefa completo, tal como devolvido por Obter uma tarefa Fidget Pixel. Enquanto a tarefa estiver PENDING ou IN_PROGRESS, os seus campos de saída continuam vazios (null, [] ou {}), e finished_at é 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 um pedido get devolveria.


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

Listar tarefas Fidget Pixel

Devolve as suas tarefas Fidget Pixel de uma fase, uma página de cada vez. O caminho seleciona a fase. /prototype devolve apenas tarefas de protótipo, e /build devolve apenas tarefas de compilação.

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

    A fase a listar, prototype ou build.

Parâmetros de consulta

  • Name
    page_num
    Type
    integer
    predefinição 1
    Description

    A página a devolver, de 1 a 255. 0 devolve a primeira página. Um valor fora do intervalo 0 a 255 devolve 400.

  • Name
    page_size
    Type
    integer
    predefinição 10
    Description

    Número de tarefas por página, até 100. Um valor entre 101 e 255 devolve 100 tarefas, e 0 utiliza o valor predefinido. Um valor fora do intervalo 0 a 255 devolve 400.

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

    A ordem de ordenação.

    Valores disponíveis:

    • -created_at: mais recente primeiro
    • +created_at: mais antigo primeiro

Devolve

Um array de objetos de tarefa de protótipo ou objetos de tarefa de compilação, consoante a fase indicada no caminho.


O objeto de tarefa de protótipo Fidget Pixel

Uma tarefa de protótipo transforma uma fotografia numa imagem em pixel art. Para transformar a imagem em peças imprimíveis em 3D, passe o ID da tarefa para o build endpoint 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 enviou quando criou a tarefa, ou "" se não tiver enviado nenhum.

  • Name
    status
    Type
    string
    Description

    O estado da tarefa.

    Valores disponíveis:

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

    Percentagem do trabalho concluído, de 0 a 100. É 0 até a tarefa começar e 100 quando é 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é isso acontecer.

  • Name
    finished_at
    Type
    timestamp
    Description

    Momento em que a tarefa atingiu um estado final, em milissegundos Unix. null até isso acontecer.

  • Name
    expires_at
    Type
    timestamp
    Description

    Momento em que o resultado da tarefa expira, em milissegundos Unix. São 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 está PENDING. 1 significa que é a próxima a começar. 0 depois de a tarefa sair 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. Um pedido que devolve um erro não é cobrado. Uma tarefa falhada tem o valor 0, porque a Meshy a reembolsa. Cancelar só reembolsa uma tarefa enquanto esta estiver PENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de obtenção ou de stream omite o campo, e um pedido de listagem devolve 500. Nesse caso, repita o pedido.

  • Name
    image_urls
    Type
    array of strings
    Description

    URLs de transferência para a imagem em pixel art. A matriz tem um URL depois de a tarefa ser bem-sucedida, e está vazia até lá.

    Os URLs são assinados, por isso obtenha-os sem um cabeçalho Authorization. Mantêm-se válidos até expires_at. Obter a tarefa novamente antes disso devolve os mesmos URLs, não novos assinados. Um URL expirado não pode ser renovado, por isso transfira e guarde os ficheiros antes disso.


O objeto de tarefa de construção Fidget Pixel

Uma tarefa de construção gera as peças imprimíveis em 3D a partir de uma tarefa de protótipo bem-sucedida. A Meshy mapeia a imagem em pixel art na grelha e devolve as peças num único ficheiro 3MF multicolor.

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 de tarefa, sempre creative-lab-fidget-pixel-build.

  • Name
    name
    Type
    string
    Description

    O name que enviou ao criar a tarefa, ou "" caso não tenha enviado nenhum.

  • Name
    status
    Type
    string
    Description

    O estado da tarefa.

    Valores disponíveis:

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

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

  • Name
    created_at
    Type
    timestamp
    Description

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

  • Name
    started_at
    Type
    timestamp
    Description

    Hora em que um worker iniciou a tarefa, em milissegundos Unix. null até isso acontecer.

  • Name
    finished_at
    Type
    timestamp
    Description

    Hora em que a tarefa atingiu um estado final, em milissegundos Unix. null até isso acontecer.

  • Name
    expires_at
    Type
    timestamp
    Description

    Hora 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 está PENDING. 1 significa que é a próxima a começar. 0 depois de a tarefa sair 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. Um pedido que devolva um erro não é cobrado. Uma tarefa falhada é 0, porque a Meshy reembolsa-a. Cancelar só reembolsa uma tarefa enquanto esta estiver PENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de obtenção ou de stream omite o campo, e um pedido de listagem devolve 500. Nesse caso, repita o pedido.

  • Name
    model_urls
    Type
    object
    Description

    URLs de transferência para o resultado, indexados por formato de ficheiro. O objeto tem uma entrada, para o output.format que enviou, e está vazio até a tarefa ser bem-sucedida.

    As URLs são assinadas, por isso obtenha-as sem um cabeçalho Authorization. Permanecem válidas até expires_at. Obter a tarefa novamente antes disso devolve as mesmas URLs, não umas recém-assinadas. Uma URL expirada não pode ser renovada, por isso transfira e guarde os ficheiros antes disso.

    • Name
      3mf
      Type
      string
      Description

      URL de transferência para o ficheiro 3MF multicolor. Cada peça tem um corpo cinzento e um topo na cor do respetivo pixel. Presente quando output.format é 3mf, que é o valor predefinido.


Exemplo completo (ponta a ponta)

Os seguintes scripts cURL e Python executam todo o fluxo. Cada script cria uma tarefa de protótipo a partir de uma fotografia e aguarda que seja concluída com sucesso. Depois, cria uma tarefa de construção, aguarda por essa tarefa e descarrega o ficheiro 3MF a partir de model_urls.3mf.

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

  1. Defina MESHY_API_KEY com a sua chave de API.
  2. Defina IMAGE_PATH com o caminho de uma fotografia local, ou IMAGE_URL com um URL de imagem público.
  3. Opcional: Para pixelizar um sujeito que não seja uma pessoa, defina PIXEL_TYPE como other.
  4. Execute o script.

Uma tarefa de protótipo normalmente termina em poucos minutos. Uma tarefa de construção normalmente termina em bem menos de um minuto.

Na sua aplicação, mostre a imagem de image_urls ao utilizador antes de criar a tarefa de construção. Se ele não gostar, crie outra tarefa de protótipo em vez disso. Desta forma, gasta créditos de construção apenas numa imagem que ele aprove.

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"