Version 3.7

API changes

Reprint → QualityControl

The reprint functionality was renamed/moved to quality control. The quality_control information resides on the scan endpoint, whereas reprint resided on scan_assignment. The following endpoints were replaced:

endpoint

replacement

/reprint_reason/

/quality_control_reason/

/reprint_reason_category/

/quality_control_reason_category/

Scan

Added the following fields:

field

type

description

is_backed_up

boolean

Whether the scan is moved to the backup disk.

qc_reasons

list

List of QualityControlReason ids. Replaces the reprint_reasons field on ScanAssignment.

qc_comment

string

Quality control comment. Replaces the reprint_comment field on ScanAssignment.

qc_machine

boolean

Whether the scan passed the automated quality inspection. Replaces the passed field on InspectionReport.

qc_operator

boolean

Whether the scan passed quality inspection by the (human) operator. Replaces the approved field on InspectionReport. Also partly replaces the reprint field on ScanAssignment.

qc_needs_review

boolean

Whether the scan needs review by a (human) operator.

qc_pass

boolean

Final quality control pass/fail decision.

Other changes

endpoint

changes

InspectionReport

Removed passed and approved fields. Replaced by qc_machine and qc_operator on Scan model.

Part

Removed unused field scan_assignment_usernames

Query

Replaced data.inspection_status with data.quality_control_status. The status can be one of ANY, QC Review needed, QC Passed, QC Failed.

ReportTemplate

Added missing uuid and title fields.

ScanAssignment

Removed the fields reprint, reprint_comment, reprint_reasons (moved to the Scan model and renamed).

Settings

Added the fields default_report_template, default_inspection_profile

Webhook changes

scan.quality_control webhook

Removed the scan.inspect and scan.inspect.update webhook. Instead there is now a scan.quality_control. This is fired for any change in quality control, for instance:

  • The part is scanned in the AM-Quality, leading to changes in qc_machine, and possibly qc_needs_review and qc_pass.

  • The part is approved or rejected by the operator, possibly leading to changes in qc_operator.

  • The part is re-evaluated with a different inspection_profile, possibly leading to changes in qc_machine.

The scan.quality_control webhook has the same payload as the other scan.* webhooks.

Scan webhooks

The following changes hold for all scan-related webhooks (scan.capture, scan.assign, scan.reject, scan.reassign, scan.unassign). Two duplicate fields that were already in the root dictionary were removed from the assignment field:

  • assignment['scan']

  • assignment['design_material']

Removed the reprint-related fields:

  • assignment[‘reprint’]

  • assignment[‘reprint_comment’]

  • assignment[‘reprint_reasons’]

Added several new fields (see Scan object above for explanation):

  • inspectionreport (uuid)

  • qc_machine (boolean or null)

  • qc_operator (boolean or null)

  • qc_needs_review (boolean)

  • qc_pass (boolean or null)

  • qc_comment (string or null)

  • qc_reasons (list of ids)

Here’s an example of a new webhook:

{
    "hook":{
    "id":13,
    "event":"scan.assign",
    "target":"https://batcher.myopps.nl/api/1.0/amflow/update"
    },
    "data":{
    "url":"/api/scan/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/",
    "created":"2026-03-11T16:36:57.247589+01:00",
    "modified":"2026-03-11T16:36:57.581719+01:00",
    "uuid":"21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d",
    "scan_session":"cbe45ba7-da35-444d-b598-4e70587a33cc",
    "design_material":"193d3830c6e41e3f3cc8114508119fedd08d04f7_SLS_PAGF_GREY",
    "scan_urls":[
        "/data/scans/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/scan_cam01.png",
        "/data/scans/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/scan_cam02.png",
        "/data/scans/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/scan_cam03.png",
        "/data/scans/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/scan_cam04.png",
        "/data/scans/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/scan_cam05.png"
    ],
    "scan_urls_full":[
        "/api/scan/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/full_image/1/",
        "/api/scan/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/full_image/2/",
        "/api/scan/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/full_image/3/",
        "/api/scan/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/full_image/4/",
        "/api/scan/21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d/full_image/5/"
    ],
    "assignment":{
        "assignment":"8801b334-7012-46e3-aeba-f2a2683a8f90",
        "part_id":"2471584",
        "part_title":"montageblok groot step",
        "copies":1,
        "last_added_copies":1,
        "manual":false
    },
    "output":{
        "id":2
    },
    "batch":{
        "id":"PRTS_SRC_102_DAT_20260309_VER_A",
        "title":"20260309_02A"
    },
    "inspectionreport": "c4266de0-c541-49d9-807d-9061139a8917",
    "qc_machine": false,
    "qc_needs_review": false,
    "qc_operator": true,
    "qc_pass": true,
    "qc_comment": "The part was misaligned",
    "qc_reasons": ["misalignment"],
    }
}

And here is a diff of the changes:

@@ -27,14 +27,8 @@
        ],
        "assignment":{
            "assignment":"8801b334-7012-46e3-aeba-f2a2683a8f90",
-            "scan":"21fb49b0-1d60-11f1-90cb-2d9ab9fdf55d",
            "part_id":"2471584",
            "part_title":"montageblok groot step",
-            "design_material":"193d3830c6e41e3f3cc8114508119fedd08d04f7_SLS_PAGF_GREY",
-            "reprint":false,
-            "reprint_comment":null,
-            "reprint_reasons":[
-            ],
            "copies":1,
            "last_added_copies":1,
            "manual":false
@@ -47,5 +41,12 @@
            "title":"20260309_02A"
        },
        "archived":false,
+        "inspectionreport": "c4266de0-c541-49d9-807d-9061139a8917",
+        "qc_machine": false,
+        "qc_needs_review": false,
+        "qc_operator": true,
+        "qc_pass": true,
+        "qc_comment": "The part was misaligned",
+        "qc_reasons": ["misalignment"],
        }
    }