Appearance
API TUTORIAL – POST DESIGNS
Intro
This document shows how to create a design and upload its files.
INFO
The base URL for the produuz.it API V2 is: https://back.produuz.it/api/v2/
Post a Design
Only a project uuid and a design name are needed. The project uuid can also be a standard library uuid, since standard libraries are projects internally.
Endpoint: https://back.produuz.it/api/v2/constructibles/assembly_designs/
- Method: POST.
- Request Body: Design object.
- Response: Serialized created design.
Example Request Payload
json
{
"project": "uuid-of-the-project",
"name": "D-10001", // Design name
"meta": {}, // This will be filled by the system if needed
"tipo": "timber_panel" // "timber_panel", "module_unit", ...
}{
"project": "uuid-of-the-project",
"name": "D-10001", // Design name
"meta": {}, // This will be filled by the system if needed
"tipo": "timber_panel" // "timber_panel", "module_unit", ...
}Example Response Payload
json
{
"project": "uuid-of-the-project",
"parent_designs": [],
"from_stdlib": false,
"uuid": "340c1149-7f85-4a83-bede-10089e462069",
"created": "2025-09-15T17:11:59.548625Z",
"modified": "2025-09-15T17:11:59.548641Z",
"name": "D-10001",
"revision": 0,
"resources": {},
"meta": {
"analysis": "waiting",
"bruto_area": 0,
"ifc_assembly_name": "unknown"
},
"tipo": "timber_panel"
}{
"project": "uuid-of-the-project",
"parent_designs": [],
"from_stdlib": false,
"uuid": "340c1149-7f85-4a83-bede-10089e462069",
"created": "2025-09-15T17:11:59.548625Z",
"modified": "2025-09-15T17:11:59.548641Z",
"name": "D-10001",
"revision": 0,
"resources": {},
"meta": {
"analysis": "waiting",
"bruto_area": 0,
"ifc_assembly_name": "unknown"
},
"tipo": "timber_panel"
}Upload files
Get the resources package object:
Endpoint: https://back.produuz.it/api/v2/cloudstorage/packages/get_or_create/
- Method: POST.
Example Request Payload
json
{
"name": "resources",
"assembly_design": "340c1149-7f85-4a83-bede-10089e462069"
}{
"name": "resources",
"assembly_design": "340c1149-7f85-4a83-bede-10089e462069"
}Example Response Payload
json
{
"uuid": "6d85a4b6-2c8d-4708-a6d5-5e78469c1029",
"name": "resources",
"meta": {},
"assembly": null,
"assembly_design": "340c1149-7f85-4a83-bede-10089e462069",
"module": null,
"module_design": null,
"proof": null,
"issue": null,
"part": null,
"part_design": null,
"production_line": null,
"project": null,
"files": []
}{
"uuid": "6d85a4b6-2c8d-4708-a6d5-5e78469c1029",
"name": "resources",
"meta": {},
"assembly": null,
"assembly_design": "340c1149-7f85-4a83-bede-10089e462069",
"module": null,
"module_design": null,
"proof": null,
"issue": null,
"part": null,
"part_design": null,
"production_line": null,
"project": null,
"files": []
}Once you have the package uuid, request a signed URL to upload a file to Google Cloud Storage (GCS).
- Method: POST.
Example Request Payload
json
{
"name": "D-10001.ifc",
"short_name": "D-10001",
"type": "application/octet-stream",
"meta": {
"section": "assembly_ifc",
"tipo": "timber_panel",
"ext": "ifc",
"status": ["uploaded"],
"design_name": "D-10001"
}
}{
"name": "D-10001.ifc",
"short_name": "D-10001",
"type": "application/octet-stream",
"meta": {
"section": "assembly_ifc",
"tipo": "timber_panel",
"ext": "ifc",
"status": ["uploaded"],
"design_name": "D-10001"
}
}Example Response Payload
json
{
"url": "https://storage.googleapis.com/produuzit-test/60252ad1-60b5-4d49-92e8-12f159ddf47f/assembly_designs/340c1149-7f85-4a83-bede-10089e462069/resources/3/D-10001.ifc?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=service-account%40project.iam.gserviceaccount.com%2F20250915%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250915T184331Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost&X-Goog-Signature=a1b2c3d4e5f6...",
"method": "PUT",
"headers": {
"Content-Type": "application/octet-stream"
},
"file": {
"uuid": "0b7f4c2e-5d1a-4e8b-9f3c-2a6d8e1b4c70",
"created": "2025-09-15T18:43:31.120415Z",
"name": "D-10001.ifc",
"short_name": "D-10001",
"meta": {
"section": "assembly_ifc",
"tipo": "timber_panel",
"ext": "ifc",
"status": ["uploaded"],
"design_name": "D-10001",
"version": 3
},
"cloud_folder": "60252ad1-60b5-4d49-92e8-12f159ddf47f/assembly_designs/340c1149-7f85-4a83-bede-10089e462069/resources/3",
"presigned_url": "",
"presigned_url_expires_at": null,
"hash": ""
}
}{
"url": "https://storage.googleapis.com/produuzit-test/60252ad1-60b5-4d49-92e8-12f159ddf47f/assembly_designs/340c1149-7f85-4a83-bede-10089e462069/resources/3/D-10001.ifc?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=service-account%40project.iam.gserviceaccount.com%2F20250915%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250915T184331Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=content-type%3Bhost&X-Goog-Signature=a1b2c3d4e5f6...",
"method": "PUT",
"headers": {
"Content-Type": "application/octet-stream"
},
"file": {
"uuid": "0b7f4c2e-5d1a-4e8b-9f3c-2a6d8e1b4c70",
"created": "2025-09-15T18:43:31.120415Z",
"name": "D-10001.ifc",
"short_name": "D-10001",
"meta": {
"section": "assembly_ifc",
"tipo": "timber_panel",
"ext": "ifc",
"status": ["uploaded"],
"design_name": "D-10001",
"version": 3
},
"cloud_folder": "60252ad1-60b5-4d49-92e8-12f159ddf47f/assembly_designs/340c1149-7f85-4a83-bede-10089e462069/resources/3",
"presigned_url": "",
"presigned_url_expires_at": null,
"hash": ""
}
}file is the file record the call just created. Keep its uuid if you need to delete the file later.
Upload the file to GCS with a PUT request to the signed url, with the file content as the request body and the given headers. The URL expires, so request it right before uploading. For more details, see the Google Cloud Storage signed URLs documentation.
The section in meta must be assembly_ifc for an assembly design IFC (module_ifc for a module design). Uploading the IFC starts the analysis of the design; see IFC to MOB2 file for how to wait for it.