Skip to content

API v2

The produuz.it REST API lets you automate design uploads, constructible management, report generation, and more from external systems.

Interactive Documentation

The full API is documented through an interactive Swagger interface:

Authentication

The API uses JWT (JSON Web Token) authentication with OTP (one-time password) verification.

  1. Obtain a tokenPOST /api/v2/my_user/token/ with your credentials and OTP code.
  2. Include the token — Add Authorization: Bearer <token> to all subsequent requests.
  3. Refresh the tokenPOST /api/v2/my_user/token/refresh/ before the token expires.

TIP

For automated integrations, ask your admin to create an API Account in Company Settings. API accounts can authenticate without OTP.

Main Endpoint Groups

GroupBase pathDescription
Constructibles/api/v2/constructibles/Designs, actuals (assemblies/modules), batches, parts
Company/api/v2/company/Projects, users, IFC parsing setups, API accounts
Reports/api/v2/reports/Report creation and status tracking
Factories/api/v2/factories/Production lines, stations, machines, triggers
Cloud Storage/api/v2/cloudstorage/File uploads and package management
Logistics/api/v2/logistics/Materials, stock, sizes, orders, delivery
Records/api/v2/records/Issues, production events
Integrations/api/v2/integrations/Webhooks
User/api/v2/my_user/Profile, authentication, settings

Common Workflows

For step-by-step API tutorials, see Connecting to the API:

Material Quantities for Purchasing

To order material you don't need to download every part. Ask the sizes endpoint for the material in scope and let it count for you:

POST /api/v2/logistics/sizes/profiles/names_and_actual_dims/
POST /api/v2/logistics/sizes/plates/names_and_actual_dims/
POST /api/v2/logistics/sizes/profiles/names_and_actual_dims/
POST /api/v2/logistics/sizes/plates/names_and_actual_dims/

The scope goes in the body as uuid lists, which are OR-ed together. Any of projects, assemblies, part_batches and modules works. Add with_counts to get the quantities:

json
{ "projects": ["<project uuid>"], "with_counts": true }
{ "projects": ["<project uuid>"], "with_counts": true }

Each entry is one material size with its cut dimensions. For profiles the dimension is the cut length in mm; for plates it is length*width:

json
[{
  "size": "VUREN_C24 38*120",
  "actual_dims": ["5630", "5380"],
  "dims": [
    {"dim": "5630", "count": 2, "total_length": 11260.0},
    {"dim": "5380", "count": 4, "total_length": 21520.0}
  ],
  "count": 148,
  "total_length": 115766.0
}]
[{
  "size": "VUREN_C24 38*120",
  "actual_dims": ["5630", "5380"],
  "dims": [
    {"dim": "5630", "count": 2, "total_length": 11260.0},
    {"dim": "5380", "count": 4, "total_length": 21520.0}
  ],
  "count": 148,
  "total_length": 115766.0
}]
  • count is the number of parts to cut. Deprecated parts — replaced or deleted work — are not counted, so the quantities are orderable as they come.
  • Totals come as total_length in mm for profiles and total_area in mm2 for plates.
  • Without with_counts you get only size and actual_dims, which is the cheaper call for filling in a material selector.
  • with_counts needs a scope: counting a whole company catalogue is rejected with a 400.
  • Scope by projects, assemblies or part_batches. A part inside a panel that sits inside a module is only linked to the panel, so scoping by modules alone can miss parts.

Rate Limits

The API enforces rate limits to ensure fair usage. If you receive a 429 Too Many Requests response, wait before retrying.