Appearance
API TUTORIAL – REPORTS
Intro
The bulk_launch endpoint takes a list of report payloads and creates one report per payload. Each report belongs to a project: pass its project uuid, or a project_name (and super_project) to use an existing project with that name or create it.
The flow to obtain the report will be:
- Post the report payloads and receive the UUIDs of the created report objects.
- Check the status of each report every few seconds until it is
ready. - Once
ready, use the presigned URL to download the file from Google Cloud Storage.
Post reports
The payload objects hold almost the same information the web interface sends when it creates a report. Each report type adds some information of its own to the meta field.
Parts reports (like BoMs, machine files for parts, ...) can be selected either by a list of assembly uuids in selected_assemblies, or by part batches: set meta.select_by_part_batches to true and list the part batch uuids in meta.part_batches.
Panel reports (like MOB2 files) have to be selected by the list of selected_assemblies.
Endpoint: https://back.produuz.it/api/v2/reports/bulk_launch/
- Method: POST.
- Request Body: List of payloads.
- Response:
201with the list of created report objects inreports.
Example Request Payload
json
[
{
"name": "my-test",
"document_type": "panel_mob2",
"project": "461f7d25-dea3-46b1-b908-5dd187e09ea0", // Direct project picking
"project_name": "my_project_name", // If no uuid, you can provide a name for an existent or new project.
"super_project": "my_project_folder", // If no uuid, you can provide a super_project name.
"selected_assemblies": [
"uuid-of-an-assembly"
// ...
],
"meta": {
"production_line_uuid": "uuid-of-the-production-line", // Always needed for mob files
"action_uuid": "uuid-of-the-mob-file-action", // Only needed for auto_mob2
"fill_mob2_defaults": true, // For auto mob defaults filling
"part_batches": []
}
},
{
//... another report payload
},
{
//... another report payload
}
][
{
"name": "my-test",
"document_type": "panel_mob2",
"project": "461f7d25-dea3-46b1-b908-5dd187e09ea0", // Direct project picking
"project_name": "my_project_name", // If no uuid, you can provide a name for an existent or new project.
"super_project": "my_project_folder", // If no uuid, you can provide a super_project name.
"selected_assemblies": [
"uuid-of-an-assembly"
// ...
],
"meta": {
"production_line_uuid": "uuid-of-the-production-line", // Always needed for mob files
"action_uuid": "uuid-of-the-mob-file-action", // Only needed for auto_mob2
"fill_mob2_defaults": true, // For auto mob defaults filling
"part_batches": []
}
},
{
//... another report payload
},
{
//... another report payload
}
]Example Response Payload
json
{
"status": "successfully_enqueued",
"reports": [
{
"uuid": "aa29c0b0-eb1a-4861-b5cc-e6c86a3bd665",
"created": "2025-08-19T12:34:13.783598Z",
"modified": "2025-08-19T12:34:13.783609Z",
"name": "my-test",
"username": "dev_fede",
"document_status": "waiting",
"document_type": "panel_mob2",
"project": "461f7d25-dea3-46b1-b908-5dd187e09ea0",
"meta": {
"part_batches": [],
"dynamic_forms": {
/// This is automatically filled in this case for mob2 files.
},
"fill_mob2_defaults": true,
"production_line_uuid": "uuid-of-the-production-line"
},
"selected_assemblies": [
"uuid-of-an-assembly"
// ...
],
"selected_assembly_designs": [],
"selected_modules": [],
"selected_module_designs": [],
"files": [
{
"uuid": "4599a741-79d9-4b23-b53d-2c6e1ca82507",
"created": "2025-08-19T12:34:14.703943Z",
"name": "waiting",
"short_name": "waiting",
"meta": {
"status": "waiting",
"version": 0
},
"cloud_folder": "461f7d25-dea3-46b1-b908-5dd187e09ea0/reports/aa29c0b0-eb1a-4861-b5cc-e6c86a3bd665/versions/0",
"presigned_url": "https://example.file",
"hash": ""
}
],
"last_file": {
"uuid": "4599a741-79d9-4b23-b53d-2c6e1ca82507",
"created": "2025-08-19T12:34:14.703943Z",
"name": "waiting",
"short_name": "waiting",
"meta": {
"status": "waiting",
"version": 0
},
"cloud_folder": "461f7d25-dea3-46b1-b908-5dd187e09ea0/reports/aa29c0b0-eb1a-4861-b5cc-e6c86a3bd665/versions/0",
"presigned_url": "https://example.file",
"hash": ""
}
},
{}, // Another report object
{} // Another report object
]
}{
"status": "successfully_enqueued",
"reports": [
{
"uuid": "aa29c0b0-eb1a-4861-b5cc-e6c86a3bd665",
"created": "2025-08-19T12:34:13.783598Z",
"modified": "2025-08-19T12:34:13.783609Z",
"name": "my-test",
"username": "dev_fede",
"document_status": "waiting",
"document_type": "panel_mob2",
"project": "461f7d25-dea3-46b1-b908-5dd187e09ea0",
"meta": {
"part_batches": [],
"dynamic_forms": {
/// This is automatically filled in this case for mob2 files.
},
"fill_mob2_defaults": true,
"production_line_uuid": "uuid-of-the-production-line"
},
"selected_assemblies": [
"uuid-of-an-assembly"
// ...
],
"selected_assembly_designs": [],
"selected_modules": [],
"selected_module_designs": [],
"files": [
{
"uuid": "4599a741-79d9-4b23-b53d-2c6e1ca82507",
"created": "2025-08-19T12:34:14.703943Z",
"name": "waiting",
"short_name": "waiting",
"meta": {
"status": "waiting",
"version": 0
},
"cloud_folder": "461f7d25-dea3-46b1-b908-5dd187e09ea0/reports/aa29c0b0-eb1a-4861-b5cc-e6c86a3bd665/versions/0",
"presigned_url": "https://example.file",
"hash": ""
}
],
"last_file": {
"uuid": "4599a741-79d9-4b23-b53d-2c6e1ca82507",
"created": "2025-08-19T12:34:14.703943Z",
"name": "waiting",
"short_name": "waiting",
"meta": {
"status": "waiting",
"version": 0
},
"cloud_folder": "461f7d25-dea3-46b1-b908-5dd187e09ea0/reports/aa29c0b0-eb1a-4861-b5cc-e6c86a3bd665/versions/0",
"presigned_url": "https://example.file",
"hash": ""
}
},
{}, // Another report object
{} // Another report object
]
}Report types ("document_type" field)
You can select from a list of document types (BoMs, machine files, ...). Some of them need a production line (meta.production_line_uuid), others a machine (meta.machine_uuid). GET https://back.produuz.it/api/v2/reports/document_types/ returns the current list with its labels.
| document_type | Description | Needs PL | Needs machine |
|---|---|---|---|
| plates_bom | Plates BoM | No | No |
| wood_bom | Wood BoM | No | No |
| designs_bom | Per-Design BoM | No | No |
| accesories_bom | Accesories BoM | No | No |
| custom_bom | Custom BoM | No | No |
| qr_stickers | QR Stickers | No | No |
| rack_load_stickers | Rack Load Stickers | No | No |
| production_excel | Production Excel | No | No |
| quality_control | Quality Control Report | No | No |
| worktime_excel | Worktime Excel | No | No |
| issues | Issues Report | No | No |
| custom_woodcsv | Custom Woods CSV | No | No |
| custom_platecsv | Custom Plates CSV | No | No |
| custom_accesorycsv | Custom Accesories CSV | No | No |
| wood_btl | BTL File [Woods] | No | Yes |
| wood_btlx | BTLx File [Woods] | No | Yes |
| wood_bvx | BVX File [Hundegger][Woods] | No | Yes |
| generic_wood_csv | Generic Wood CSV | No | Yes |
| plates_xcs | XCS Maestro File [Plates] | No | Yes |
| plates_ardis | Ardis File [Plates] | No | Yes |
| plates_dxf | DXF File [Plates] | No | Yes |
| plates_ptx | PTX File [Plates] | No | Yes |
| plates_cix | CIX Biesse File [Plates] | No | Yes |
| frame_mtf | MTF File [Roofs] | No | Yes |
| frame_nailer_csv | Frame Nails CSV | No | Yes |
| sts_steel_frame_file | STS Steel Frame File | No | Yes |
| frame_btl | BTL File [Frame] | No | No |
| steel_nc | DSTV .nc File | No | No |
| steel_wiscon | WISCON Welding | No | No |
| panel_mob1 | MOB v1 Machine File | Yes | No |
| panel_mob2 | MOB v2 Machine File | Yes | No |
| auto_mob2 | AUTO MOB v2 Machine File | Yes | No |
| panel_btlx | BTLx Frame File [Panel] | Yes | No |
For panel_mob2, set the flag fill_mob2_defaults in the meta field to load the defaults from your machine setups. Otherwise you need to copy the dynamic_forms field from a real report object.
Fetch report objects
Once a report is created, a job is enqueued to make the actual files.
Fetch each report object every few seconds until last_file.meta.status is ready. While the file is being made it reads waiting, then working_42 (42 % done); failed means the generation failed. Once it is ready, download the file directly from Google Cloud Storage through the presigned_url of last_file.
Endpoint: https://back.produuz.it/api/v2/reports/reports/uuid-of-the-report/
- Method: GET.
INFO
Presigned URLs expire. They are refreshed automatically, so when one has expired, fetch the report object again.