MENU navbar-image

Introduction

InCheck API for Solution Providers

External API for Approved Solution Providers (Level 1) to integrate with the ZDHC Sandbox platform for chemical inventory reporting.

ID Format

ZDHC Sandbox uses a structured ID format: {prefix}-XXXXXXX-Z

Prefix Entity Type Example
01 Organisation 01-XXXXXXX-Z
20 Product 20-XXXXXXX-Z
40 InCheck Report 40-XXXXXXX-Z

Error Model

All non-2xx responses use a consistent error structure:

{
    "error": {
        "code": "string",
        "message": "string",
        "details": {}
    }
}

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Retrieve a token by calling the /auth/login endpoint.

Solution Providers/V1

Inventories

Bulk create inventories and products

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/bulk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inventories\": [
        {
            \"supplier_reference_id\": \"01-NKFR3DJ2D3CY-D\",
            \"period\": \"2025-10\",
            \"type\": \"usage\",
            \"products\": [
                {
                    \"product_reference_id\": \"20-2R4PXUTRJJFG-R\",
                    \"product_name\": \"Custom Chemical X\",
                    \"formulator_name\": \"Local Supplier Co.\",
                    \"weight\": 12.5
                }
            ]
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/bulk"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "inventories": [
        {
            "supplier_reference_id": "01-NKFR3DJ2D3CY-D",
            "period": "2025-10",
            "type": "usage",
            "products": [
                {
                    "product_reference_id": "20-2R4PXUTRJJFG-R",
                    "product_name": "Custom Chemical X",
                    "formulator_name": "Local Supplier Co.",
                    "weight": 12.5
                }
            ]
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (207):


Batch processed. Check each result individually.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

POST api/solution-providers/v1/inventories/bulk

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

inventories   object[]     

Array of inventories to create.

supplier_reference_id   string     

The reference_id of an existing supplier organisation. The reference_id of an existing record in the organisations table. Example: 01-NKFR3DJ2D3CY-D

period   string     

Inventory reporting period in YYYY-MM format. Must be a valid date in the format Y-m. Example: 2025-10

type   string     

Inventory type. Accepted values: usage, delivery, unspecified. Example: usage

Must be one of:
  • usage
  • delivery
  • unspecified
products   object[]  optional    

Array of products for this inventory. Can be empty.

product_reference_id   string  optional    

Reference ID of an existing published chemical product. Required when product_name is not provided. This field is required when inventories..products..product_name is not present. The reference_id of an existing record in the chemical_products table. Example: 20-2R4PXUTRJJFG-R

product_name   string  optional    

Custom product name. Required when product_reference_id is not provided. This field is required when inventories..products..product_reference_id is not present. Must not be greater than 255 characters. Example: Custom Chemical X

formulator_name   string     

Name of the product formulator. Must not be greater than 255 characters. Example: Local Supplier Co.

weight   number     

Product weight. Must be zero or greater, with at most 2 decimal places. Must be at least 0. Example: 12.5

List chemical inventories for linked suppliers

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories?per_page=20&filter%5Bsupplier_reference_id%5D=01-2R4PXUVG4DE3-P&filter%5Baid%5D=eos&filter%5Bperiod%5D=2025-10&filter%5Bstatus%5D=draft&sort=period&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filter\": {
        \"supplier_reference_id\": \"qui\",
        \"aid\": \"doloribus\",
        \"period\": \"2026-07\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories"
);

const params = {
    "per_page": "20",
    "filter[supplier_reference_id]": "01-2R4PXUVG4DE3-P",
    "filter[aid]": "eos",
    "filter[period]": "2025-10",
    "filter[status]": "draft",
    "sort": "period",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "filter": {
        "supplier_reference_id": "qui",
        "aid": "doloribus",
        "period": "2026-07"
    }
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "inventory_reference_id": "40-W8B7SQEWYKNG-M",
            "supplier_reference_id": "01-W8B7SQEWXEGA-G",
            "aid": "AA1122334455",
            "supplier_name": "Combined Fabrics Ltd",
            "period": "2025-10",
            "type": "usage",
            "status": "published",
            "incheck_report_available": true,
            "submitted_at": "2025-11-15T00:00:00.000000Z",
            "published_at": "2025-12-10T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2025-11-01T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        },
        {
            "inventory_reference_id": "40-W8B7SQS69D98-P",
            "supplier_reference_id": "01-3CZETFT9N4NE-A",
            "aid": "AA1122334455",
            "supplier_name": "Combined Fabrics Ltd",
            "period": "2025-10",
            "type": "usage",
            "status": "published",
            "incheck_report_available": true,
            "submitted_at": "2025-11-15T00:00:00.000000Z",
            "published_at": "2025-12-10T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2025-11-01T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/inventories

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 20

filter[supplier_reference_id]   organisation_reference_id  optional    

Filter column supplier_reference_id by any accepted value. Matches part of the value. Example: 01-2R4PXUVG4DE3-P

filter[aid]   string  optional    

Filter column aid by any accepted value. The aid of the supplier Example: eos

filter[period]   string  optional    

Filter column period by any accepted value. Matches part of the value. Example: 2025-10

filter[status]   string  optional    

Filter column status by any accepted value. Matches exact value. Example: draft

Must be one of:
  • draft
  • submitted
  • declined
  • published
sort   string  optional    

sort by any accepted column: period, supplier_name, status. prefix a "-" before the column name to sort in descending order Example: period

page   integer  optional    

the page number to show. Example: 1

Body Parameters

filter   object  optional    
supplier_reference_id   string  optional    

Example: qui

aid   string  optional    

Example: doloribus

period   string  optional    

Must be a valid date in the format Y-m. Example: 2026-07

status   string  optional    

Store a chemical inventory for a linked supplier

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"supplier_reference_id\": \"01-6UHSP8PEPHD4-V\",
    \"period\": \"2025-10\",
    \"type\": \"usage\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "supplier_reference_id": "01-6UHSP8PEPHD4-V",
    "period": "2025-10",
    "type": "usage"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "inventory_reference_id": "40-9JNTVCVVWEHM-T",
        "supplier_reference_id": "01-BYXCJ2JRT9EF-Q",
        "period": "2025-10",
        "type": "usage",
        "status": "draft",
        "created_at": "2026-05-29T10:00:00.000000Z",
        "updated_at": "2026-05-29T10:00:00.000000Z"
    }
}
 

Example response (201):


Inventory created in draft status
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Supplier not found or not connected
 

Example response (409):


Active inventory already exists for this supplier + period
 

Example response (422):


Validation error
 

Request      

POST api/solution-providers/v1/inventories

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

supplier_reference_id   string     

The reference_id of an existing supplier organisation. Must match the regex /^01-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 01-6UHSP8PEPHD4-V

period   string     

Inventory reporting period in YYYY-MM format. Must be a valid date in the format Y-m. Example: 2025-10

type   string     

Inventory type. Accepted values: usage, delivery, unspecified. Example: usage

Must be one of:
  • usage
  • delivery
  • unspecified

Update a chemical inventory

requires authentication

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/animi" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"period\": \"2025-10\",
    \"type\": \"usage\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/animi"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "period": "2025-10",
    "type": "usage"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "inventory_reference_id": "40-P4WMDHDEL4CY-N",
        "supplier_reference_id": "01-JQKN7X78BJUL-V",
        "period": "2025-10",
        "type": "usage",
        "status": "draft",
        "created_at": "2026-05-29T10:00:00.000000Z",
        "updated_at": "2026-05-29T10:00:00.000000Z"
    }
}
 

Example response (200):


Updated
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or not owned by SP
 

Example response (409):


Period change conflicts with an existing inventory for same supplier + new period
 

Example response (422):


Validation error
 

Request      

PUT api/solution-providers/v1/inventories/{inventory_reference_id}

PATCH api/solution-providers/v1/inventories/{inventory_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: animi

Body Parameters

period   string     

Inventory reporting period in YYYY-MM format. Must be a valid date in the format Y-m. Example: 2025-10

type   string     

Inventory type. Accepted values: usage, delivery, unspecified. Example: usage

Must be one of:
  • usage
  • delivery
  • unspecified

Submit a chemical inventory for verification

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/harum/submit" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/harum/submit"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "inventory_reference_id": "40-9JNTVCXY3XU3-Q",
        "supplier_reference_id": "01-ZDLURMW7VMVP-D",
        "period": "2025-10",
        "type": "usage",
        "status": "draft",
        "created_at": "2026-05-29T10:00:00.000000Z",
        "updated_at": "2026-05-29T10:00:00.000000Z"
    }
}
 

Example response (200):


Submitted successfully
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or not owned by this SP
 

Example response (422):


Inventory is not in draft status
 

Request      

POST api/solution-providers/v1/inventories/{inventory_reference_id}/submit

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: harum

Destroy

requires authentication

Destroy a chemical inventory

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/libero" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/libero"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204):

Empty response
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found.
 

Example response (409):


Only draft inventories can be deleted.
 

Request      

DELETE api/solution-providers/v1/inventories/{inventory_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: libero

Inventory Products

List inventory products

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products?per_page=6&search=reprehenderit&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"vufeciicwvzfhjoycmygildwjaipzsh\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products"
);

const params = {
    "per_page": "6",
    "search": "reprehenderit",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "vufeciicwvzfhjoycmygildwjaipzsh"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "inventory_product_id": 209254,
            "product_reference_id": "20-3CZETFPCPSS3-K",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "formulator_name": "Super Glanz spa Unipersonale",
            "weight": 41.5
        },
        {
            "inventory_product_id": 209254,
            "product_reference_id": "20-P4WMDHG7SYZU-U",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "formulator_name": "Super Glanz spa Unipersonale",
            "weight": 41.5
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or not owned by this SP
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/inventories/{inventory_reference_id}/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

Reference ID of the supplier inventory. Example: 40-4SLWVAK6HPG-B

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 6

search   string  optional    

Search in all of these columns: name, originalProduct.name. Filter type: like. Minimum length: 3. Example: reprehenderit

page   integer  optional    

the page number to show. Example: 1

Body Parameters

search   string  optional    

Must be at least 3 characters. Example: vufeciicwvzfhjoycmygildwjaipzsh

Store an inventory product

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"product_reference_id\": \"20-P4WMDHKQYPMG-J\",
    \"product_name\": \"Custom Chemical X\",
    \"formulator_name\": \"Local Supplier Co.\",
    \"weight\": 12.5
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "product_reference_id": "20-P4WMDHKQYPMG-J",
    "product_name": "Custom Chemical X",
    "formulator_name": "Local Supplier Co.",
    "weight": 12.5
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "inventory_product_id": 209254,
        "product_reference_id": "20-7BC39KMQSLL6-D",
        "product_name": "APPRETTO ACR/EF [P738WC76]",
        "formulator_name": "Super Glanz spa Unipersonale",
        "weight": 41.5
    }
}
 

Example response (201):


Product line added
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or catalogue product not found/published
 

Example response (422):


Validation error
 

Request      

POST api/solution-providers/v1/inventories/{inventory_reference_id}/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

Reference ID of the supplier inventory. Example: 40-4SLWVAK6HPG-B

Body Parameters

product_reference_id   string  optional    

Reference ID of an existing published chemical product. Required when product_name is not provided. This field is required when product_name is not present. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-P4WMDHKQYPMG-J

product_name   string  optional    

Custom product name. Required when product_reference_id is not provided. This field is required when product_reference_id is not present. Must not be greater than 255 characters. Example: Custom Chemical X

formulator_name   string     

Name of the chemical formulator. Must not be greater than 255 characters. Example: Local Supplier Co.

weight   number     

Product weight. Must be zero or greater, with at most 2 decimal places. Must be at least 0. Example: 12.5

Update an inventory product

requires authentication

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products/id" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"product_reference_id\": \"20-W8B7SQPBWZMH-J\",
    \"product_name\": \"Custom Chemical X\",
    \"formulator_name\": \"Local Supplier Co.\",
    \"weight\": 12.5
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products/id"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "product_reference_id": "20-W8B7SQPBWZMH-J",
    "product_name": "Custom Chemical X",
    "formulator_name": "Local Supplier Co.",
    "weight": 12.5
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "inventory_product_id": 209254,
        "product_reference_id": "20-3CZETFV7UCWF-O",
        "product_name": "APPRETTO ACR/EF [P738WC76]",
        "formulator_name": "Super Glanz spa Unipersonale",
        "weight": 41.5
    }
}
 

Example response (200):


Updated
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory or product line not found / not owned by SP
 

Example response (422):


Validation error
 

Request      

PUT api/solution-providers/v1/inventories/{inventory_reference_id}/products/{inventory_product_id}

PATCH api/solution-providers/v1/inventories/{inventory_reference_id}/products/{inventory_product_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

Reference ID of the supplier inventory. Example: 40-4SLWVAK6HPG-B

inventory_product_id   string     

The ID of the inventory product. Example: id

Body Parameters

product_reference_id   string  optional    

Reference ID of an existing published chemical product. Required when product_name is not provided. This field is required when product_name is not present. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-W8B7SQPBWZMH-J

product_name   string  optional    

Custom product name. Required when product_reference_id is not provided. This field is required when product_reference_id is not present. Must not be greater than 255 characters. Example: Custom Chemical X

formulator_name   string     

Name of the chemical formulator. Must not be greater than 255 characters. Example: Local Supplier Co.

weight   number     

Product weight. Must be zero or greater, with at most 2 decimal places. Must be at least 0. Example: 12.5

Delete an inventory product

requires authentication

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products/praesentium" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories/40-4SLWVAK6HPG-B/products/praesentium"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204):

Empty response
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory or product line not found / not owned by SP
 

Example response (422):


Validation error
 

Request      

DELETE api/solution-providers/v1/inventories/{inventory_reference_id}/products/{inventory_product_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

Reference ID of the supplier inventory. Example: 40-4SLWVAK6HPG-B

inventory_product_id   string     

The ID of the inventory product. Example: praesentium

Products

List published chemical products

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/products?per_page=12&page=1&search=perferendis&filter%5Bformulator_name%5D=in&filter%5Bconformance_level%5D=illo&filter%5Bpid%5D=modi" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"yahxzfmgtcnuauydsbfz\",
    \"per_page\": 21,
    \"filter\": {
        \"formulator_name\": \"quo\",
        \"pid\": \"fugiat\",
        \"conformance_level\": \"eum\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/products"
);

const params = {
    "per_page": "12",
    "page": "1",
    "search": "perferendis",
    "filter[formulator_name]": "in",
    "filter[conformance_level]": "illo",
    "filter[pid]": "modi",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "yahxzfmgtcnuauydsbfz",
    "per_page": 21,
    "filter": {
        "formulator_name": "quo",
        "pid": "fugiat",
        "conformance_level": "eum"
    }
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "product_reference_id": "20-W8B7SQVDHJGE-N",
            "pid": "PID1234567890",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "local_language_names": [
                "P738WC76"
            ],
            "formulator_reference_id": "01-ZDLURM6TMP26-A",
            "formulator_name": "Super Glanz spa Unipersonale",
            "conformance_level_name": "Level 3",
            "ctz_level_name": null
        },
        {
            "product_reference_id": "20-HGQJWY9V4YMJ-Y",
            "pid": "PID1234567890",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "local_language_names": [
                "P738WC76"
            ],
            "formulator_reference_id": "01-W8B7SQVGKMCQ-G",
            "formulator_name": "Super Glanz spa Unipersonale",
            "conformance_level_name": "Level 3",
            "ctz_level_name": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 12

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: name, language_names. Filter type: like. Minimum length: 3. Example: perferendis

filter[formulator_name]   string  optional    

Filter column formulator_name by any accepted value. Filter by formulator name Example: in

filter[conformance_level]   string  optional    

Filter column conformance_level by any accepted value. Filter by conformance level Example: illo

filter[pid]   string  optional    

Filter column pid by any accepted value. The PID of the product Example: modi

Body Parameters

search   string  optional    

Must be at least 3 characters. Example: yahxzfmgtcnuauydsbfz

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 21

filter   object  optional    
formulator_name   string  optional    

Example: quo

pid   string  optional    

Example: fugiat

conformance_level   string  optional    

Example: eum

Show a published chemical product

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/products/20-R6X7QVBPAA-R" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/products/20-R6X7QVBPAA-R"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "product_reference_id": "20-W8B7SQV4BJVP-D",
        "product_name": "Appritec A.C.P [P967HD59]",
        "local_language_names": [
            "P967HD59"
        ],
        "pid": "PID1234567890",
        "formulator_reference_id": "01-QT2KBENGHXJ8-T",
        "formulator_name": "Chem Corner Private Limited",
        "conformance_level_name": "Level 3",
        "ctz_level_name": null,
        "sds_url": "https://example.com/sds.pdf",
        "website_url": null,
        "use_types": [
            {
                "use_type_name": "Softening agents",
                "category_name": "Textile Finishing Assistants",
                "substrate_name": "Textile"
            },
            {
                "use_type_name": "Softening agents",
                "category_name": "Finishing Assistants",
                "substrate_name": "Textile"
            }
        ]
    }
}
 

Example response (200):


Product found and published
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Product not found or not published
 

Request      

GET api/solution-providers/v1/products/{product_identifer}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

product_identifer   string     

Reference ID or PID of the chemical product. Example: 20-R6X7QVBPAA-R

Inventory

Connected Suppliers

requires authentication

Show all eligable suppliers for a given Solution Provider

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/connected-suppliers?per_page=9&filter%5Bsupplier_reference_id%5D=01-ZDLURM622ZC7-A&filter%5Bhas_active_subscription%5D=&filter%5Baid%5D=iusto&search=consequatur&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filter\": {
        \"supplier_reference_id\": \"assumenda\",
        \"has_active_subscription\": false,
        \"aid\": \"fuga\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/connected-suppliers"
);

const params = {
    "per_page": "9",
    "filter[supplier_reference_id]": "01-ZDLURM622ZC7-A",
    "filter[has_active_subscription]": "0",
    "filter[aid]": "iusto",
    "search": "consequatur",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "filter": {
        "supplier_reference_id": "assumenda",
        "has_active_subscription": false,
        "aid": "fuga"
    }
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "supplier_reference_id": "01-6FUUY46UMH-P",
        "aid": "A356IB10",
        "supplier_name": "Ping Yang Pengye Shoes Com Ltd",
        "location": "CN",
        "location_name": "China",
        "current_subscription": {
            "product_name": "InCheck",
            "start_date": "2026-06-22T13:40:09.632223Z",
            "end_date": "2026-08-21T13:40:09.632911Z"
        }
    }
}
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/incheck/connected-suppliers

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 9

filter[supplier_reference_id]   organisation_reference_id  optional    

Filter column supplier_reference_id by any accepted value. The reference ID of the supplier Example: 01-ZDLURM622ZC7-A

filter[has_active_subscription]   boolean  optional    

Filter column has_active_subscription by any accepted value. Whether the supplier has an active InCheck subscription Example: false

filter[aid]   string  optional    

Filter column aid by any accepted value. The aid of the supplier Example: iusto

search   string  optional    

Search in all of these columns: name. Filter type: like. Example: consequatur

page   integer  optional    

the page number to show. Example: 1

Body Parameters

filter   object  optional    
supplier_reference_id   string  optional    

Example: assumenda

has_active_subscription   boolean  optional    

Example: false

aid   string  optional    

Example: fuga

InCheck

Formulators

requires authentication

Search formulators by name to support product selection during inventory preparation.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/formulators?search=id&filter%5Bcountry%5D=NL%2CBE&has_gateway_products=1&page=1&per_page=15" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"auamemgzpjsyfglultrocihlvbgntrjmpzprtq\",
    \"per_page\": 23,
    \"has_gateway_products\": false,
    \"filter\": {
        \"country\": \"quaerat\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/formulators"
);

const params = {
    "search": "id",
    "filter[country]": "NL,BE",
    "has_gateway_products": "1",
    "page": "1",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "search": "auamemgzpjsyfglultrocihlvbgntrjmpzprtq",
    "per_page": 23,
    "has_gateway_products": false,
    "filter": {
        "country": "quaerat"
    }
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "formulator_reference_id": "01-W8B7SQFWSPFU-P",
            "legacy_aid": "A12345678",
            "name": "ACME Chemical Company",
            "country": "Germany",
            "has_gateway_products": true,
            "product_count": 42,
            "last_updated_at": "2026-06-20T09:15:00+00:00"
        },
        {
            "formulator_reference_id": "01-RFA4ELQRUMMT-D",
            "legacy_aid": "A12345678",
            "name": "ACME Chemical Company",
            "country": "Germany",
            "has_gateway_products": true,
            "product_count": 42,
            "last_updated_at": "2026-06-20T09:15:00+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/incheck/formulators

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

search   string  optional    

Search in all of these columns: name. Filter type: like. Minimum length: 3. Example: id

filter[country]   string  optional    

Filter column country by any accepted value. Filter by multiple exact values, separated by commas Example: NL,BE

has_gateway_products   boolean  optional    

When true, only return formulators with published Gateway products. Example: true

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 15

Body Parameters

search   string     

Must be at least 3 characters. Example: auamemgzpjsyfglultrocihlvbgntrjmpzprtq

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 23

has_gateway_products   boolean  optional    

Example: false

filter   object  optional    
country   string  optional    

Example: quaerat

Organisation Connections

requires authentication

List connected organisations for an organisation the authenticated Solution Provider can access.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/organisation-connections/01-R7UKT6U7FLJ9-H?per_page=6&filter%5Bconnected_organisation_reference_id%5D=01-TNR2YZ4GSVSU-E&filter%5Bconnected_organisation_type%5D=ZDHC+Internal&sort=accepted_at&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"organisation_reference_id\": \"dolorem\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/organisation-connections/01-R7UKT6U7FLJ9-H"
);

const params = {
    "per_page": "6",
    "filter[connected_organisation_reference_id]": "01-TNR2YZ4GSVSU-E",
    "filter[connected_organisation_type]": "ZDHC Internal",
    "sort": "accepted_at",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "organisation_reference_id": "dolorem"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": 1,
        "accepted_at": "2026-06-01T10:00:00+00:00",
        "organisation": {
            "organisation_reference_id": "01-7BC39KZBVXKZ-C",
            "legacy_aid": "A12345678",
            "name": "Example Organisation Ltd",
            "type": "Supplier",
            "location": {
                "country": "Netherlands",
                "state_province": "",
                "city": "Amsterdam"
            }
        },
        "connected_organisation": {
            "organisation_reference_id": "01-NKFR3DAKUVGV-A",
            "legacy_aid": "A12345678",
            "name": "Example Organisation Ltd",
            "type": "Supplier",
            "location": {
                "country": "Netherlands",
                "state_province": "",
                "city": "Amsterdam"
            }
        }
    }
}
 

Example response (200):


{
    "data": [
        {
            "id": 1,
            "accepted_at": "2026-06-01T10:00:00+00:00",
            "organisation": {
                "organisation_reference_id": "01-ZDLURMGAKXDX-A",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            },
            "connected_organisation": {
                "organisation_reference_id": "01-NKFR3DAHCNPK-L",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            }
        },
        {
            "id": 1,
            "accepted_at": "2026-06-01T10:00:00+00:00",
            "organisation": {
                "organisation_reference_id": "01-6UHSP8J3RDG8-B",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            },
            "connected_organisation": {
                "organisation_reference_id": "01-HGQJWYKHQJ7V-O",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


You do not have access to this organisation.
 

Example response (404):


Organisation not found
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/incheck/organisation-connections/{organisation_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The reference ID of the organisation to list connections for. Example: 01-R7UKT6U7FLJ9-H

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 6

filter[connected_organisation_reference_id]   organisation_reference_id  optional    

Filter column connected_organisation_reference_id by any accepted value. Filter by the reference ID of a connected organisation. Example: 01-TNR2YZ4GSVSU-E

filter[connected_organisation_type]   string  optional    

Filter column connected_organisation_type by any accepted value. Matches exact value. Example: ZDHC Internal

Must be one of:
  • ZDHC Internal
  • Supplier
  • ZDHC Approved Laboratory
  • Brand
  • Vendor
  • Chemical formulator
  • ZDHC MRSL Certification Bodies
  • Chemical Agents/Subsidiaries
  • Performance InCheck Provider
  • Azure Importer
  • Internal Importer
sort   string  optional    

sort by any accepted column: accepted_at, -accepted_at. prefix a "-" before the column name to sort in descending order Example: accepted_at

page   integer  optional    

the page number to show. Example: 1

Body Parameters

organisation_reference_id   string     

Example: dolorem

Organisation Users

requires authentication

List users for a connected organisation the authenticated Solution Provider can access.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/organisations/01-R7UKT6U7FLJ9-H/users?per_page=9&filter%5Bemail%5D=fugit&sort=created_at&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"organisation_reference_id\": \"recusandae\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/organisations/01-R7UKT6U7FLJ9-H/users"
);

const params = {
    "per_page": "9",
    "filter[email]": "fugit",
    "sort": "created_at",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "organisation_reference_id": "recusandae"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "user_reference_id": "02-9JNTVCW49UKK-P",
        "email": "admin@example-supplier.com",
        "name": "Example User"
    }
}
 

Example response (200):


{
    "data": [
        {
            "user_reference_id": "02-QT2KBEVKKHKE-O",
            "email": "admin@example-supplier.com",
            "name": "Example User"
        },
        {
            "user_reference_id": "02-CXDZNPQHJY2N-I",
            "email": "admin@example-supplier.com",
            "name": "Example User"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


You do not have access to this organisation.
 

Example response (404):


Organisation not found
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/incheck/organisations/{organisation_reference_id}/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The reference ID of the organisation to list users for. Example: 01-R7UKT6U7FLJ9-H

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 9

filter[email]   email  optional    

Filter column email by any accepted value. Filter by the email of a user. Example: fugit

sort   string  optional    

sort by any accepted column: created_at, -created_at. prefix a "-" before the column name to sort in descending order Example: created_at

page   integer  optional    

the page number to show. Example: 1

Body Parameters

organisation_reference_id   string     

Example: recusandae

Subscriptions

Show

requires authentication

Show the subscription for a supplier

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/subscriptions/harum" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/subscriptions/harum"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "supplier_reference_id": "01-6FUUY46UMH-P",
        "aid": "A356IB10",
        "current_subscription": {
            "product_name": "InCheck",
            "start_date": "2026-06-22T13:40:09.737757Z",
            "end_date": "2026-08-21T13:40:09.737831Z"
        }
    }
}
 

Example response (401):


Token not found
 

Example response (403):


You are not of the given types: Supplier
 

Example response (403):


The authenticated organisation is not a Performance InCheck Provider.
 

Example response (404):


Supplier not found or not connected to this Solution Provider.
 

Request      

GET api/solution-providers/v1/incheck/subscriptions/{supplier_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplier_reference_id   string     

The ID of the supplier reference. Example: harum

Store

requires authentication

Create a new subscription for a supplier

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/subscriptions/expedita" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/subscriptions/expedita"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (201):


{
    "data": {
        "supplier_reference_id": "01-6FUUY46UMH-P",
        "aid": "A356IB10",
        "current_subscription": {
            "product_name": "InCheck",
            "start_date": "2026-06-22T13:40:09.741869Z",
            "end_date": "2026-08-21T13:40:09.741946Z"
        }
    }
}
 

Example response (401):


Token not found
 

Example response (403):


You are not of the given types: Supplier
 

Example response (403):


The authenticated organisation is not a Performance InCheck Provider.
 

Example response (404):


Supplier not found or not connected to this Solution Provider.
 

Example response (409):


Supplier already has an active subscription
 

Example response (422):


Validation error
 

Request      

POST api/solution-providers/v1/incheck/subscriptions/{supplier_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplier_reference_id   string     

The ID of the supplier reference. Example: expedita

InCheck Reports

List InCheck reports for linked suppliers

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/reports?per_page=2&filter%5Bsupplier_reference_id%5D=01-9JNTVCJUPUUR-Q&filter%5Baid%5D=cumque&filter%5Bstatus%5D=started&filter%5Bperiod%5D=2025-10&sort=-period&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filter\": {
        \"supplier_reference_id\": \"aut\",
        \"aid\": \"fugiat\",
        \"period\": \"2026-07\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/reports"
);

const params = {
    "per_page": "2",
    "filter[supplier_reference_id]": "01-9JNTVCJUPUUR-Q",
    "filter[aid]": "cumque",
    "filter[status]": "started",
    "filter[period]": "2025-10",
    "sort": "-period",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "filter": {
        "supplier_reference_id": "aut",
        "aid": "fugiat",
        "period": "2026-07"
    }
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "report_reference_id": "48-FPMAZSPQYWCB-Q",
            "supplier_reference_id": "01-JQKN7XQUF9GS-M",
            "aid": "AA1122334455",
            "supplier_name": "Hangzhou Mini digital technology Co., Ltd.",
            "period": "2025-10",
            "inventory_type": "usage",
            "inventory_reference_id": "40-SHJ9MBHSJVYR-A",
            "status": "verified",
            "created_at": "2025-11-12T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        },
        {
            "report_reference_id": "48-FPMAZSPFEJVE-K",
            "supplier_reference_id": "01-LS9GA7TFJA6Y-M",
            "aid": "AA1122334455",
            "supplier_name": "Hangzhou Mini digital technology Co., Ltd.",
            "period": "2025-10",
            "inventory_type": "usage",
            "inventory_reference_id": "40-ZDLURMGN8KDE-I",
            "status": "verified",
            "created_at": "2025-11-12T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/incheck/reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 50 Example: 2

filter[supplier_reference_id]   organisation_reference_id  optional    

Filter column supplier_reference_id by any accepted value. Matches part of the value. Example: 01-9JNTVCJUPUUR-Q

filter[aid]   string  optional    

Filter column aid by any accepted value. The aid of the supplier Example: cumque

filter[status]   string  optional    

Filter column status by any accepted value. Matches exact value. Example: started

Must be one of:
  • started
  • reports_selected
  • verifier_found
  • paid
  • verified
  • closed
filter[period]   string  optional    

Filter column period by any accepted value. Matches part of the value. Example: 2025-10

sort   string  optional    

Sort reports by period, -period, supplier_name, -supplier_name, status. Default: -period. Example: -period

page   integer  optional    

the page number to show. Example: 1

Body Parameters

filter   object  optional    
supplier_reference_id   string  optional    

Example: aut

aid   string  optional    

Example: fugiat

status   string  optional    
period   string  optional    

Must be a valid date in the format Y-m. Example: 2026-07

sort   string  optional    

InCheck Report PDF

Show InCheck report PDF

requires authentication

Stream the InCheck report of a supplier inventory as a PDF. The authenticated Solution Provider must be connected to the supplier that owns the inventory, otherwise the inventory is reported as not found.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/est/incheck-report" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/est/incheck-report"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


content of the pdf
 

Example response (401):


Token not found
 

Example response (403):


You are not authorized to access this inventory.
 

Example response (404):


Inventory not found or not owned by SP
 

Request      

GET api/solution-providers/v1/incheck/{inventory_reference_id}/incheck-report

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: est

inventory   string     

Reference ID of the supplier inventory. Example: 40-4SLWVAK6HPG-B