Skip to content

API TUTORIAL – POST DESIGNS

Intro

This document provides a shallow guide on how to post designs and upload 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 is needed. The project uuid can be also a standard library uuid, since internally stdlibs are also projects.

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/constructibles/assembly_designs/get_or_create/

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, you have to request a presigned URL to upload a file to AWS S3.

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

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://woodwall-test.s3.amazonaws.com",
  "method": "POST",
  "fields": {
    "acl": "private",
    "Content-Type": "application/octet-stream",
    "success_action_status": "201",
    "key": "60252ad1-60b5-4d49-92e8-12f159ddf47f/assembly_designs/340c1149-7f85-4a83-bede-10089e462069/resources/3/D-10001.ifc",
    "x-amz-algorithm": "AWS4-HMAC-SHA256",
    "x-amz-credential": "AKIAJYHY3TI6VK2ZCYQA/20250915/eu-central-1/s3/aws4_request",
    "x-amz-date": "20250915T184331Z",
    "policy": "eyJleHBpcmF0aW9uIjogIjIwMjUtMDktMTVUMTk6NDM6MzFaIiwgImNvbmRpdGlvbnMiOiBbeyJhY2wiOiAicHJpdmF0ZSJ9LCB7IkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSwgeyJzdWNjZXNzX2FjdGlvbl9zdGF0dXMiOiAiMjAxIn0sIHsiYnVja2V0IjogIndvb2R3YWxsLXRlc3QifSwgeyJrZXkiOiAiNjAyNTJhZDEtNjBiNS00ZDQ5LTkyZTgtMTJmMTU5ZGRmNDdmL2Fzc2VtYmx5X2Rlc2lnbnMvMzQwYzExNDktN2Y4NS00YTgzLWJlZGUtMTAwODllNDYyMDY5L3Jlc291cmNlcy8zL0QtMTAwMDEuaWZjIn0sIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFLSUFKWUhZM1RJNlZLMlpDWVFBLzIwMjUwOTE1L2V1LWNlbnRyYWwtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1kYXRlIjogIjIwMjUwOTE1VDE4NDMzMVoifV19",
    "x-amz-signature": "6c83999765a80e91bacbc892ea6187fd59a845bc2d28eef0e2465aebbb8511e4"
  },
  "headers": {}
}
{
  "url": "https://woodwall-test.s3.amazonaws.com",
  "method": "POST",
  "fields": {
    "acl": "private",
    "Content-Type": "application/octet-stream",
    "success_action_status": "201",
    "key": "60252ad1-60b5-4d49-92e8-12f159ddf47f/assembly_designs/340c1149-7f85-4a83-bede-10089e462069/resources/3/D-10001.ifc",
    "x-amz-algorithm": "AWS4-HMAC-SHA256",
    "x-amz-credential": "AKIAJYHY3TI6VK2ZCYQA/20250915/eu-central-1/s3/aws4_request",
    "x-amz-date": "20250915T184331Z",
    "policy": "eyJleHBpcmF0aW9uIjogIjIwMjUtMDktMTVUMTk6NDM6MzFaIiwgImNvbmRpdGlvbnMiOiBbeyJhY2wiOiAicHJpdmF0ZSJ9LCB7IkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSwgeyJzdWNjZXNzX2FjdGlvbl9zdGF0dXMiOiAiMjAxIn0sIHsiYnVja2V0IjogIndvb2R3YWxsLXRlc3QifSwgeyJrZXkiOiAiNjAyNTJhZDEtNjBiNS00ZDQ5LTkyZTgtMTJmMTU5ZGRmNDdmL2Fzc2VtYmx5X2Rlc2lnbnMvMzQwYzExNDktN2Y4NS00YTgzLWJlZGUtMTAwODllNDYyMDY5L3Jlc291cmNlcy8zL0QtMTAwMDEuaWZjIn0sIHsieC1hbXotYWxnb3JpdGhtIjogIkFXUzQtSE1BQy1TSEEyNTYifSwgeyJ4LWFtei1jcmVkZW50aWFsIjogIkFLSUFKWUhZM1RJNlZLMlpDWVFBLzIwMjUwOTE1L2V1LWNlbnRyYWwtMS9zMy9hd3M0X3JlcXVlc3QifSwgeyJ4LWFtei1kYXRlIjogIjIwMjUwOTE1VDE4NDMzMVoifV19",
    "x-amz-signature": "6c83999765a80e91bacbc892ea6187fd59a845bc2d28eef0e2465aebbb8511e4"
  },
  "headers": {}
}

With this payload you are able to upload the file to S3 following the AWS user guides