MENU navbar-image

Introduction

InCheck API for Azure Importers

External API for Approved Azure Importers 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.

Azure/V1

Certification-Results

Certification Results Reference Values

requires authentication

Static list from ProductCertificationStatusEnum (paginated). Ids are stable via azureApiId().

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/certification-results?cursor=enim&per_page=5" \
    --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/azure/v1/certification-results"
);

const params = {
    "cursor": "enim",
    "per_page": "5",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "ResultName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "ResultName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/certification-results

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: enim

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 5

Certification-Standards

MRSL Certification Standards Index

requires authentication

List all MRSL standards (mrsl_standards).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/certification-standards?cursor=iure&per_page=15&filter%5Bupdated_at%5D=%3E%3D+2026-10-26+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/certification-standards"
);

const params = {
    "cursor": "iure",
    "per_page": "15",
    "filter[updated_at]": ">= 2026-10-26 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "CertificationName": "Brachi Testing Services",
            "CertificationEntity": null,
            "CreateDate": "2026-08-11 13:40:01",
            "LastUpdateDate": "2026-08-11 13:40:01"
        },
        {
            "Id": 1,
            "CertificationName": "Brachi Testing Services",
            "CertificationEntity": null,
            "CreateDate": "2026-08-11 13:40:01",
            "LastUpdateDate": "2026-08-11 13:40:01"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/certification-standards

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: iure

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-26 18:58:27

sort   string  optional    

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

Chemical-Count-Bracket

Chemical Count Brackets Index

requires authentication

No model/data source in current system. Returns empty collection so route is callable.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/chemical-count-bracket?cursor=debitis&per_page=1" \
    --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/azure/v1/chemical-count-bracket"
);

const params = {
    "cursor": "debitis",
    "per_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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "CountBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "CountBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/chemical-count-bracket

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: debitis

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 1

Chemical-Weight-Bracket

Chemical Weight Brackets Index

requires authentication

No model/data source in current system. Returns empty collection so route is callable.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/chemical-weight-bracket?cursor=earum&per_page=5" \
    --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/azure/v1/chemical-weight-bracket"
);

const params = {
    "cursor": "earum",
    "per_page": "5",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "ChemicalWeightBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "ChemicalWeightBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/chemical-weight-bracket

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: earum

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 5

Connection-History

Connection History Index

requires authentication

List all organisation connection history.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/connection-history?cursor=dolor&per_page=6&filter%5Bupdated_at%5D=%3E%3D+2026-10-29+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/connection-history"
);

const params = {
    "cursor": "dolor",
    "per_page": "6",
    "filter[updated_at]": ">= 2026-10-29 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "ConnectedFromId": 18880,
            "ConnectedToId": 17322,
            "Status": "active",
            "Published": null,
            "StartDate": "2021-01-15 00:00:00",
            "EndDate": null,
            "LastUpdateDate": "2021-01-15 00:00:00"
        },
        {
            "id": 1,
            "ConnectedFromId": 18880,
            "ConnectedToId": 17322,
            "Status": "active",
            "Published": null,
            "StartDate": "2021-01-15 00:00:00",
            "EndDate": null,
            "LastUpdateDate": "2021-01-15 00:00:00"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/connection-history

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: dolor

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-29 18:58:27

sort   string  optional    

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

Connections

Connections Index

requires authentication

List all organisation connections (sending ↔ receiving organisations).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/connections?cursor=numquam&per_page=4&filter%5Bupdated_at%5D=%3D+2026-10-17+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/connections"
);

const params = {
    "cursor": "numquam",
    "per_page": "4",
    "filter[updated_at]": "= 2026-10-17 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ConnectedFromId": 18880,
            "ConnectedToId": 17322
        },
        {
            "Id": 1,
            "ConnectedFromId": 18880,
            "ConnectedToId": 17322
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/connections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: numquam

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 4

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-17 18:58:27

sort   string  optional    

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

CTZ-Levels

CTZ Levels Index

requires authentication

List all CTZ levels.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/ctz-levels?cursor=sed&per_page=18&filter%5Bupdated_at%5D=%3D+2026-10-25+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/ctz-levels"
);

const params = {
    "cursor": "sed",
    "per_page": "18",
    "filter[updated_at]": "= 2026-10-25 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "LevelName": "Foundational",
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-27 13:46:25"
        },
        {
            "Id": 1,
            "LevelName": "Foundational",
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-27 13:46:25"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/ctz-levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: sed

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 18

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-25 18:58:27

sort   string  optional    

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

Discharge-Type

Discharge Types Index

requires authentication

Azure legacy route β€” Guideline API discharge types synced to {@see SupplierAttribute} group {@code discharge_type} via {@code app:guideline-api-sync}. {@code Id} = Guideline {@code external_id} (same id space as {@code DischargeTypeId} on waste-water-reports).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/discharge-type?cursor=voluptatem&per_page=3" \
    --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/azure/v1/discharge-type"
);

const params = {
    "cursor": "voluptatem",
    "per_page": "3",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "DischargeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "DischargeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/discharge-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: voluptatem

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 3

Disposal-Pathways

Disposal Pathways Index

requires authentication

Azure legacy route β€” Guideline API disposal pathways synced to {@see SupplierAttribute} group {@code disposal_pathway} via {@code app:guideline-api-sync}.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/disposal-pathways?cursor=eos&per_page=3" \
    --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/azure/v1/disposal-pathways"
);

const params = {
    "cursor": "eos",
    "per_page": "3",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "PathwayName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "PathwayName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/disposal-pathways

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: eos

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 3

Evaluation-Level

Evaluation Levels Index

requires authentication

Azure legacy route β€” exports Guideline API {@code performancelevels} cached in {@see WastewaterLevel} (Foundational, Progressive, Aspirational).

Not MRSL {@see \App\Models\Chemical\ConformanceLevel} (Level 1/2/3) β€” see {@see AzureMsrlLevelsController}. Rows are created when wastewater test results are imported from the Guideline API ({@see \App\Models\Wastewater\WastewaterTestResult::fromSubstanceByFacilityResponse}); there is no standalone performance-level sync in {@code app:guideline-api-sync}.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/evaluation-level?cursor=delectus&per_page=3" \
    --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/azure/v1/evaluation-level"
);

const params = {
    "cursor": "delectus",
    "per_page": "3",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 3,
            "EvaluationName": "Aspirational",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 3,
            "EvaluationName": "Aspirational",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/evaluation-level

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: delectus

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 3

Facility-Type

Facility Type Index

requires authentication

Guideline facility type reference catalogue β€” Guideline API {@code facility_type} synced to {@see SupplierAttribute} group {@code facility_type} via {@code app:guideline-api-sync}. Same id space as {@code FacilityTypeIds} on {@see \App\Http\Resources\External\Azure\V1\AzureWasteWaterReportsListResource}. Not {@see AzureSupplierTypeController} ({@code supplier_facility_types} org profile).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/facility-type?cursor=eos&per_page=9" \
    --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/azure/v1/facility-type"
);

const params = {
    "cursor": "eos",
    "per_page": "9",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "FacilityTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "FacilityTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/facility-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: eos

per_page   integer  optional    

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

Guidelines

Guidelines Index

requires authentication

Azure legacy route β€” Guideline API versions synced to {@see SupplierAttribute} group {@code guideline_version} via {@code app:guideline-api-sync}.

{@see \App\Models\Wastewater\WastewaterReportProfile::$version_id} stores the Guideline version id ({@code external_id} on these rows).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/guidelines?cursor=inventore&per_page=18" \
    --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/azure/v1/guidelines"
);

const params = {
    "cursor": "inventore",
    "per_page": "18",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "GuidelineName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "GuidelineName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/guidelines

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: inventore

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 18

InCheck-Inventory-CTZ-Certificates

InCheck Inventory CTZ Certificates Index

requires authentication

List inventory-item to CTZ certification links from publish MRSL snapshots ({@see InventoryMrslState} β†’ MRSL cert β†’ CTZ cert).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-inventory-ctz-certificates?cursor=quos&per_page=5&filter%5Bupdated_at%5D=%3D+2026-10-26+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/in-check-inventory-ctz-certificates"
);

const params = {
    "cursor": "quos",
    "per_page": "5",
    "filter[updated_at]": "= 2026-10-26 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 873348,
            "ProductCTZCertificateId": null,
            "CreateDate": "2026-08-08 13:13:33",
            "LastUpdateDate": "2026-08-08 13:13:33"
        },
        {
            "Id": 873348,
            "ProductCTZCertificateId": null,
            "CreateDate": "2026-08-08 13:13:33",
            "LastUpdateDate": "2026-08-08 13:13:33"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/in-check-inventory-ctz-certificates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: quos

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 5

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-26 18:58:27

sort   string  optional    

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

InCheck-Inventory-MRSL-Certificates

InCheck Inventory MRSL Certificates Index

requires authentication

List inventory-line to MRSL certification links from publish snapshots ({@see InventoryMrslState}).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-inventory-mrsl-certificates?cursor=quibusdam&per_page=2&filter%5Bupdated_at%5D=%3D+2026-10-11+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/in-check-inventory-mrsl-certificates"
);

const params = {
    "cursor": "quibusdam",
    "per_page": "2",
    "filter[updated_at]": "= 2026-10-11 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 873348,
            "ProductMRSLCertificateId": 163853,
            "CreateDate": "2026-08-08 13:13:33",
            "LastUpdateDate": "2026-08-08 13:13:33"
        },
        {
            "Id": 873348,
            "ProductMRSLCertificateId": 163853,
            "CreateDate": "2026-08-08 13:13:33",
            "LastUpdateDate": "2026-08-08 13:13:33"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/in-check-inventory-mrsl-certificates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: quibusdam

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-11 18:58:27

sort   string  optional    

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

InCheck-Inventory-Product

InCheck Inventory Product Index

requires authentication

One row per {@see SupplierChemicalInventoryProduct} (inventory item / line). MRSL and CTZ max fields use the publish-time {@see \App\Models\Chemical\InventoryMrslState} snapshot when present.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-inventory-product?cursor=hic&per_page=4&filter%5Bupdated_at%5D=%3E%3D+2026-10-20+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/in-check-inventory-product"
);

const params = {
    "cursor": "hic",
    "per_page": "4",
    "filter[updated_at]": ">= 2026-10-20 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "InCheckReportId": 1,
            "ProductId": null,
            "InventoryProductId": 1,
            "ProductName": "[No product name] #584543",
            "FormulatorId": null,
            "FormulatorName": null,
            "Weight": 0,
            "MRSLMaxLevelId": null,
            "CTZMaxLevelId": null,
            "MRSLMaxVersionId": null,
            "CTZMaxVersionId": null,
            "AllCertificates": null,
            "CreateDate": "2026-08-08 13:13:33",
            "LastUpdateDate": "2026-08-08 13:13:33"
        },
        {
            "Id": 1,
            "InCheckReportId": 1,
            "ProductId": null,
            "InventoryProductId": 1,
            "ProductName": "[No product name] #584543",
            "FormulatorId": null,
            "FormulatorName": null,
            "Weight": 0,
            "MRSLMaxLevelId": null,
            "CTZMaxLevelId": null,
            "MRSLMaxVersionId": null,
            "CTZMaxVersionId": null,
            "AllCertificates": null,
            "CreateDate": "2026-08-08 13:13:33",
            "LastUpdateDate": "2026-08-08 13:13:33"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/in-check-inventory-product

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: hic

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 4

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-20 18:58:27

sort   string  optional    

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

InCheck-Report-Levels

InCheck Report Levels Index

requires authentication

List all InCheck report level reference values.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-report-levels?cursor=repellat&per_page=11&filter%5Bupdated_at%5D=%3C%3D+2026-10-06+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/in-check-report-levels"
);

const params = {
    "cursor": "repellat",
    "per_page": "11",
    "filter[updated_at]": "<= 2026-10-06 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "LevelName": "Level 0",
            "CreateDate": "2026-08-11 13:39:58",
            "LastUpdateDate": "2026-08-11 13:39:58"
        },
        {
            "Id": 1,
            "LevelName": "Level 0",
            "CreateDate": "2026-08-11 13:39:58",
            "LastUpdateDate": "2026-08-11 13:39:58"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/in-check-report-levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: repellat

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 11

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-10-06 18:58:27

sort   string  optional    

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

InCheck-Report-Statuses

InCheck Inventory Status Reference Values

requires authentication

Static list of chemical inventory header statuses from SupplierChemicalInventoryStatusEnum (paginated).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-report-statuses?cursor=rerum&per_page=8" \
    --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/azure/v1/in-check-report-statuses"
);

const params = {
    "cursor": "rerum",
    "per_page": "8",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "StatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "StatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/in-check-report-statuses

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: rerum

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 8

InCheck-Reports

InCheck Reports Index

requires authentication

Azure legacy route name β€” exports one row per {@see SupplierChemicalInventory} (monthly inventory header).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-reports?cursor=nam&per_page=4&filter%5Bupdated_at%5D=%3E%3D+2026-10-22+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/in-check-reports"
);

const params = {
    "cursor": "nam",
    "per_page": "4",
    "filter[updated_at]": ">= 2026-10-22 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ReferenceId": "40-6EHWBWQ3XAMX-Q",
            "SupplierId": 16596,
            "SolutionProviderId": 20570,
            "InCheckExternalId": "CPXAG2MK-08062020",
            "ReportingMonth": "2019-05-01 00:00:00",
            "InventoryType": "unspecified",
            "InCheckReportLevelId": null,
            "CreateDate": "2026-08-08 13:13:33",
            "PublicationDate": "2020-08-06 00:00:00",
            "StatusId": 3,
            "ArchiveDate": null,
            "ArchiveReason": null,
            "LastUpdateDate": "2026-08-10 05:11:37"
        },
        {
            "Id": 1,
            "ReferenceId": "40-6EHWBWQ3XAMX-Q",
            "SupplierId": 16596,
            "SolutionProviderId": 20570,
            "InCheckExternalId": "CPXAG2MK-08062020",
            "ReportingMonth": "2019-05-01 00:00:00",
            "InventoryType": "unspecified",
            "InCheckReportLevelId": null,
            "CreateDate": "2026-08-08 13:13:33",
            "PublicationDate": "2020-08-06 00:00:00",
            "StatusId": 3,
            "ArchiveDate": null,
            "ArchiveReason": null,
            "LastUpdateDate": "2026-08-10 05:11:37"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/in-check-reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: nam

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 4

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-22 18:58:27

sort   string  optional    

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

Locations

Locations Index

requires authentication

ISO 3166-1 alpha-2 country catalogue used as {@code LocationId} on {@code /organisations} ({@see \App\Models\Organisation::$location}).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/locations?cursor=at&per_page=14" \
    --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/azure/v1/locations"
);

const params = {
    "cursor": "at",
    "per_page": "14",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "LocationName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "LocationName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/locations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: at

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 14

Material-Category

Material Categories Index

requires authentication

List all material categories (supplier_attributes from group "Materials").

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/material-category?cursor=unde&per_page=8" \
    --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/azure/v1/material-category"
);

const params = {
    "cursor": "unde",
    "per_page": "8",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "MaterialCategoryName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "MaterialCategoryName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/material-category

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: unde

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 8

MSRL-Levels

MRSL Conformance Levels Index

requires authentication

List all MRSL conformance levels.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/mrsl-levels?cursor=id&per_page=19&filter%5Bupdated_at%5D=%3C%3D+2026-11-05+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/mrsl-levels"
);

const params = {
    "cursor": "id",
    "per_page": "19",
    "filter[updated_at]": "<= 2026-11-05 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "LevelName": "Level 1",
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-11 13:39:53"
        },
        {
            "Id": 1,
            "LevelName": "Level 1",
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-11 13:39:53"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/mrsl-levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: id

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 19

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-11-05 18:58:27

sort   string  optional    

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

MSRL-Versions

MRSL Version Strings (distinct)

requires authentication

Unique version values from mrsl_standards, including soft-deleted rows. Id is the short MRSL version string (same as VersionName).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/mrsl-versions?cursor=sunt&per_page=20" \
    --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/azure/v1/mrsl-versions"
);

const params = {
    "cursor": "sunt",
    "per_page": "20",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": "ZDHC MRSL v2.0",
            "VersionName": "ZDHC MRSL v2.0",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": "ZDHC MRSL v2.0",
            "VersionName": "ZDHC MRSL v2.0",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/mrsl-versions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: sunt

per_page   integer  optional    

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

Organisation-Account-Status

Organisation Account Status Reference Values

requires authentication

Static list of account statuses from {@see OrganisationActivationStatus} (paginated).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisation-account-status?cursor=quia&per_page=19" \
    --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/azure/v1/organisation-account-status"
);

const params = {
    "cursor": "quia",
    "per_page": "19",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "AccountStatusName": null,
            "CreateDate": null,
            "DeleteDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "AccountStatusName": null,
            "CreateDate": null,
            "DeleteDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/organisation-account-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: quia

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 19

Organisation-Account-Status-Log

Organisation Account Status Log Index

requires authentication

ModelHistory rows for {@see Organisation} operational status transitions only (create / deactivate / reactivate β€” not registration status or generic field updates).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisation-account-status-log?cursor=sit&per_page=16&filter%5Bupdated_at%5D=%3C%3D+2026-10-22+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/organisation-account-status-log"
);

const params = {
    "cursor": "sit",
    "per_page": "16",
    "filter[updated_at]": "<= 2026-10-22 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "OrganisationId": 1,
            "AccountStatusId": null,
            "DeleteDate": null,
            "ChangedByEmail": "unauthenticated",
            "LogDate": "2026-08-11 13:39:53"
        },
        {
            "Id": 1,
            "OrganisationId": 1,
            "AccountStatusId": null,
            "DeleteDate": null,
            "ChangedByEmail": "unauthenticated",
            "LogDate": "2026-08-11 13:39:53"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/organisation-account-status-log

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: sit

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 16

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-10-22 18:58:27

sort   string  optional    

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

Organisations

Organisations Index

requires authentication

List all organisations.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisations?cursor=enim&per_page=9&filter%5Bupdated_at%5D=%3D+2026-10-30+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/organisations"
);

const params = {
    "cursor": "enim",
    "per_page": "9",
    "filter[updated_at]": "= 2026-10-30 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ZDHCAid": "A356IB10",
            "SalesforceId": null,
            "SandboxID": "01-7TXNQR4L9PFH-I",
            "PdcId": null,
            "Name": "Ping Yang Pengye Shoes Com Ltd",
            "LegalName": "Ping Yang Pengye Shoes Com Ltd",
            "Address1": "ζ΅™ζ±ŸηœζΈ©ε·žεΈ‚εΉ³ι˜³εŽΏδΈ‡ε…¨ι•‡ι›ͺδΉ‹ζ’¦(B3)18ε·εŽ‚ζˆΏ",
            "Address2": null,
            "CityName": "Wenzhou",
            "StateName": "Zhejiang",
            "LocationId": "CN",
            "ZipCode": "",
            "Latitude": null,
            "Longitude": null,
            "Phone": "",
            "Email": "pengye@126.com",
            "Website": null,
            "TaxId": null,
            "IPE": null,
            "RegistrationNumber": null,
            "OrganisationDescription": null,
            "ContactFirstName": "JIAN",
            "ContactLastName": "Le",
            "OrganisationTypeId": 2,
            "OsHubId": null,
            "HiggId": null,
            "CurrentAccountStatusId": 1,
            "CreateDate": "2021-11-04 12:19:55",
            "DeleteDate": null,
            "LastUpdateDate": "2026-08-11 15:37:26"
        },
        {
            "Id": 1,
            "ZDHCAid": "A356IB10",
            "SalesforceId": null,
            "SandboxID": "01-7TXNQR4L9PFH-I",
            "PdcId": null,
            "Name": "Ping Yang Pengye Shoes Com Ltd",
            "LegalName": "Ping Yang Pengye Shoes Com Ltd",
            "Address1": "ζ΅™ζ±ŸηœζΈ©ε·žεΈ‚εΉ³ι˜³εŽΏδΈ‡ε…¨ι•‡ι›ͺδΉ‹ζ’¦(B3)18ε·εŽ‚ζˆΏ",
            "Address2": null,
            "CityName": "Wenzhou",
            "StateName": "Zhejiang",
            "LocationId": "CN",
            "ZipCode": "",
            "Latitude": null,
            "Longitude": null,
            "Phone": "",
            "Email": "pengye@126.com",
            "Website": null,
            "TaxId": null,
            "IPE": null,
            "RegistrationNumber": null,
            "OrganisationDescription": null,
            "ContactFirstName": "JIAN",
            "ContactLastName": "Le",
            "OrganisationTypeId": 2,
            "OsHubId": null,
            "HiggId": null,
            "CurrentAccountStatusId": 1,
            "CreateDate": "2021-11-04 12:19:55",
            "DeleteDate": null,
            "LastUpdateDate": "2026-08-11 15:37:26"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: enim

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-30 18:58:27

sort   string  optional    

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

Organisation-Registration-Statuses

Organisation registration status reference values

requires authentication

Lookup for {@code RegistrationStatusId} on {@code /organisation-registration-status-history}. Ids are stable via {@see OrganisationStatusEnum::azureApiId()}.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisation-registration-statuses?cursor=totam&per_page=4" \
    --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/azure/v1/organisation-registration-statuses"
);

const params = {
    "cursor": "totam",
    "per_page": "4",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "RegistrationStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "RegistrationStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/organisation-registration-statuses

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: totam

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 4

Organisation-Registration-Status-History

Organisation registration status history (ModelHistory rows with status in `changed_fields`).

requires authentication

{@code EndDate} is the {@code created_at} of the next status change for the same organisation. The current status has no successor, so its {@code EndDate} stays null.

Lookup ids come from {@code /organisation-registration-statuses}.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisation-registration-status-history?cursor=exercitationem&per_page=7&filter%5Bupdated_at%5D=%3D+2026-10-12+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/organisation-registration-status-history"
);

const params = {
    "cursor": "exercitationem",
    "per_page": "7",
    "filter[updated_at]": "= 2026-10-12 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "OrganisationId": 1,
            "RegistrationStatusId": null,
            "StartDate": "2026-08-11 13:39:53",
            "EndDate": null,
            "LastUpdateDate": "2026-08-11 13:39:53"
        },
        {
            "Id": 1,
            "OrganisationId": 1,
            "RegistrationStatusId": null,
            "StartDate": "2026-08-11 13:39:53",
            "EndDate": null,
            "LastUpdateDate": "2026-08-11 13:39:53"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/organisation-registration-status-history

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: exercitationem

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 7

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-12 18:58:27

sort   string  optional    

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

Organisation-Type

Organisation Types Index

requires authentication

List all organisation types.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisation-type?cursor=at&per_page=15&filter%5Bupdated_at%5D=%3C+2026-10-09+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/organisation-type"
);

const params = {
    "cursor": "at",
    "per_page": "15",
    "filter[updated_at]": "< 2026-10-09 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "TypeName": "ZDHC Internal",
            "CreateDate": "2026-08-11 13:39:51",
            "LastUpdateDate": "2026-10-06 18:58:08"
        },
        {
            "Id": 1,
            "TypeName": "ZDHC Internal",
            "CreateDate": "2026-08-11 13:39:51",
            "LastUpdateDate": "2026-10-06 18:58:08"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/organisation-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: at

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: < 2026-10-09 18:58:27

sort   string  optional    

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

Organisation-Users

OrganisationUsers Index

requires authentication

List all organisation-users.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/organisation-users?cursor=alias&per_page=9&filter%5Bupdated_at%5D=%3C+2026-10-20+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/organisation-users"
);

const params = {
    "cursor": "alias",
    "per_page": "9",
    "filter[updated_at]": "< 2026-10-20 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "UserId": "02-SL37ZWSJEF99-G",
            "OrganisationId": "01-P2NEAP93YT3W-C",
            "RoleId": 4,
            "StartDate": "2026-08-11 13:39:38",
            "EndDate": null,
            "LastUpdateDate": "2026-08-11 13:39:38"
        },
        {
            "Id": 1,
            "UserId": "02-SL37ZWSJEF99-G",
            "OrganisationId": "01-P2NEAP93YT3W-C",
            "RoleId": 4,
            "StartDate": "2026-08-11 13:39:38",
            "EndDate": null,
            "LastUpdateDate": "2026-08-11 13:39:38"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/organisation-users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: alias

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: < 2026-10-20 18:58:27

sort   string  optional    

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

Parameters

Parameters Index

requires authentication

Azure legacy route β€” proxies Guideline API {@code GET /substances/all/v1} (flat substance catalogue). {@see GuidelineApi::retrieveParametersCatalog()}.

{@code ParameterCategoryId} = Guideline {@code parent_id} when set.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/parameters?cursor=et&per_page=10&filter%5Bupdated_at%5D=%3E%3D+2026-11-05+18%3A58%3A27" \
    --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/azure/v1/parameters"
);

const params = {
    "cursor": "et",
    "per_page": "10",
    "filter[updated_at]": ">= 2026-11-05 18:58:27",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "ParameterName": null,
            "ParameterCategoryId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "ParameterName": null,
            "ParameterCategoryId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/parameters

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: et

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 10

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-11-05 18:58:27

Processes

Processes Index

requires authentication

List all processes (supplier_attributes from group "Chemical Process").

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/processes?cursor=incidunt&per_page=1" \
    --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/azure/v1/processes"
);

const params = {
    "cursor": "incidunt",
    "per_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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProcessName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "ProcessName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/processes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: incidunt

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 1

Product-Category

Product Categories Index

requires authentication

List all product categories.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-category?cursor=nisi&per_page=8&filter%5Bupdated_at%5D=%3E%3D+2026-10-11+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-category"
);

const params = {
    "cursor": "nisi",
    "per_page": "8",
    "filter[updated_at]": ">= 2026-10-11 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductCategoryName": "Acids",
            "CreateDate": "2026-08-11 13:58:01",
            "LastUpdateDate": "2026-08-11 13:58:01"
        },
        {
            "Id": 1,
            "ProductCategoryName": "Acids",
            "CreateDate": "2026-08-11 13:58:01",
            "LastUpdateDate": "2026-08-11 13:58:01"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-category

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: nisi

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 8

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-11 18:58:27

sort   string  optional    

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

Product-CTZ-Certificates

Product CTZ Certifications Index

requires authentication

List all product CTZ certifications.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-ctz-certificates?cursor=non&per_page=2&filter%5Bupdated_at%5D=%3C%3D+2026-11-01+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-ctz-certificates"
);

const params = {
    "cursor": "non",
    "per_page": "2",
    "filter[updated_at]": "<= 2026-11-01 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductId": 193191,
            "CTZCertificationBodyId": 8934,
            "CTZCertificationResultId": 1,
            "VerificationStatusId": 2,
            "CTZLevelId": 1,
            "MSRLVersionId": null,
            "IssueDate": "2025-09-24 00:00:00",
            "ExpirationDate": "2099-12-31 00:00:00",
            "QualityCancelation": false,
            "QualityCancelationReason": null,
            "CreateDate": "2025-09-24 00:00:00",
            "LastUpdateDate": "2025-09-24 00:00:00"
        },
        {
            "Id": 1,
            "ProductId": 193191,
            "CTZCertificationBodyId": 8934,
            "CTZCertificationResultId": 1,
            "VerificationStatusId": 2,
            "CTZLevelId": 1,
            "MSRLVersionId": null,
            "IssueDate": "2025-09-24 00:00:00",
            "ExpirationDate": "2099-12-31 00:00:00",
            "QualityCancelation": false,
            "QualityCancelationReason": null,
            "CreateDate": "2025-09-24 00:00:00",
            "LastUpdateDate": "2025-09-24 00:00:00"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-ctz-certificates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: non

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-11-01 18:58:27

sort   string  optional    

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

Product-MRSL-Certificates

Product MRSL Certifications Index

requires authentication

List all product MRSL certifications.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-mrsl-certificates?cursor=nam&per_page=10&filter%5Bupdated_at%5D=%3C%3D+2026-10-09+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-mrsl-certificates"
);

const params = {
    "cursor": "nam",
    "per_page": "10",
    "filter[updated_at]": "<= 2026-10-09 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductId": 228615,
            "CertificationBodyId": 8025,
            "CertificationStandardId": 267,
            "CertificationResultId": 1,
            "VerificationStatusId": 2,
            "MSRLVersionId": "ZDHC MRSL v3.1",
            "MSRLLevelId": 3,
            "SDSid": 149631,
            "IssueDate": "2025-01-24 00:00:00",
            "ExpirationDate": "2026-01-31 00:00:00",
            "QualityCancelation": "2026-01-31 00:00:00",
            "QualityCancelationReason": null,
            "CreateDate": "2025-01-30 00:00:00",
            "LastUpdateDate": "2025-01-30 00:00:00"
        },
        {
            "Id": 1,
            "ProductId": 228615,
            "CertificationBodyId": 8025,
            "CertificationStandardId": 267,
            "CertificationResultId": 1,
            "VerificationStatusId": 2,
            "MSRLVersionId": "ZDHC MRSL v3.1",
            "MSRLLevelId": 3,
            "SDSid": 149631,
            "IssueDate": "2025-01-24 00:00:00",
            "ExpirationDate": "2026-01-31 00:00:00",
            "QualityCancelation": "2026-01-31 00:00:00",
            "QualityCancelationReason": null,
            "CreateDate": "2025-01-30 00:00:00",
            "LastUpdateDate": "2025-01-30 00:00:00"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-mrsl-certificates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: nam

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 10

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-10-09 18:58:27

sort   string  optional    

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

Product-Publication-Status

Product Publication Status Reference Index

requires authentication

No model/data source in current system. Returns empty collection so route is callable.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-publication-status?cursor=voluptatem&per_page=14" \
    --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/azure/v1/product-publication-status"
);

const params = {
    "cursor": "voluptatem",
    "per_page": "14",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "PublicationStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "PublicationStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-publication-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: voluptatem

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 14

Product-Publication-Status-Log

Product Publication Status Log Index

requires authentication

ModelHistory rows for {@see ChemicalProduct} where publication_status changed.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-publication-status-log?cursor=natus&per_page=10&filter%5Bupdated_at%5D=%3C%3D+2026-10-20+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-publication-status-log"
);

const params = {
    "cursor": "natus",
    "per_page": "10",
    "filter[updated_at]": "<= 2026-10-20 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductID": 1,
            "PublicationStatusID": null,
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-11 13:39:53"
        },
        {
            "Id": 1,
            "ProductID": 1,
            "PublicationStatusID": null,
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-11 13:39:53"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-publication-status-log

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: natus

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 10

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-10-20 18:58:27

sort   string  optional    

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

Product-SDS

Product Safety Data Sheets Index

requires authentication

List all safety data sheets.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-sds?cursor=inventore&per_page=3&filter%5Bupdated_at%5D=%3C+2026-10-27+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-sds"
);

const params = {
    "cursor": "inventore",
    "per_page": "3",
    "filter[updated_at]": "< 2026-10-27 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductID": 241,
            "SDSid": null,
            "IdentifiedUses": null,
            "FormulatorCountry": "",
            "SDSLanguage": "en",
            "Link": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/241/safety-data-sheet/1",
            "DocStatus": null,
            "UploadDate": "2019-03-02 00:00:00",
            "LastUpdateDate": "2026-08-11 13:52:26"
        },
        {
            "Id": 1,
            "ProductID": 241,
            "SDSid": null,
            "IdentifiedUses": null,
            "FormulatorCountry": "",
            "SDSLanguage": "en",
            "Link": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/241/safety-data-sheet/1",
            "DocStatus": null,
            "UploadDate": "2019-03-02 00:00:00",
            "LastUpdateDate": "2026-08-11 13:52:26"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-sds

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: inventore

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 3

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: < 2026-10-27 18:58:27

sort   string  optional    

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

Product-Status

Product Status Reference Values

requires authentication

Static list of product statuses from ProductStatusEnum (paginated).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-status?cursor=sunt&per_page=11" \
    --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/azure/v1/product-status"
);

const params = {
    "cursor": "sunt",
    "per_page": "11",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "ProductStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "ProductStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/product-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: sunt

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 11

Product-Status-Log

Product Status Log Index

requires authentication

ModelHistory rows for {@see ChemicalProduct} where status changed.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-status-log?cursor=repudiandae&per_page=6&filter%5Bupdated_at%5D=%3E%3D+2026-10-10+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-status-log"
);

const params = {
    "cursor": "repudiandae",
    "per_page": "6",
    "filter[updated_at]": ">= 2026-10-10 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductID": 1,
            "StatusID": null,
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-11 13:39:53"
        },
        {
            "Id": 1,
            "ProductID": 1,
            "StatusID": null,
            "CreateDate": "2026-08-11 13:39:53",
            "LastUpdateDate": "2026-08-11 13:39:53"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-status-log

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: repudiandae

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-10 18:58:27

sort   string  optional    

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

Product-Substrate

Product Substrates Index

requires authentication

List all product substrates.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-substrate?cursor=ut&per_page=10&filter%5Bupdated_at%5D=%3E%3D+2026-10-06+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-substrate"
);

const params = {
    "cursor": "ut",
    "per_page": "10",
    "filter[updated_at]": ">= 2026-10-06 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "SubstrateName": "Adhesives",
            "CreateDate": "2026-08-11 13:58:01",
            "LastUpdateDate": "2026-08-11 13:58:01"
        },
        {
            "Id": 1,
            "SubstrateName": "Adhesives",
            "CreateDate": "2026-08-11 13:58:01",
            "LastUpdateDate": "2026-08-11 13:58:01"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-substrate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: ut

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 10

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-06 18:58:27

sort   string  optional    

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

Product-Type

Product Types Index

requires authentication

List all product use types.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/product-type?cursor=qui&per_page=8&filter%5Bupdated_at%5D=%3E%3D+2026-10-30+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/product-type"
);

const params = {
    "cursor": "qui",
    "per_page": "8",
    "filter[updated_at]": ">= 2026-10-30 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductTypeName": "Accelerator For Solvent Coating",
            "CreateDate": "2026-08-11 13:58:00",
            "LastUpdateDate": "2026-08-11 13:58:00"
        },
        {
            "Id": 1,
            "ProductTypeName": "Accelerator For Solvent Coating",
            "CreateDate": "2026-08-11 13:58:00",
            "LastUpdateDate": "2026-08-11 13:58:00"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/product-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: qui

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 8

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-30 18:58:27

sort   string  optional    

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

Products-Classifications

Products–Classifications Index (ProductvsSubstrateCategoryUseCases)

requires authentication

Lists product classification rows from chemical_product_classifications. One row per product Γ— substrate Γ— category Γ— use-type tuple (full hierarchy). Replaces legacy products-substrate, products-category, and products-type bridge exports.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/products-classifications?cursor=optio&per_page=16&filter%5Bupdated_at%5D=%3C%3D+2026-11-05+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/products-classifications"
);

const params = {
    "cursor": "optio",
    "per_page": "16",
    "filter[updated_at]": "<= 2026-11-05 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ProductID": 307,
            "SubstrateId": 6,
            "ProductCategoryId": 67,
            "ProductTypeId": 247,
            "CreateDate": "2026-08-11 13:58:01",
            "DeleteDate": null,
            "LastUpdateDate": "2026-08-11 13:58:01"
        },
        {
            "Id": 1,
            "ProductID": 307,
            "SubstrateId": 6,
            "ProductCategoryId": 67,
            "ProductTypeId": 247,
            "CreateDate": "2026-08-11 13:58:01",
            "DeleteDate": null,
            "LastUpdateDate": "2026-08-11 13:58:01"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/products-classifications

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: optio

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 16

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: <= 2026-11-05 18:58:27

sort   string  optional    

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

Products

Chemical Products Index

requires authentication

List all chemical products.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/products?cursor=fugit&per_page=2&filter%5Bupdated_at%5D=%3C+2026-10-28+18%3A58%3A27&sort=updated_at" \
    --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/azure/v1/products"
);

const params = {
    "cursor": "fugit",
    "per_page": "2",
    "filter[updated_at]": "< 2026-10-28 18:58:27",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "ZDHCId": "P883AO62",
            "FormulatorProductCode": "20-6AY3YHAWYTWX-J",
            "ProductName": "NICCA SUNSOLT 1200",
            "ProductNameOthers": "",
            "ProductDescription": "",
            "ProductChemcheckDescription": null,
            "FormulatorId": 5938,
            "CreateDate": "2017-10-06 00:00:00",
            "UploadDate": null,
            "LastUpdateDate": "2026-09-03 21:14:14"
        },
        {
            "id": 1,
            "ZDHCId": "P883AO62",
            "FormulatorProductCode": "20-6AY3YHAWYTWX-J",
            "ProductName": "NICCA SUNSOLT 1200",
            "ProductNameOthers": "",
            "ProductDescription": "",
            "ProductChemcheckDescription": null,
            "FormulatorId": 5938,
            "CreateDate": "2017-10-06 00:00:00",
            "UploadDate": null,
            "LastUpdateDate": "2026-09-03 21:14:14"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: fugit

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: < 2026-10-28 18:58:27

sort   string  optional    

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

Profile-Supplier-Chemicals

Profile Supplier Chemicals Index

requires authentication

List all profile–chemical-type links (pivot supplier_profile_attributes, Chemical Type group). ChemicalCountBracketId / ChemicalWeightBracketId have no source in current system.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/profile-supplier-chemicals?cursor=et&per_page=7" \
    --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/azure/v1/profile-supplier-chemicals"
);

const params = {
    "cursor": "et",
    "per_page": "7",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "OrganisationId": 22030,
            "ChemicalTypeId": null,
            "ChemicalCountBracketId": null,
            "ChemicalWeightBracketId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": 22030,
            "ChemicalTypeId": null,
            "ChemicalCountBracketId": null,
            "ChemicalWeightBracketId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/profile-supplier-chemicals

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: et

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 7

Profile-Supplier-Material

Profile Supplier Materials Index

requires authentication

List all profile–material links (pivot supplier_profile_attributes, Materials group).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/profile-supplier-material?cursor=porro&per_page=2" \
    --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/azure/v1/profile-supplier-material"
);

const params = {
    "cursor": "porro",
    "per_page": "2",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "OrganisationId": 22031,
            "MaterialId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": 22031,
            "MaterialId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/profile-supplier-material

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: porro

per_page   integer  optional    

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

Profile-Supplier-Processes

Profile Supplier Processes Index

requires authentication

List all profile–process links (pivot supplier_profile_attributes, Chemical Process group).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/profile-supplier-processes?cursor=explicabo&per_page=7" \
    --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/azure/v1/profile-supplier-processes"
);

const params = {
    "cursor": "explicabo",
    "per_page": "7",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "OrganisationId": 22032,
            "ProcessId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": 22032,
            "ProcessId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/profile-supplier-processes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: explicabo

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 7

Profile-Supplier-Product-Category

Profile Supplier Product Categories Index

requires authentication

No model/data source in current system. Returns empty collection so route is callable.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/profile-supplier-product-category?cursor=ea&per_page=14" \
    --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/azure/v1/profile-supplier-product-category"
);

const params = {
    "cursor": "ea",
    "per_page": "14",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "OrganisationId": null,
            "ProductCategoryId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": null,
            "ProductCategoryId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/profile-supplier-product-category

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: ea

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 14

Profile-Supplier-Type

Profile Supplier Types Index

requires authentication

List all supplier profiles (organisation_id, facility_type_id = SupplierTypeId).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/profile-supplier-type?cursor=corporis&per_page=15&filter%5Bupdated_at%5D=%3C+2026-10-22+18%3A58%3A28&sort=updated_at" \
    --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/azure/v1/profile-supplier-type"
);

const params = {
    "cursor": "corporis",
    "per_page": "15",
    "filter[updated_at]": "< 2026-10-22 18:58:28",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "OrganisationId": null,
            "SupplierTypeId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": null,
            "SupplierTypeId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/profile-supplier-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: corporis

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: < 2026-10-22 18:58:28

sort   string  optional    

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

Roles

Organisation membership roles lookup

requires authentication

Decodes {@code RoleId} on {@code /organisation-users} β€” maps {@code roles.id} to role name.

Sandbox stores four roles in {@code roles} overall ({@code UNREGISTERED}, {@code USER} on {@code users.role_id}; {@code ORGANISATION_TEAM_MEMBER}, {@code ORGANISATION_ADMIN} on {@code organisation_user.role_id}). This export lists the two organisation membership roles only (the values that appear on {@code /organisation-users}).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/roles?cursor=doloribus&per_page=20" \
    --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/azure/v1/roles"
);

const params = {
    "cursor": "doloribus",
    "per_page": "20",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "RoleName": "UNREGISTERED",
            "ParentId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "RoleName": "UNREGISTERED",
            "ParentId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/roles

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: doloribus

per_page   integer  optional    

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

SDS-Section

SDS Sections Index

requires authentication

No model/data source in current system. Returns empty collection so route is callable.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/sds-section?cursor=repellat&per_page=18" \
    --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/azure/v1/sds-section"
);

const params = {
    "cursor": "repellat",
    "per_page": "18",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "SDSID": null,
            "IngredientName": null,
            "CAS": null,
            "Min": null,
            "Max": null,
            "Concentration": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "SDSID": null,
            "IngredientName": null,
            "CAS": null,
            "Min": null,
            "Max": null,
            "Concentration": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/sds-section

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: repellat

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 18

Supplier-Type

Supplier Types Index

requires authentication

List all supplier (facility) types.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/supplier-type?cursor=nesciunt&per_page=19" \
    --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/azure/v1/supplier-type"
);

const params = {
    "cursor": "nesciunt",
    "per_page": "19",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "SupplierTypeName": "Accessories and Trims",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "SupplierTypeName": "Accessories and Trims",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/supplier-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: nesciunt

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 19

Units

Units Index

requires authentication

List all wastewater units.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/units?cursor=dignissimos&per_page=11" \
    --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/azure/v1/units"
);

const params = {
    "cursor": "dignissimos",
    "per_page": "11",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 135,
            "UnitName": "",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 135,
            "UnitName": "",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/units

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: dignissimos

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 11

Users

Users Index

requires authentication

List all users.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/users?cursor=officiis&per_page=5&filter%5Bupdated_at%5D=%3E%3D+2026-10-15+18%3A58%3A28&sort=updated_at" \
    --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/azure/v1/users"
);

const params = {
    "cursor": "officiis",
    "per_page": "5",
    "filter[updated_at]": ">= 2026-10-15 18:58:28",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 8,
            "UserId": "02-TUGF4Z9EK73J-X",
            "FirstName": "Amy",
            "LastName": "Huang",
            "FullName": "Amy Huang",
            "IsActive": true,
            "Email": "amyhuang@ecic.com.tw",
            "Phone": "+886910807779",
            "Address1": null,
            "Address2": null,
            "StateName": null,
            "CityName": null,
            "ZipCode": null,
            "LocationId": "TW",
            "CreateDate": "2017-06-17 04:45:09",
            "DeleteDate": null,
            "LastUpdateDate": "2017-06-17 04:45:09"
        },
        {
            "Id": 8,
            "UserId": "02-TUGF4Z9EK73J-X",
            "FirstName": "Amy",
            "LastName": "Huang",
            "FullName": "Amy Huang",
            "IsActive": true,
            "Email": "amyhuang@ecic.com.tw",
            "Phone": "+886910807779",
            "Address1": null,
            "Address2": null,
            "StateName": null,
            "CityName": null,
            "ZipCode": null,
            "LocationId": "TW",
            "CreateDate": "2017-06-17 04:45:09",
            "DeleteDate": null,
            "LastUpdateDate": "2017-06-17 04:45:09"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: officiis

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 5

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-15 18:58:28

sort   string  optional    

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

Verification-Status

Verification status reference values

requires authentication

Static list from ProductCertificationBodyAssignmentStatusEnum (paginated). Ids are stable via azureApiId().

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/verification-status?cursor=rerum&per_page=3" \
    --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/azure/v1/verification-status"
);

const params = {
    "cursor": "rerum",
    "per_page": "3",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "StatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "StatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/verification-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: rerum

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 3

Waste-Water-Reports

Waste Water Reports Index

requires authentication

List all wastewater (ClearStream) reports including Step 2 profile fields ({@code wastewater_report_profiles} + Guideline attribute {@code external_id}s). Several legacy ticket fields remain {@code null} until mapping is agreed.

Includes archived reports (archived_at set) β€” no soft-delete column on this model.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/waste-water-reports?cursor=minus&per_page=19&filter%5Bupdated_at%5D=%3D+2026-10-10+18%3A58%3A28&sort=updated_at" \
    --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/azure/v1/waste-water-reports"
);

const params = {
    "cursor": "minus",
    "per_page": "19",
    "filter[updated_at]": "= 2026-10-10 18:58:28",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "TRID": "60-BX4M3Q2DMW9B-F",
            "OrganisationId": 13995,
            "SolutionProviderId": 1042,
            "ReportingCycle": "2022-10-01 00:00:00",
            "WWReportStatusId": 3,
            "GuidelineId": 73,
            "CompletedDate": "2022-09-29 00:00:00",
            "DisposalPathwayId": null,
            "DisposalPathwayPercentage": null,
            "DischargeTypeId": null,
            "WWType": "Industrial Wastewater",
            "NumberOfDischargePoints": 3,
            "IndustryTypeId": null,
            "HasSludgeId": null,
            "Above15mId": null,
            "FibreId": null,
            "FacilityTypeIds": [],
            "WWDischargePerDay": null,
            "OnSiteAppNumber": "LEGACY-18790",
            "SamplingDate": null,
            "CreateDate": "2022-10-13 11:42:54",
            "UploadDate": "2022-10-13 11:45:27",
            "LastUpdateDate": "2022-10-13 11:45:27",
            "ArchivedAt": null
        },
        {
            "Id": 1,
            "TRID": "60-BX4M3Q2DMW9B-F",
            "OrganisationId": 13995,
            "SolutionProviderId": 1042,
            "ReportingCycle": "2022-10-01 00:00:00",
            "WWReportStatusId": 3,
            "GuidelineId": 73,
            "CompletedDate": "2022-09-29 00:00:00",
            "DisposalPathwayId": null,
            "DisposalPathwayPercentage": null,
            "DischargeTypeId": null,
            "WWType": "Industrial Wastewater",
            "NumberOfDischargePoints": 3,
            "IndustryTypeId": null,
            "HasSludgeId": null,
            "Above15mId": null,
            "FibreId": null,
            "FacilityTypeIds": [],
            "WWDischargePerDay": null,
            "OnSiteAppNumber": "LEGACY-18790",
            "SamplingDate": null,
            "CreateDate": "2022-10-13 11:42:54",
            "UploadDate": "2022-10-13 11:45:27",
            "LastUpdateDate": "2022-10-13 11:45:27",
            "ArchivedAt": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/waste-water-reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: minus

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 19

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: = 2026-10-10 18:58:28

sort   string  optional    

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

Waste-Water-Results

Waste Water Results Index

requires authentication

One row per filled ClearStream test parameter ({@code wastewater_test_result_parameters}) on leaf rows ({@code visibility = always}, not a category/group parent) with leachate matrix rows excluded from the main list.

Leachate follow-up values are nested on the sludge/source row via {@code Leachate*} fields.

Includes parameters on archived reports β€” no soft-delete column on this model.

Uses cursor pagination β€” consumers follow {@code links.next} until empty. {@code per_page} is capped at 500; larger values are rejected with 422.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/waste-water-results?cursor=laudantium&per_page=16&filter%5Bupdated_at%5D=%3E%3D+2026-10-25+18%3A58%3A28&sort=updated_at" \
    --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/azure/v1/waste-water-results"
);

const params = {
    "cursor": "laudantium",
    "per_page": "16",
    "filter[updated_at]": ">= 2026-10-25 18:58:28",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "ReportId": null,
            "ParameterId": 129,
            "ParameterName": "1,2-benzenedicarboxylic acid, di-C7-11 branched and liearalkyl esters (DHNUP)",
            "SamplingLocation": "Untreated",
            "DetectionAsText": "0",
            "DetectionNormalizedAsNumber": 0,
            "UnitId": 109,
            "EvaluationLevelId": null,
            "EvaluationPassing": 1,
            "EvaluationIsSampleAndReportOnly": 0,
            "ReferenceLimitValueMax": null,
            "ReferenceLimitValueMin": null,
            "LeachateDetection": null,
            "LeachateUnitId": null,
            "LeachateEvaluationLevelId": null,
            "LeachateEvaluationPassing": null,
            "CreateDate": "2026-08-08 12:33:57",
            "LastUpdateDate": "2026-08-08 12:38:36"
        },
        {
            "Id": 1,
            "ReportId": null,
            "ParameterId": 129,
            "ParameterName": "1,2-benzenedicarboxylic acid, di-C7-11 branched and liearalkyl esters (DHNUP)",
            "SamplingLocation": "Untreated",
            "DetectionAsText": "0",
            "DetectionNormalizedAsNumber": 0,
            "UnitId": 109,
            "EvaluationLevelId": null,
            "EvaluationPassing": 1,
            "EvaluationIsSampleAndReportOnly": 0,
            "ReferenceLimitValueMax": null,
            "ReferenceLimitValueMin": null,
            "LeachateDetection": null,
            "LeachateUnitId": null,
            "LeachateEvaluationLevelId": null,
            "LeachateEvaluationPassing": null,
            "CreateDate": "2026-08-08 12:33:57",
            "LastUpdateDate": "2026-08-08 12:38:36"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/waste-water-results

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: laudantium

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 16

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: >= 2026-10-25 18:58:28

sort   string  optional    

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

Body Parameters

per_page   string  optional    

WW-Profile-Industry-Type

WW Profile Industry Type Index

requires authentication

Industry type reference catalogue β€” Guideline API {@code industry_type} synced to {@see SupplierAttribute} group {@code industry_type} via {@code app:guideline-api-sync}. Same id space as {@code IndustryTypeId} on {@see \App\Http\Resources\External\Azure\V1\AzureWasteWaterReportsListResource}. Not {@see AzureSupplierTypeController} ({@code supplier_facility_types} org profile).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/ww-profile-industry-type?cursor=ut&per_page=11" \
    --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/azure/v1/ww-profile-industry-type"
);

const params = {
    "cursor": "ut",
    "per_page": "11",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "IndustryTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "IndustryTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/ww-profile-industry-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: ut

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 11

WW-Report-Fibre

WW Report Fibre Index

requires authentication

Fibre type reference catalogue β€” Guideline API {@code fiber_type} synced to {@see SupplierAttribute} group {@code fiber_type} via {@code app:guideline-api-sync}. Same id space as {@code FibreId} on {@see \App\Http\Resources\External\Azure\V1\AzureWasteWaterReportsListResource}.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/ww-report-fibre?cursor=vel&per_page=9" \
    --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/azure/v1/ww-report-fibre"
);

const params = {
    "cursor": "vel",
    "per_page": "9",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "FibreName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "FibreName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/ww-report-fibre

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: vel

per_page   integer  optional    

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

Pretreatments

WW Report Pretreatment Index

requires authentication

ClearStream sampling pre-treatment catalogue ({@see SampleInformationPointPreTreatmentEnum}) β€” same labels stored on {@code wastewater_sampling_points.pre_treatments}.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/pretreatments?cursor=autem&per_page=14" \
    --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/azure/v1/pretreatments"
);

const params = {
    "cursor": "autem",
    "per_page": "14",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 1,
            "PretreatmentName": "None",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "PretreatmentName": "None",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/pretreatments

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: autem

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 14

WW-Report-Status

Wastewater Report Status Reference Values

requires authentication

Static list of wastewater report statuses from WastewaterReportStatusEnum (paginated).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/ww-report-status?cursor=hic&per_page=7" \
    --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/azure/v1/ww-report-status"
);

const params = {
    "cursor": "hic",
    "per_page": "7",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": null,
            "WWStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "WWStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ]
}
 

Request      

GET api/azure/v1/ww-report-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: hic

per_page   integer  optional    

Number of items to show per page. Defaults to 10 Example: 7

WW-Report-vs-CAP

WW Report vs CAP (RCA/CAP) Index

requires authentication

One row per parameter root-cause analysis ({@code wastewater_root_cause_analyses}).

Includes rows on archived reports β€” no soft-delete column on this model.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/ww-report-vs-cap?cursor=et&per_page=12&filter%5Bupdated_at%5D=%3C+2026-10-29+18%3A58%3A28&sort=updated_at" \
    --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/azure/v1/ww-report-vs-cap"
);

const params = {
    "cursor": "et",
    "per_page": "12",
    "filter[updated_at]": "< 2026-10-29 18:58:28",
    "sort": "updated_at",
};
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",
};


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

Example response (200):


{
    "data": [
        {
            "Id": 23,
            "WWReportId": 8663,
            "FileName": null,
            "ParameterId": 393,
            "ReasonsForFailure": "Incomplete chemical inventory",
            "CorrectiveAction": "Repair or upgrade equipment",
            "PlannedResolutionDate": null,
            "IsResolved": 0,
            "CreateDate": "2026-08-20 13:04:12",
            "LastUpdateDate": "2026-08-20 13:04:12"
        },
        {
            "Id": 23,
            "WWReportId": 8663,
            "FileName": null,
            "ParameterId": 393,
            "ReasonsForFailure": "Incomplete chemical inventory",
            "CorrectiveAction": "Repair or upgrade equipment",
            "PlannedResolutionDate": null,
            "IsResolved": 0,
            "CreateDate": "2026-08-20 13:04:12",
            "LastUpdateDate": "2026-08-20 13:04:12"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "path": "/",
        "per_page": 10,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET api/azure/v1/ww-report-vs-cap

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Cursor of the page to show. Omit to start at the first page. Example: et

per_page   integer  optional    

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

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. any operator can be used, e.g. <= < = > >=, together with a date time value (YYYY-MM-DD HH:MM:SS) Example: < 2026-10-29 18:58:28

sort   string  optional    

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