Quality Collaboration API

Integrate your external quality management systems to collaborate on quality inspections.

Quality Collaboration allows you to use Coupa as the central collaboration point for quality inspections, particularly supplier-performed inspections.

This API enables you to:

  • Import or trigger new quality inspection requests.

  • Receive the final inspection results and status after the buyer and supplier collaboration process is complete.

  • Manage attachments related to the inspection and its characteristics.

The quality inspection process uses APIs for both inbound and outbound data flow:

  1. Send a POST request to create a new, open Quality Inspection in Coupa.

  2. Buyers and and suppliers collaborate using the Coupa UI and CSP, exchanging comments, filling results, and uploading attachments.

  3. Once the buyer accepts or rejects the inspection, use a GET request to read the final status and resolution.

Note:

This API is available only for customers that participate in the Early Access Program (EAP). If you want to be an EAP customer, contact your Coupa representative.

Actions

VerbPathDescription

GET

/api/quality_inspections

Get all quality inspections

GET

/api/quality_inspections/{id}

Get details of a quality inspection

POST

/api/v1/quality_inspections

Create a new quality inspection

POST

api/quality_inspections/{id}/exported

Mark a quality inspection as exported

POST

/api/quality_inspections/{id}/reset-exported

Reset exported flag of a quality inspection

GET

/api/quality_inspections/{inspection_id}/attachments

Get all attachments for an inspection (Header)

POST

/api/quality-inspections/{inspection_id}/attachments

Add a new attachment at the inspection level (Header)

GET/api/quality_inspections/{inspection_id}/characteristics/{characteristic_id}/attachments/{attachment_id}Get a specific attachment for a characteristic
GET/api/quality_inspections/{inspection_id}/attachments/{attachment_id}Get a specific attachment of a quality inspection

DELETE

/api/quality_inspections/{inspection_id}/attachments/{attachment_id}

Delete an attachment at the inspection level (Header)

GET

/api/quality_inspections/{inspection_id}/characteristics/{characteristic_id}/attachments

Get all attachments for a characteristic (Line)

POST

/api/v1/quality_inspections/{inspection_id}/characteristics/{characteristic_id}/attachments

Add a new attachment at the characteristic level (Line)

DELETE

/api/quality_inspections/{inspection_id}/characteristics/{characteristic_id}/attachments/{attachment_id}

Delete an attachment at the characteristic level (Line)

Scopes

This API requires the following scopes:

  • quality_collaboration.quality_inspection.read
  • quality_collaboration.quality_inspection.write

Elements

ElementDescriptionReq'dUniqueAllowable ValueInOutData Type
idInspection ID.nononoyesinteger
typeType of inspection.noInspectionyesyesstring
statusStatus of the inspection.no
  • Open

  • In Buyer Review

  • In Progress

  • Closed

noyesstring
reviewDecisionDecision made in the review.no
  • Accepted

  • Rejected

noyesstring
resolutionReasonTextResolution reason text.nonoyesstring
resolutionReasonTypeResolution reason type.nonoyesstring
resolutionReasonCodeResolution reason code.nonoyesstring
requestDateDate of the request.noyesyesdatetime
dueDateDue date.yesyesyesdatetime
supplierIdID of the supplier.yesyesyesinteger
itemIdID of the item.noyesyesinteger
itemNameName of the item.noyesyesstring
itemDescriptionItem description.noyesyesstring
warehouseIdWarehouse ID.nonoyesinteger
buyerBatchNumberBuyer batch number.noyesyesstring
supplierPartNumberSupplier part number.noyesyesstring
buyerPartNumberBuyer part number.noyesyesstring
itemQuantityItem quantity.yesyesyesinteger
sampleSizeSample size.noyesyesinteger
uomUnit of measure.yesyesyesinteger
requestedByUser who requested the inspection.yesyesyesinteger
refDocumentTypeDocument type.noPurchase Orderyesyesstring
refDocumentIdDocument ID.noyesyesstring
refDocumentItemDocument item.noyesyesstring
reviewedDateDate of the reviewnonoyesdatetime
reviewedByUser who reviewed.nonoyesstring
submittedDateDate submitted.nonoyesdatetime
submittedByUser who submitted.nonoyesstring
externalInspectionIdID of the external inspection.noyesyesstring
createdAtWhen the inspection was created.nonoyesdatetime
createdByUser who created the inspection.nonoyesinteger
modifiedAtDate modified.nonoyesdatetime
modifiedByUser who modified.nonoyesinteger
exportedWhether the record is exported.nonoyesboolean
characteristicsCharacteristic records associated with the inspection.noyesyesCharacteristic

Get a quality inspection

Method

GET /api/quality_inspections/{id}

Example cURL request
curl --location 'https://<your-instance>.com/api/quality_inspections/1' \
--header 'Accept: application/json' \
--header 'Accept: application/xml' \
--header 'Authorization: ••••••'
Example response
{
    "id": 1,
    "type": "Inspection",
    "status": "Closed",
    "resolutionReasonText": "accepted",
    "dueDate": "2025-11-20T10:00:00Z",
    "supplierId": 1,
    "itemId": 1,
    "itemName": "Inspection Material",
    "itemDescription": "Inspection material",
    "supplierPartNumber": "SLNG-123",
    "buyerPartNumber": "BLNG-123",
    "itemQuantity": 50.000000,
    "uom": 1,
    "requestedBy": 10,
    "refDocumentType": "Purchase Order",
    "refDocumentId": "EXTPO_003",
    "refDocumentItem": "0010",
    "createdAt": "2025-11-04T16:07:02Z",
    "modifiedAt": "2025-11-04T16:17:49Z",
    "exported": false,
    "characteristics": [
        {
            "id": 1,
            "lineNum": 1,
            "inspectionId": 1,
            "name": "Color",
            "type": "required",
            "isQuantitative": false,
            "specification": "Clear colourless ",
            "valueType": "choice",
            "characteristicValues": [
                {
                    "id": 1,
                    "characteristicId": 1,
                    "code": "1",
                    "domain": "COLOR",
                    "value": "Yellow"
                },
                {
                    "id": 2,
                    "characteristicId": 1,
                    "code": "2",
                    "domain": "COLOR",
                    "value": "light yellow"
                },
                {
                    "id": 3,
                    "characteristicId": 1,
                    "code": "3",
                    "domain": "COLOR",
                    "value": "No colour"
                }
            ],
            "expectedResults": {
                "id": 1,
                "characteristicId": 1,
                "numericValue": 3.000000000
            },
            "expectedLimits": [],
            "recordedCharacteristic": {
                "id": 1,
                "characteristicId": 1,
                "code": "1"
            }
        },
        {
            "id": 2,
            "lineNum": 2,
            "inspectionId": 1,
            "name": "Non-volatile residue",
            "type": "required",
            "isQuantitative": true,
            "specification": "Not more than 0.1%",
            "valueType": "numeric",
            "characteristicValues": [],
            "expectedResults": {
                "id": 2,
                "characteristicId": 2,
                "numericValue": 0.320000000,
                "valuePrecision": 2
            },
            "expectedLimits": [
                {
                    "id": 1,
                    "characteristicId": 2,
                    "limitType": "min",
                    "comparisonOperator": "gt",
                    "comparisonValue": 0.000000
                },
                {
                    "id": 2,
                    "characteristicId": 2,
                    "limitType": "max",
                    "comparisonOperator": "lt",
                    "comparisonValue": 0.100000
                }
            ],
            "recordedCharacteristic": {
                "id": 2,
                "characteristicId": 2,
                "numericValue": 0.050000000
            }
        },
        {
            "id": 3,
            "lineNum": 3,
            "inspectionId": 1,
            "name": "Reducing substances",
            "type": "required",
            "isQuantitative": true,
            "specification": "Not more than 70 mg/kg as sulfur dioxide",
            "valueType": "numeric",
            "characteristicValues": [],
            "expectedResults": {
                "id": 3,
                "characteristicId": 3,
                "numericValue": 55.000000000,
                "valuePrecision": 2
            },
            "expectedLimits": [
                {
                    "id": 3,
                    "characteristicId": 3,
                    "limitType": "min",
                    "comparisonOperator": "gt",
                    "comparisonValue": 0.000000
                },
                {
                    "id": 4,
                    "characteristicId": 3,
                    "limitType": "max",
                    "comparisonOperator": "lt",
                    "comparisonValue": 70.000000
                }
            ],
            "recordedCharacteristic": {
                "id": 3,
                "characteristicId": 3,
                "numericValue": 69.000000000
            }
        }
    ]
}

Create a quality inspection

Method

POST /api/quality_inspections

Example cURL request
curl --location 'https://<your-instance>/api/quality_inspections' \
--header 'Accept: application/json' \
--header 'Accept: application/xml' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
    "type": "inspection",
    "dueDate": "2025-12-20T10:00:00Z",
    "supplierId": 1,
    "itemId": 1,
    "supplierPartNumber": "SLNG-123",
    "buyerPartNumber": "BLNG-123",
    "buyerBatchNumber": "MPNBATCHNO-LNG456",
    "itemQuantity": 50.0,
    "sampleSize": 1,
    "uom": 1,
    "requestedBy": 10,
    "refDocumentType": "Purchase Order",
    "refDocumentId": "EXTPO_004",
    "refDocumentItem": "0010",
    "externalInspectionId": "EXT_QI_004",
    "characteristics": [
        {
            "name": "Color",
            "type": "REQUIRED",
            "isQuantitative": false,
            "requirement": "Clear colourless ",
            "valueType": "CHOICE",
            "characteristicValues": [
                {
                    "code": "1",
                    "domain": "COLOR",
                    "value": "Yellow"
                },
                {
                    "code": "2",
                    "domain": "COLOR",
                    "value": "light yellow"
                },
                {
                    "code": "3",
                    "domain": "COLOR",
                    "value": "No colour"
                }
            ],
            "expectedResults": {
                "targetValue": "3"
            },
            "expectedLimits": []
        },
        {
            "name": "Non-volatile residue",
            "type": "REQUIRED",
            "isQuantitative": true,
            "requirement": "Not more than 0.1%",
            "valueType": "NUMERIC",
            "characteristicValues": [],
            "expectedResults": {
                "targetValue": ".32",
                "valuePrecision": "2"
            },
            "expectedLimits": [
                {
                    "limitType": "MIN",
                    "comparisonOperator": "GT",
                    "comparisonValue": "0"
                },
                {
                    "limitType": "MAX",
                    "comparisonOperator": "LT",
                    "comparisonValue": "0.1"
                }
            ]
        },
        {
            "name": "Reducing substances",
            "type": "REQUIRED",
            "isQuantitative": true,
            "requirement": "Not more than 70 mg/kg as sulfur dioxide",
            "valueType": "NUMERIC",
            "characteristicValues": [],
            "expectedResults": {
                "targetValue": "55",
                "valuePrecision": "2"
            },
            "expectedLimits": [
                {
                    "limitType": "MIN",
                    "comparisonOperator": "GT",
                    "comparisonValue": "0"
                },
                {
                    "limitType": "MAX",
                    "comparisonOperator": "LT",
                    "comparisonValue": "70"
                }
            ]
        }
    ]
}'
Example response
{
    "id": 606,
    "type": "Inspection",
    "status": "Open",
    "dueDate": "2025-12-20T10:00:00Z",
    "supplierId": 1,
    "itemId": 1,
    "itemName": "Inspection Material",
    "itemDescription": "Inspection material",
    "supplierPartNumber": "SLNG-123",
    "buyerPartNumber": "BLNG-123",
    "itemQuantity": 50.0,
    "uom": 1,
    "requestedBy": 10,
    "refDocumentType": "Purchase Order",
    "refDocumentId": "EXTPO_004",
    "refDocumentItem": "0010",
    "createdAt": "2025-12-02T16:55:45.416467Z",
    "modifiedAt": "2025-12-02T16:55:51.185949Z",
    "exported": false,
    "characteristics": [
        {
            "id": 2976,
            "lineNum": 1,
            "inspectionId": 606,
            "name": "Color",
            "type": "required",
            "isQuantitative": false,
            "specification": "Clear colourless ",
            "valueType": "choice",
            "characteristicValues": [
                {
                    "id": 3193,
                    "code": "1",
                    "domain": "COLOR",
                    "value": "Yellow"
                },
                {
                    "id": 3194,
                    "code": "2",
                    "domain": "COLOR",
                    "value": "light yellow"
                },
                {
                    "id": 3195,
                    "code": "3",
                    "domain": "COLOR",
                    "value": "No colour"
                }
            ],
            "expectedResults": {
                "id": 2976,
                "characteristicId": 2976,
                "numericValue": 3
            },
            "recordedCharacteristic": {
                "id": 2976,
                "characteristicId": 2976
            }
        },
        {
            "id": 2977,
            "lineNum": 2,
            "inspectionId": 606,
            "name": "Non-volatile residue",
            "type": "required",
            "isQuantitative": true,
            "specification": "Not more than 0.1%",
            "valueType": "numeric",
            "expectedResults": {
                "id": 2977,
                "characteristicId": 2977,
                "numericValue": 0.32,
                "valuePrecision": 2
            },
            "expectedLimits": [
                {
                    "id": 3339,
                    "limitType": "min",
                    "comparisonOperator": "gt",
                    "comparisonValue": 0
                },
                {
                    "id": 3340,
                    "limitType": "max",
                    "comparisonOperator": "lt",
                    "comparisonValue": 0.1
                }
            ],
            "recordedCharacteristic": {
                "id": 2977,
                "characteristicId": 2977
            }
        },
        {
            "id": 2978,
            "lineNum": 3,
            "inspectionId": 606,
            "name": "Reducing substances",
            "type": "required",
            "isQuantitative": true,
            "specification": "Not more than 70 mg/kg as sulfur dioxide",
            "valueType": "numeric",
            "expectedResults": {
                "id": 2978,
                "characteristicId": 2978,
                "numericValue": 55,
                "valuePrecision": 2
            },
            "expectedLimits": [
                {
                    "id": 3341,
                    "limitType": "min",
                    "comparisonOperator": "gt",
                    "comparisonValue": 0
                },
                {
                    "id": 3342,
                    "limitType": "max",
                    "comparisonOperator": "lt",
                    "comparisonValue": 70
                }
            ],
            "recordedCharacteristic": {
                "id": 2978,
                "characteristicId": 2978
            }
        }
    ]
}