Plataforma aberta

Integre a geração de materiais PBR da BeeMatra no seu pipeline via API.

Get an API Key

Autenticação

Todos os endpoints exigem um token Bearer no cabeçalho HTTP. Ausente ou inválido: HTTP 401:

Authorization: Bearer bmk_xxxxxxxxxxxxxxxx

As chaves de API são geradas em Conta → Chaves de API. A chave em texto claro é exibida apenas uma vez. Até 5 chaves ativas por conta, revogáveis a qualquer momento.

⚠️ A API aberta está disponível apenas para assinantes ativos. As tarefas só podem ser consultadas pelo criador (404 para as de outros).

Criar tarefa

POST https://beematra.net/api/v1/tasks

Envie uma foto de material para criar uma tarefa de geração. 1 crédito é debitado na aceitação; um task_id é retornado para consulta.

Parâmetros

NomeTipoDescrição
imagefileArquivo de imagem do material (formulário multipart), ≤20 MB, JPEG / PNG / WebP. Escolha entre image e image_url — image tem prioridade se ambos forem enviados
image_urlstringURL http(s) pública da imagem (corpo JSON), ≤20 MB

Exemplos de requisição

cURL · upload multipart direto (recomendado)

curl -X POST https://beematra.net/api/v1/tasks \ -H "Authorization: Bearer bmk_xxxx" \ -F "image=@/path/to/photo.jpg"

cURL · JSON com URL da imagem

curl -X POST https://beematra.net/api/v1/tasks \ -H "Authorization: Bearer bmk_xxxx" \ -H "Content-Type: application/json" \ -d '{"image_url": "https://example.com/photo.jpg"}'

Python

import requests resp = requests.post( "https://beematra.net/api/v1/tasks", headers={"Authorization": "Bearer bmk_xxxx"}, files={"image": open("photo.jpg", "rb")}, ) print(resp.json())

Resposta

{ "ok": true, "task_id": "W20261020_170000_a1b2c3", "status": "running", "progress": 0, "status_url": "https://beematra.net/api/v1/tasks/W20261020_170000_a1b2c3", "balance": 87 }

▸ 1 crédito debitado na aceitação; tarefas com falha são reembolsadas integralmente.
▸ O pré-processamento (rotação EXIF, normalização do lado maior em 1536 px) é automático.
▸ Apenas imagens completas — máscaras / recortes devem ser pré-processados pelo chamador antes do envio.

Consultar progresso

GET https://beematra.net/api/v1/tasks/{task_id}
GET https://beematra.net/api/v1/tasks/?task_id={task_id}

Consulte o status e o progresso da tarefa. Os formatos de caminho e consulta são equivalentes. Cabeçalho de autenticação obrigatório.

Resposta (em andamento)

{ "ok": true, "task_id": "W20261020_170000_a1b2c3", "status": "running", "progress": 45, "stage_label": "Generating textures…", "error": null, "note": null, "results": null }

Resposta (concluída — veja Texturas entregues para os campos)

{ "ok": true, "task_id": "W20261020_170000_a1b2c3", "status": "succeeded", "progress": 100, "stage_label": "Completed", "error": null, "note": null, "results": { "albedo": "/uploads/derived/…/seamless_albedo.png", "normal": "/uploads/derived/…/normal.png", "roughness": "/uploads/derived/…/roughness.png", "height": "/uploads/derived/…/height.png", "ao": "/uploads/derived/…/ao.png", "preview_sphere": "/uploads/derived/…/preview_sphere.png", "preview_cube": "/uploads/derived/…/preview_cube.png" } }
NomeTipoDescrição
statusstringrunning / succeeded / failed (tarefas com falha são reembolsadas automaticamente)
progressinteger0-100
stage_labelstringDescrição legível da etapa atual (para exibição na UI)
errorstring|nullMotivo da falha quando status=failed
resultsobject|nullConjunto de URLs de texturas quando status=succeeded

▸ Sonde a cada 3-5 segundos; pare em succeeded/failed (limite 60/min).
▸ Você só pode consultar as suas próprias tarefas.

Consultar saldo

GET https://beematra.net/api/v1/balance
curl https://beematra.net/api/v1/balance \ -H "Authorization: Bearer bmk_xxxx"

Retorna o saldo de créditos da conta vinculada à chave.

Texturas entregues

Em caso de sucesso, results contém o conjunto de texturas PBR (2048 px seamless) e as pré-visualizações renderizadas:

CampoTipoDescrição
albedostringAlbedo seamless (cor base, sRGB)
normalstringNormal map (OpenGL, Y+, linear)
roughnessstringRoughness map (linear)
heightstringHeight / displacement map (linear)
aostringMapa de oclusão ambiente (linear)
preview_spherestringPré-visualização de renderização em esfera
preview_cubestringPré-visualização de renderização em cubo

Todas as URLs são baixadas diretamente, sem autenticação. O conteúdo é idêntico ao pacote "baixar tudo" do site (5 texturas + 2 pré-visualizações).

Códigos de erro

Erros retornam status HTTP diferente de 200 com {"ok": false, "error": "código", "message": "descrição"}

HTTPerrorDescrição
401missing_or_bad_bearerCabeçalho Authorization ausente ou malformado
401invalid_keyChave de API inválida ou revogada
403subscription_requiredA API aberta requer uma assinatura ativa
400no_imageCampo image ausente (ou erro de upload)
400bad_typeFormato não suportado — apenas JPEG / PNG / WebP
400too_largeImagem excede o limite de 20 MB
400bad_image_urlimage_url não é um endereço http(s) público válido
400image_download_failedFalha no download de image_url (ou maior que 20 MB)
400bad_task_idtask_id ausente ou malformado
404task_not_foundTarefa não encontrada, ou não pertence à conta desta chave
503upstream_busyExecution engine busy (usually near task completion) — simply poll again
429rate_limitedLimite: 2 envios de tarefa / 60 consultas por minuto
429queue_busyMuitas tarefas na fila, tente novamente em breve

Regras de créditos

AquisiçãoNovas contas recebem 3 créditos grátis. Assinaturas (Standard / Pro / Ultimate) entregam 100 / 500 / 1500 créditos por mês. O pacote turbo adiciona 50 créditos instantaneamente.
ConsumoCada tarefa Beta custa 1 crédito, debitado na submissão; falhas são reembolsadas integralmente. Mesmo pool para o site e a API aberta.
ValidadeOs créditos são válidos por 30 dias a partir da concessão; os expirados são limpos automaticamente. O consumo segue o lote que expira primeiro (FIFO).
AcompanhamentoConta → Extrato de créditos: cada concessão, consumo, expiração e reembolso é registrado; o saldo sempre equivale à soma dos lotes não expirados.