{"slug":"asset-api-williamrobinson-dev-v1-asset-prepare-f0d9a4","title":"Normalise a glTF 2.0 binary (.glb) for a target engine and platform (scale, orie","host":"asset.api.williamrobinson.dev","method":"POST","resource":"https://asset.api.williamrobinson.dev/v1/asset/prepare","category":"other","description":"Normalise a glTF 2.0 binary (.glb) for a target engine and platform (scale, orientation, origin), generate two simplified LODs and convex/trimesh collision, and prove the result loads via a real Godot 4 headless import. Returns a report plus artifacts: normalised .glb LODs, collision data, a Godot s","price_listed":0.1,"price_asked":0.1,"state":"answering","state_label":"Answering","checks_7d":1,"answered_7d":1,"latency_ms_median":610,"reported_calls_30d":1,"reported_payers_30d":1,"networks":["eip155:8453"],"badge":"unverified","paid_checks_7d":0,"paid_ok_7d":0,"example_input":{"body":{"asset":"Z2xURgIAAACQCAAAlAQAAEpTT057ImFzc2V0Ijp7ImdlbmVyYXRvciI6ImdsVEYtVHJhbnNmb3JtIHY0LjUuMCIsInZlcnNpb24iOiIyLjAifSwiYWNjZXNzb3JzIjpbeyJ0eXBlIjoiVkVDMyIsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoyNCwibWF4IjpbMC41LDAuNSwwLjVdLCJtaW4iOlstMC41LC0wLjUsLTAuNV0sImJ1ZmZlclZpZXciOjEsImJ5dGVPZmZzZXQiOjB9LHsidHlwZSI6IlZFQzMiLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQsImJ1ZmZlclZpZXciOjEsImJ5dGVPZmZzZXQiOjEyfSx7InR5cGUiOiJWRUMyIiwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjI0LCJidWZmZXJWaWV3IjoxLCJieXRlT2Zmc2V0IjoyNH0seyJ0eXBlIjoiU0NBTEFSIiwiY29tcG9uZW50VHlwZSI6NTEyMywiY291bnQiOjM2LCJidWZmZXJWaWV3IjoyLCJieXRlT2Zmc2V0IjowfV0sImJ1ZmZlclZpZXdzIjpbeyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjg0MCwiYnl0ZUxlbmd0aCI6MTUyfSx7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6MCwiYnl0ZUxlbmd0aCI6NzY4LCJieXRlU3RyaWRlIjozMiwidGFyZ2V0IjozNDk2Mn0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjc2OCwiYnl0ZUxlbmd0aCI6NzIsInRhcmdldCI6MzQ5NjN9XSwic2FtcGxlcnMiOlt7IndyYXBTIjoxMDQ5Nywid3JhcFQiOjEwNDk3fV0sInRleHR1cmVzIjpbeyJzb3VyY2UiOjAsInNhbXBsZXIiOjB9XSwiaW1hZ2VzIjpbeyJuYW1lIjoiY2hlY2tlciIsIm1pbWVUeXBlIjoiaW1hZ2UvcG5nIiwiYnVmZmVyVmlldyI6MH1dLCJidWZmZXJzIjpbeyJieXRlTGVuZ3RoIjo5OTJ9XSwibWF0ZXJpYWxzIjpbeyJuYW1lIjoiY3ViZS1tYXRlcmlhbCIsInBick1ldGFsbGljUm91Z2huZXNzIjp7InJvdWdobmVzc0ZhY3RvciI6MC44LCJtZXRhbGxpY0ZhY3RvciI6MCwiYmFzZUNvbG9yVGV4dHVyZSI6eyJpbmRleCI6MH19fV0sIm1lc2hlcyI6W3sibmFtZSI6ImN1YmUiLCJwcmltaXRpdmVzIjpbeyJhdHRyaWJ1dGVzIjp7IlBPU0lUSU9OIjowLCJOT1JNQUwiOjEsIlRFWENPT1JEXzAiOjJ9LCJtb2RlIjo0LCJtYXRlcmlhbCI6MCwiaW5kaWNlcyI6M31dfV0sIm5vZGVzIjpbeyJuYW1lIjoiY3ViZSIsIm1lc2giOjB9XSwic2NlbmVzIjpbeyJuYW1lIjoic2NlbmUiLCJub2RlcyI6WzBdfV0sInNjZW5lIjowfSAgIOADAABCSU4AAAAAPwAAAL8AAAC/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAPwAAAL8AAIA/AAAAAAAAAAAAAIA/AAAAAAAAAD8AAAA/AAAAPwAAgD8AAAAAAAAAAAAAgD8AAIA/AAAAPwAAAL8AAAA/AACAPwAAAAAAAAAAAAAAAAAAgD8AAAC/AAAAvwAAAL8AAIC/AAAAAAAAAAAAAAAAAAAAAAAAAL8AAAA/AAAAvwAAgL8AAAAAAAAAAAAAgD8AAAAAAAAAvwAAAD8AAAA/AACAvwAAAAAAAAAAAACAPwAAgD8AAAC/AAAAvwAAAD8AAIC/AAAAAAAAAAAAAAAAAACAPwAAAL8AAAA/AAAAvwAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAvwAAAD8AAAA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAAA/AAAAPwAAAD8AAAAAAACAPwAAAAAAAIA/AACAPwAAAD8AAAA/AAAAvwAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAvwAAAL8AAAC/AAAAAAAAgL8AAAAAAAAAAAAAAAAAAAC/AAAAvwAAAD8AAAAAAACAvwAAAAAAAIA/AAAAAAAAAD8AAAC/AAAAPwAAAAAAAIC/AAAAAAAAgD8AAIA/AAAAPwAAAL8AAAC/AAAAAAAAgL8AAAAAAAAAAAAAgD8AAAC/AAAAvwAAAD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAD8AAAC/AAAAPwAAAAAAAAAAAACAPwAAgD8AAAAAAAAAPwAAAD8AAAA/AAAAAAAAAAAAAIA/AACAPwAAgD8AAAC/AAAAPwAAAD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAL8AAAC/AAAAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAPwAAAL8AAAC/AAAAAAAAAAAAAIC/AACAPwAAAAAAAAA/AAAAPwAAAL8AAAAAAAAAAAAAgL8AAIA/AACAPwAAAL8AAAA/AAAAvwAAAAAAAAAAAACAvwAAAAAAAIA/AAABAAIAAAACAAMABAAFAAYABAAGAAcACAAJAAoACAAKAAsADAANAA4ADAAOAA8AEAARABIAEAASABMAFAAVABYAFAAWABcAiVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAABlBMVEXWxKhcbHrpdFJRAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAAOElEQVR42u3UoQ0AAAgDMPj/aQyCIHEknZupmFhEJzvXDvgNGA8wYwt/YDyALQD+AOAPAP4AsIACFA8IAXCt1BQAAAAASUVORK5CYII=","expect":{"size":{"axis":"y","metres":1.5,"tolerance":0.05}},"target":{"collision":"convex","engine":"godot4","origin":"floor","platform":"desktop","size":{"axis":"y","metres":1.5}}},"bodyType":"json","method":"POST","type":"http"},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"additionalProperties":false,"properties":{"body":{"$defs":{"axis":{"enum":["y","z"],"type":"string"},"collision":{"enum":["none","convex","convex+trimesh"],"type":"string"},"size":{"additionalProperties":false,"properties":{"axis":{"$ref":"#/properties/input/properties/body/$defs/sizeAxis"},"metres":{"exclusiveMinimum":0,"maximum":1000,"type":"number"}},"required":["axis","metres"],"type":"object"},"sizeAxis":{"enum":["x","y","z","max"],"type":"string"},"target":{"additionalProperties":false,"properties":{"collision":{"$ref":"#/properties/input/properties/body/$defs/collision","default":"convex","description":"Generate collision: none, a convex hull, or a convex hull plus a static trimesh."},"engine":{"enum":["godot4","unity","unreal","gltf"],"type":"string"},"maxTextureSize":{"description":"Maximum texture edge in pixels; defaults per platform (mobile 1024, desktop 2048) when omitted.","maximum":8192,"minimum":1,"type":"integer"},"origin":{"default":"keep","description":"Where the origin ends up: unchanged, the bounds centre, or the centre of the bottom face.","enum":["keep","center","floor"],"type":"string"},"platform":{"enum":["mobile","desktop"],"type":"string"},"size":{"$ref":"#/properties/input/properties/body/$defs/size","description":"Desired extent in metres along `axis` after normalisation; omitted keeps the source scale."},"sourceUp":{"$ref":"#/properties/input/properties/body/$defs/axis","default":"y","description":"The source's up axis when known to be Z-up (Blender/Max exports); glTF is Y-up by default."}},"required":["engine","platform"],"type":"object"}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"asset":{"contentEncoding":"base64","description":"Base64-encoded glTF 2.0 binary (.glb) with embedded textures only (external URIs are rejected); decoded size must not exceed 4194304 bytes.","maxLength":5592408,"minLength":1,"type":"string"},"expect":{"additionalProperties":false,"properties":{"minAnimations":{"maximum":64,"minimum":0,"type":"integer"},"rigged":{"description":"Require a skeleton (skinned character) to be present.","type":"boolean"},"size":{"additionalProperties":false,"description":"Expected extent in metres along `axis`, checked within `tolerance` (a fraction).","properties":{"axis":{"$ref":"#/properties/input/properties/body/$defs/sizeAxis"},"metres":{"exclusiveMinimum":0,"maximum":1000,"type":"number"},"tolerance":{"default":0.05,"maximum":0.5,"minimum":0,"type":"number"}},"required":["axis","metres"],"type":"object"}},"type":"object"},"target":{"$ref":"#/properties/input/properties/body/$defs/target"}},"required":["asset","target"],"type":"object"},"bodyType":{"enum":["json","form-data","text"],"type":"string"},"method":{"enum":["POST"],"type":"string"},"type":{"const":"http","type":"string"}},"required":["type","method","bodyType","body"],"type":"object"},"output":{"properties":{"example":{"$defs":{"artifact":{"additionalProperties":false,"properties":{"href":{"format":"uri","type":"string"},"mediaType":{"maxLength":128,"minLength":1,"type":"string"},"name":{"enum":["asset.glb","asset-lod1.glb","asset-lod2.glb","collision.json","godot-scene.tscn","preview.png","report.json"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"sizeBytes":{"minimum":0,"type":"integer"}},"required":["name","mediaType","sizeBytes","sha256","href"],"type":"object"},"bounds":{"additionalProperties":false,"properties":{"max":{"$ref":"#/properties/output/properties/example/$defs/vector3"},"min":{"$ref":"#/properties/output/properties/example/$defs/vector3"},"size":{"$ref":"#/properties/output/properties/example/$defs/vector3"}},"required":["min","max","size"],"type":"object"},"check":{"additionalProperties":false,"properties":{"code":{"type":"string"},"detail":{"maxLength":2048,"type":"string"},"status":{"enum":["passed","failed","not_checked"],"type":"string"}},"required":["code","status","detail"],"type":"object"},"collision":{"enum":["none","convex","convex+trimesh"],"type":"string"},"lod":{"additionalProperties":false,"properties":{"bytes":{"minimum":0,"type":"integer"},"error":{"minimum":0,"type":"number"},"name":{"enum":["asset.glb","asset-lod1.glb","asset-lod2.glb"],"type":"string"},"ratio":{"maximum":1,"minimum":0,"type":"number"},"triangles":{"maximum":250000,"minimum":0,"type":"integer"},"vertices":{"minimum":0,"type":"integer"}},"required":["name","ratio","triangles","vertices","bytes","error"],"type":"object"},"target":{"additionalProperties":false,"properties":{"collision":{"$ref":"#/properties/output/properties/example/$defs/collision"},"engine":{"enum":["godot4","unity","unreal","gltf"],"type":"string"},"maxTextureSize":{"maximum":8192,"minimum":1,"type":"integer"},"origin":{"enum":["keep","center","floor"],"type":"string"},"platform":{"enum":["mobile","desktop"],"type":"string"},"size":{"additionalProperties":false,"properties":{"axis":{"enum":["x","y","z","max"],"type":"string"},"metres":{"exclusiveMinimum":0,"maximum":1000,"type":"number"}},"required":["axis","metres"],"type":"object"},"sourceUp":{"enum":["y","z"],"type":"string"}},"required":["engine","platform","sourceUp","origin","collision"],"type":"object"},"vector3":{"items":{"type":"number"},"maxItems":3,"minItems":3,"type":"array"}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"artifacts":{"items":{"$ref":"#/properties/output/properties/example/$defs/artifact"},"maxItems":7,"type":"array"},"checks":{"items":{"$ref":"#/properties/output/properties/example/$defs/check"},"maxItems":32,"type":"array"},"collision":{"additionalProperties":false,"properties":{"convexHullVertices":{"minimum":0,"type":"integer"},"kind":{"$ref":"#/properties/output/properties/example/$defs/collision"},"trimeshTriangles":{"minimum":0,"type":"integer"}},"required":["kind","convexHullVertices","trimeshTriangles"],"type":"object"},"engineLoad":{"additionalProperties":false,"properties":{"animations":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"engine":{"type":"string"},"errors":{"items":{"maxLength":2048,"type":"string"},"maxItems":64,"type":"array"},"loaded":{"type":"boolean"},"materials":{"minimum":0,"type":"integer"},"meshInstances":{"minimum":0,"type":"integer"},"nodes":{"minimum":0,"type":"integer"},"skeletons":{"minimum":0,"type":"integer"}},"required":["engine","loaded","nodes","meshInstances","materials","skeletons","animations","errors"],"type":"object"},"expiresAt":{"format":"date-time","type":"string"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":16,"type":"array"},"lods":{"items":{"$ref":"#/properties/output/properties/example/$defs/lod"},"maxItems":3,"minItems":1,"type":"array"},"normalization":{"additionalProperties":false,"properties":{"rotationXDegrees":{"type":"number"},"scale":{"type":"number"},"translation":{"$ref":"#/properties/output/properties/example/$defs/vector3"}},"required":["scale","rotationXDegrees","translation"],"type":"object"},"output":{"additionalProperties":false,"properties":{"animations":{"minimum":0,"type":"integer"},"bones":{"minimum":0,"type":"integer"},"bounds":{"$ref":"#/properties/output/properties/example/$defs/bounds"},"bytes":{"minimum":0,"type":"integer"},"materials":{"maximum":32,"minimum":0,"type":"integer"},"maxTextureEdge":{"minimum":0,"type":"integer"},"meshes":{"minimum":0,"type":"integer"},"nodes":{"maximum":2000,"minimum":0,"type":"integer"},"primitives":{"minimum":0,"type":"integer"},"skins":{"minimum":0,"type":"integer"},"textures":{"maximum":32,"minimum":0,"type":"integer"},"triangles":{"maximum":250000,"minimum":0,"type":"integer"},"vertices":{"minimum":0,"type":"integer"}},"required":["triangles","vertices","primitives","meshes","nodes","materials","textures","maxTextureEdge","skins","bones","animations","bytes","bounds"],"type":"object"},"repairs":{"items":{"additionalProperties":false,"properties":{"code":{"maxLength":128,"type":"string"},"detail":{"maxLength":2048,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":100,"type":"array"},"source":{"additionalProperties":false,"properties":{"animations":{"minimum":0,"type":"integer"},"bones":{"minimum":0,"type":"integer"},"bounds":{"$ref":"#/properties/output/properties/example/$defs/bounds"},"bytes":{"minimum":0,"type":"integer"},"materials":{"maximum":32,"minimum":0,"type":"integer"},"maxTextureEdge":{"minimum":0,"type":"integer"},"meshes":{"minimum":0,"type":"integer"},"nodes":{"maximum":2000,"minimum":0,"type":"integer"},"primitives":{"minimum":0,"type":"integer"},"skins":{"minimum":0,"type":"integer"},"textures":{"maximum":32,"minimum":0,"type":"integer"},"triangles":{"maximum":250000,"minimum":0,"type":"integer"},"validatorErrors":{"minimum":0,"type":"integer"},"validatorWarnings":{"minimum":0,"type":"integer"},"vertices":{"minimum":0,"type":"integer"}},"required":["triangles","vertices","primitives","meshes","nodes","materials","textures","maxTextureEdge","skins","bones","animations","bytes","bounds","validatorErrors","validatorWarnings"],"type":"object"},"status":{"enum":["passed","failed"],"type":"string"},"target":{"$ref":"#/properties/output/properties/example/$defs/target"},"tools":{"additionalProperties":false,"properties":{"engine":{"type":"string"},"transform":{"type":"string"},"validator":{"type":"string"}},"required":["validator","transform","engine"],"type":"object"},"truncated":{"type":"boolean"},"validator":{"items":{"additionalProperties":false,"properties":{"code":{"maxLength":128,"type":"string"},"message":{"maxLength":2048,"type":"string"},"pointer":{"maxLength":512,"type":"string"},"severity":{"enum":["error","warning","info"],"type":"string"}},"required":["severity","code","message","pointer"],"type":"object"},"maxItems":100,"type":"array"},"warnings":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"}},"required":["status","tools","target","source","output","normalization","lods","collision","engineLoad","repairs","checks","validator","warnings","limitations","truncated","expiresAt","artifacts"],"type":"object"},"type":{"type":"string"}},"required":["type"],"type":"object"}},"required":["input"],"type":"object"},"history":[{"day":"2026-09-24","reachable":true,"status":402,"valid_402":true,"asked_usdc":0.1,"price_match":true,"latency_ms":610,"error":null}],"description_full":"Normalise a glTF 2.0 binary (.glb) for a target engine and platform (scale, orientation, origin), generate two simplified LODs and convex/trimesh collision, and prove the result loads via a real Godot 4 headless import. Returns a report plus artifacts: normalised .glb LODs, collision data, a Godot scene, a multi-view preview, and the full JSON report. Claims are scoped to the Godot 4 import; Unity/Unreal receive glTF-convention output without import proof.","last_updated":"2026-09-11T00:17:09.98Z","schemes":["exact"]}