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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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.
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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.
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.