Skip to content

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).

Endpoint: https://back.produuz.it/api/v2/cloudstorage/packages/6d85a4b6-2c8d-4708-a6d5-5e78469c1029/presign_for_new_file/

  • 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.