Bang
Submit a Bang task from a Rodin asset or an uploaded model.
Authorization
bearer In: header
Request Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/api/v2/bang"{ "error": "NO_SUCH_TASK", "message": "Submitted.", "uuid": "123e4567-e89b-12d3-a456-426614174000", "submit_time": "2019-08-24T14:15:22Z", "jobs": { "uuids": [ "52faea01-729e-4195-85e8-6050a65315e3" ], "subscription_key": "string" }, "consumed": 0.5}Bang accepts exactly one of two input modes. Sending both asset_id and model, or neither, is rejected.
Rodin asset input
Use the top-level uuid returned by a completed Rodin generation as asset_id.
- Required:
asset_id. - Optional:
geometry_file_format,strength,material,resolution,seed,escore, andreference_scale. - Mutually exclusive:
model,imageandpromptmust be omitted.
When material generation is enabled, escore and reference_scale apply in both input modes. Values sent with an asset_id override the corresponding settings stored on that asset; when omitted, the endpoint uses its request defaults.
curl --fail-with-body --request POST 'https://api.hyper3d.com/api/v2/bang' \
--header "Authorization: Bearer ${RODIN_API_KEY}" \
--form 'asset_id=123e4567-e89b-12d3-a456-426614174000' \
--form 'strength=5' \
--form 'geometry_file_format=glb'
import os
import requests
response = requests.post(
"https://api.hyper3d.com/api/v2/bang",
headers={"Authorization": f"Bearer {os.environ['RODIN_API_KEY']}"},
data={
"asset_id": "123e4567-e89b-12d3-a456-426614174000",
"strength": 5,
"geometry_file_format": "glb",
},
timeout=60,
)
response.raise_for_status()
print(response.json())
Custom model input
Upload one model. A reference image is required unless material is None, because material generation needs something to sample from; omitting it is rejected with INVALID_REQUEST and a descriptive message.
- Required:
model, andimageunlessmaterial=None. - Optional:
geometry_file_format,prompt,strength,material,resolution,reference_scale,escore,seed. - Mutually exclusive:
asset_idmust be omitted. - Supported model formats:
obj,glb,stl,fbx,usd,usda,usdz, andusdc. strengthaccepts 1 to 12 and defaults to 5. Higher values split the model into more pieces.
curl --fail-with-body --request POST 'https://api.hyper3d.com/api/v2/bang' \
--header "Authorization: Bearer ${RODIN_API_KEY}" \
--form 'model=@./model.glb' \
--form 'image=@./reference.png' \
--form 'prompt=Separate the main structural parts' \
--form 'strength=5' \
--form 'geometry_file_format=glb'
import os
from pathlib import Path
import requests
with Path("model.glb").open("rb") as model_file, Path("reference.png").open("rb") as image_file:
response = requests.post(
"https://api.hyper3d.com/api/v2/bang",
headers={"Authorization": f"Bearer {os.environ['RODIN_API_KEY']}"},
files={
"model": ("model.glb", model_file, "model/gltf-binary"),
"image": ("reference.png", image_file, "image/png"),
},
data={
"prompt": "Separate the main structural parts",
"strength": 5,
"geometry_file_format": "glb",
},
timeout=60,
)
response.raise_for_status()
print(response.json())
Pricing
Every Bang request costs 0.5 credits, regardless of whether it uses a Rodin asset or an uploaded custom model and regardless of the selected input options.
Response and errors
{
"message": "Submitted.",
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"jobs": {
"uuids": ["223e4567-e89b-12d3-a456-426614174000"],
"subscription_key": "subscription-key-from-generation-response"
},
"consumed": 0.5
}
Bang uses the same application error codes as the other generation endpoints. HTTP 201 means the endpoint handled the request, but the task is accepted only when error is absent or empty and the top-level uuid is non-empty. HTTP 400 covers invalid fields, unsupported files, or conflicting input modes; 401 indicates invalid authentication; 429 indicates throttling. Poll and download using the same identifier rules as other generation endpoints.