MENU navbar-image

Introduction

    A collection of API endpoints you will need to interact with the system.

    About PUT / PATCH requests: PUT means you send the entire resource to be updated, while PATCH means you send only the fields that need to be updated. Also regarding RFC 5789, the body of a PATCH is not filled for some Content-Types, what will work is sending via application/json.

    About Permissions: These can depend on user or organisation user roles and will be given by the system or admin actions internally.

This documentation aims to provide all the information you need to work with our API.

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.

Admin

Clearstream

Index

requires authentication

List all clearstream requests

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/1/clearstream?per_page=11&sort=id&filter%5Bid%5D=explicabo&filter%5Bcreated_at%5D=quibusdam&search=amet&column=organisations.name&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/admin/1/clearstream"
);

const params = {
    "per_page": "11",
    "sort": "id",
    "filter[id]": "explicabo",
    "filter[created_at]": "quibusdam",
    "search": "amet",
    "column": "organisations.name",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/admin/{organisation_id}/clearstream

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

sort   string  optional    

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

filter[id]   string  optional    

Filter column id by any accepted value. Matches part of the value. Example: explicabo

filter[organisations.name]   string  optional    

Filter column organisations.name by any accepted value. Matches part of the value. Example: aliquam

filter[wastewater_reports.status]   string  optional    

Filter column wastewater_reports.status by any accepted value. The status of the report Example: sequi

filter[wastewater_lab_requests.status]   string  optional    

Filter column wastewater_lab_requests.status by any accepted value. The status of the associated lab request Example: quia

filter[created_at]   string  optional    

Filter column created_at by any accepted value. The date the report was created Example: quibusdam

search   string  optional    

Search in all of these columns: organisations.name, wastewater_reports.reference_id, wastewater_lab_requests.status, wastewater_reports.status. Filter type: like. Example: amet

column   string  optional    

get a distinct list of filterable values for any of the columns: organisations.name, wastewater_reports.status, wastewater_lab_requests.status, wastewater_reports.created_at. Example: organisations.name

page   integer  optional    

the page number to show. Example: 1

Show

requires authentication

Get a single clearstream report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/1/clearstream/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/admin/1/clearstream/1"
);

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,
        "reference_id": "60-BX4M3Q2DMW9B-F",
        "legacy_clearstream_report_id": "TR543HN21",
        "uuid": "a27a2fb8-0a90-4d32-be3b-27980dbad3b6",
        "organisation_id": 13995,
        "status": "PASSED",
        "created_at": "2022-10-13T11:42:54.000000Z",
        "updated_at": "2022-10-13T11:45:27.000000Z",
        "archived_at": null,
        "last_viewed_at": "2026-08-11 13:58:23",
        "payment_completed_at": null,
        "completed_at": "2026-08-11T13:58:22.000000Z",
        "legacy_clearstream_downloadable": true,
        "organisation": {
            "id": 13995,
            "maxio_customer_id": 444700,
            "reference_id": "01-RYBEJB9RM9S3-O",
            "pdc_id": null,
            "gateway_aid": "A325IM69",
            "uuid": "171c6288-e7b7-433e-9a23-ed61bb083781",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Zaber & Zubair Fabrics Limited.",
            "legal_name": "Zaber & Zubair Fabrics Limited.",
            "address_1": "Pagar, Tongi, Gazipur.",
            "address_2": null,
            "city": "Gazipur",
            "state": "Dhaka",
            "location": "BD",
            "zip": "1710",
            "phone": "+8802 9801012,",
            "email": "sustainability@znzfab.com",
            "contact_first_name": "Md Zakir",
            "contact_last_name": "Hossen",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": "https://www.znzfab.com",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2018-02-08T02:19:43.000000Z",
            "updated_at": "2026-08-11T15:37:44.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "Bangladesh"
        },
        "profile": {
            "id": 1,
            "report_id": 1,
            "version_id": 73,
            "avg_daily_industrial_wastewater_volume": null,
            "requires_testing": 1,
            "completed_at": "2022-09-29 00:00:00",
            "created_at": "2026-08-11T13:58:23.000000Z",
            "updated_at": "2026-08-11T13:58:23.000000Z",
            "attributes": [
                {
                    "id": 499,
                    "external_id": 1,
                    "group_id": 20,
                    "parent_id": null,
                    "short": null,
                    "name": "Direct",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 499
                    }
                },
                {
                    "id": 508,
                    "external_id": 1,
                    "group_id": 23,
                    "parent_id": null,
                    "short": null,
                    "name": "A: On-site or off-site incineration at >1000°C",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 508
                    }
                },
                {
                    "id": 462,
                    "external_id": 2,
                    "group_id": 18,
                    "parent_id": null,
                    "short": null,
                    "name": "Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 462
                    }
                },
                {
                    "id": 516,
                    "external_id": 1,
                    "group_id": 24,
                    "parent_id": null,
                    "short": null,
                    "name": "Viscose Staple Fibre (VSF)/ VSF & Modal",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 516
                    }
                },
                {
                    "id": 507,
                    "external_id": 1,
                    "group_id": 22,
                    "parent_id": null,
                    "short": null,
                    "name": "Yes",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 507
                    }
                },
                {
                    "id": 504,
                    "external_id": 0,
                    "group_id": 21,
                    "parent_id": null,
                    "short": null,
                    "name": "less than 15m³ per day",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 504
                    }
                },
                {
                    "id": 465,
                    "external_id": 1,
                    "group_id": 19,
                    "parent_id": null,
                    "short": null,
                    "name": "Textile Accessories and Trims Assembler",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": 1,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 465
                    }
                },
                {
                    "id": 477,
                    "external_id": 13,
                    "group_id": 19,
                    "parent_id": null,
                    "short": null,
                    "name": "Vertically integrated Mill",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": 1,
                    "pivot": {
                        "profile_id": 1,
                        "attribute_id": 477
                    }
                }
            ]
        }
    }
}
 

Request      

GET api/admin/{organisation_id}/clearstream/{report_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Terminate

requires authentication

Terminate any ongoing clearstream cycle

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/clearstream/1/terminate" \
    --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/admin/1/clearstream/1/terminate"
);

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


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

Request      

POST api/admin/{organisation_id}/clearstream/{report_id}/terminate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

InCheck Visibility

Index

requires authentication

List InCheck visibility settings for an organisation of type Performance InCheck Provider

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/1/incheck/visibility?per_page=2&filter%5Borganisation_name%5D=et&filter%5Blevel_name%5D=voluptas&filter%5Bvisibility_visible%5D=1&filter%5Bvisibility_active%5D=1&filter%5Bvisibility_marketing_text%5D=reiciendis&sort=organisation_name&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/admin/1/incheck/visibility"
);

const params = {
    "per_page": "2",
    "filter[organisation_name]": "et",
    "filter[level_name]": "voluptas",
    "filter[visibility_visible]": "1",
    "filter[visibility_active]": "1",
    "filter[visibility_marketing_text]": "reiciendis",
    "sort": "organisation_name",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/admin/{organisation_id}/incheck/visibility

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

filter[organisation_name]   string  optional    

Filter column organisation_name by any accepted value. name of the organisation Example: et

filter[level_name]   string  optional    

Filter column level_name by any accepted value. name of the InCheck level Example: voluptas

filter[visibility_visible]   boolean  optional    

Filter column visibility_visible by any accepted value. visibility status Example: true

filter[visibility_active]   boolean  optional    

Filter column visibility_active by any accepted value. active status Example: true

filter[visibility_marketing_text]   string  optional    

Filter column visibility_marketing_text by any accepted value. marketing text Example: reiciendis

sort   string  optional    

sort by any accepted column: organisation_name, level_name, visibility_visible, visibility_active, visibility_marketing_text. prefix a "-" before the column name to sort in descending order Example: organisation_name

page   integer  optional    

the page number to show. Example: 1

Update

requires authentication

Update an InCheck visibility setting

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/incheck/visibility/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"bcm\",
    \"visible\": false,
    \"active\": false,
    \"marketing_text\": \"ut\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/incheck/visibility/1"
);

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

let body = {
    "name": "bcm",
    "visible": false,
    "active": false,
    "marketing_text": "ut"
};

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

Example response (200):


{
    "message": "InCheck visibility updated successfully."
}
 

Request      

PUT api/admin/{organisation_id}/incheck/visibility/{id}

PATCH api/admin/{organisation_id}/incheck/visibility/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the visibility. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: bcm

visible   boolean     

Example: false

active   boolean     

Example: false

marketing_text   string     

Must not be greater than 1024 characters. Example: ut

Index

requires authentication

List InCheck visibility settings for an organisation of type Performance InCheck Provider

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/1/visibility?per_page=14&filter%5Borganisation_name%5D=tempora&filter%5Blevel_name%5D=est&filter%5Bvisibility_visible%5D=1&filter%5Bvisibility_active%5D=1&filter%5Bvisibility_marketing_text%5D=velit&sort=organisation_name&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/incheck/1/visibility"
);

const params = {
    "per_page": "14",
    "filter[organisation_name]": "tempora",
    "filter[level_name]": "est",
    "filter[visibility_visible]": "1",
    "filter[visibility_active]": "1",
    "filter[visibility_marketing_text]": "velit",
    "sort": "organisation_name",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/incheck/{organisation_id}/visibility

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

filter[organisation_name]   string  optional    

Filter column organisation_name by any accepted value. name of the organisation Example: tempora

filter[level_name]   string  optional    

Filter column level_name by any accepted value. name of the InCheck level Example: est

filter[visibility_visible]   boolean  optional    

Filter column visibility_visible by any accepted value. visibility status Example: true

filter[visibility_active]   boolean  optional    

Filter column visibility_active by any accepted value. active status Example: true

filter[visibility_marketing_text]   string  optional    

Filter column visibility_marketing_text by any accepted value. marketing text Example: velit

sort   string  optional    

sort by any accepted column: organisation_name, level_name, visibility_visible, visibility_active, visibility_marketing_text. prefix a "-" before the column name to sort in descending order Example: organisation_name

page   integer  optional    

the page number to show. Example: 1

Organisation API Keys

Index

requires authentication

List Organisation API Keys (with trashed!)

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/organisation-api-keys?per_page=16&filter%5Bid%5D=quisquam&filter%5Borganisation_id%5D=18&filter%5Borganisation_user_id%5D=19&filter%5Bstatus%5D=hic&filter%5Blast_used_at%5D=numquam&filter%5Bcreated_at%5D=quis&sort=id&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/admin/organisation-api-keys"
);

const params = {
    "per_page": "16",
    "filter[id]": "quisquam",
    "filter[organisation_id]": "18",
    "filter[organisation_user_id]": "19",
    "filter[status]": "hic",
    "filter[last_used_at]": "numquam",
    "filter[created_at]": "quis",
    "sort": "id",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/admin/organisation-api-keys

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

filter[id]   string  optional    

Filter column id by any accepted value. Matches exact value. Example: quisquam

filter[organisation_id]   integer  optional    

Filter column organisation_id by any accepted value. Filter by organisation ID (multiple selection allowed) Example: 18

filter[organisation_user_id]   integer  optional    

Filter column organisation_user_id by any accepted value. Filter by organisation user ID (multiple selection allowed) Example: 19

filter[status]   string  optional    

Filter column status by any accepted value. Filter by status (enabled, disabled) Example: hic

filter[last_used_at]   string  optional    

Filter column last_used_at by any accepted value. Has dynamic date filtering, e.g. <= < = > >= Example: numquam

filter[created_at]   string  optional    

Filter column created_at by any accepted value. Has dynamic date filtering, e.g. <= < = > >= Example: quis

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Destroy

requires authentication

Delete an Organisation API Key

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/admin/organisation-api-keys/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/admin/organisation-api-keys/2"
);

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


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

Example response (200):


{
    "message": "Organisation API key revoked successfully."
}
 

Request      

DELETE api/admin/organisation-api-keys/{token_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

token_id   integer     

The ID of the token. Example: 2

Organisation Invitations

Index

requires authentication

Shows all organisation invitations.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/1/organisations/invitations?filter%5Bstatus%5D=quo&sort=receiving_user_mail&page=1&per_page=3&search=quos" \
    --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/admin/1/organisations/invitations"
);

const params = {
    "filter[status]": "quo",
    "sort": "receiving_user_mail",
    "page": "1",
    "per_page": "3",
    "search": "quos",
};
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,
            "reference_id": "06-NUN3WT8GGYXD-I",
            "uuid": "a285d001-29eb-4c62-bd59-f9c969d7a5f4",
            "inviting_organisation_id": 21227,
            "inviting_user_id": 33068,
            "receiving_organisation_id": 21441,
            "receiving_user_id": 33061,
            "status": "INVITED",
            "valid_until": "2026-09-16T08:40:40.000000Z",
            "redeemed_at": null,
            "auto_connect": false,
            "created_at": "2026-08-17T08:40:40.000000Z",
            "updated_at": "2026-08-17T08:40:40.000000Z"
        },
        {
            "id": 1,
            "reference_id": "06-NUN3WT8GGYXD-I",
            "uuid": "a285d001-29eb-4c62-bd59-f9c969d7a5f4",
            "inviting_organisation_id": 21227,
            "inviting_user_id": 33068,
            "receiving_organisation_id": 21441,
            "receiving_user_id": 33061,
            "status": "INVITED",
            "valid_until": "2026-09-16T08:40:40.000000Z",
            "redeemed_at": null,
            "auto_connect": false,
            "created_at": "2026-08-17T08:40:40.000000Z",
            "updated_at": "2026-08-17T08:40:40.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    },
    "receiving_user_mail": "user@example.com",
    "receiving_organisation_type": "1"
}
 

Request      

GET api/admin/{organisation_id}/organisations/invitations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

filter[organisations.type_id]   integer  optional    

Filter column organisations.type_id by any accepted value. Receiving organisation type id. Example: 4

filter[status]   string  optional    

Filter column status by any accepted value. Status of the invitation. (REGISTERED, INVITED, EXPIRED) Example: quo

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

search   string  optional    

Search in all of these columns: receiving_user_mail, receiving_organisation_name. Filter type: like. Example: quos

Organisation Users

Index

requires authentication

List users of an organisation. Defaults to current members; pass only_trashed=1 to list only removed (soft-deleted) memberships.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/1/organisations/1/users?only_trashed=&per_page=11&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/admin/1/organisations/1/users"
);

const params = {
    "only_trashed": "0",
    "per_page": "11",
    "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,
            "organisation_id": 12083,
            "user_id": 49,
            "invited_by": null,
            "role_id": 4,
            "last_authorization": null,
            "invitation_sent_at": null,
            "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
            "created_at": "2026-08-11T13:39:38.000000Z",
            "updated_at": "2026-08-11T13:39:38.000000Z",
            "deleted_at": null,
            "user": {
                "id": 49,
                "first_name": "Truong",
                "last_name": "Cao",
                "email": "truong@truongphatchemicals.com.vn",
                "email_verified_at": "2017-01-18T06:36:40.000000Z",
                "phone": null,
                "location": "VN",
                "created_at": "2017-01-18T06:36:40.000000Z",
                "updated_at": "2017-01-18T06:36:40.000000Z",
                "deleted_at": null,
                "profile_picture_url": null
            },
            "role": {
                "id": 4,
                "parent_id": 3,
                "name": "ORGANISATION_ADMIN"
            }
        },
        {
            "id": 1,
            "organisation_id": 12083,
            "user_id": 49,
            "invited_by": null,
            "role_id": 4,
            "last_authorization": null,
            "invitation_sent_at": null,
            "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
            "created_at": "2026-08-11T13:39:38.000000Z",
            "updated_at": "2026-08-11T13:39:38.000000Z",
            "deleted_at": null,
            "user": {
                "id": 49,
                "first_name": "Truong",
                "last_name": "Cao",
                "email": "truong@truongphatchemicals.com.vn",
                "email_verified_at": "2017-01-18T06:36:40.000000Z",
                "phone": null,
                "location": "VN",
                "created_at": "2017-01-18T06:36:40.000000Z",
                "updated_at": "2017-01-18T06:36:40.000000Z",
                "deleted_at": null,
                "profile_picture_url": null
            },
            "role": {
                "id": 4,
                "parent_id": 3,
                "name": "ORGANISATION_ADMIN"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

GET api/admin/{organisation_id}/organisations/{subject_id}/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

Query Parameters

only_trashed   boolean  optional    

When true, only removed (soft-deleted) organisation users are returned. Defaults to current members. Example: false

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Invite

requires authentication

Invite users to any approved organisation. Intended for ZDHC Internal administrators onboarding members from the Registered Organisations side panel.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/organisations/1/invite" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"emails\": [
        \"user@example.com\"
    ],
    \"role_id\": 14
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/organisations/1/invite"
);

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

let body = {
    "emails": [
        "user@example.com"
    ],
    "role_id": 14
};

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/admin/{organisation_id}/organisations/{subject_id}/invite

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

Body Parameters

emails   string[]     

Email addresses to invite.

role_id   integer  optional    

optional Organisation role to assign. Defaults to Organisation Member. Example: 14

Resend invitation

requires authentication

Re-send the invitation email for a pending organisation member.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/organisations/1/users/8/resend-invitation" \
    --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/admin/1/organisations/1/users/8/resend-invitation"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/admin/{organisation_id}/organisations/{subject_id}/users/{organisationUser_id}/resend-invitation

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

organisationUser_id   integer     

The ID of the organisationUser. Example: 8

Detach

requires authentication

Revoke a pending invitation or remove a member from the organisation.

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/admin/1/organisations/1/users/8/detach" \
    --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/admin/1/organisations/1/users/8/detach"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

DELETE api/admin/{organisation_id}/organisations/{subject_id}/users/{organisationUser_id}/detach

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

organisationUser_id   integer     

The ID of the organisationUser. Example: 8

User

Index

requires authentication

Get all users.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/users?per_page=10&sort=first_name&filter%5Binvitation_status%5D=nesciunt&filter%5Bprofile_reviewed_at%5D=corporis&filter%5Bis_test%5D=1&page=1&search=similique" \
    --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/admin/users"
);

const params = {
    "per_page": "10",
    "sort": "first_name",
    "filter[invitation_status]": "nesciunt",
    "filter[profile_reviewed_at]": "corporis",
    "filter[is_test]": "1",
    "page": "1",
    "search": "similique",
};
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,
            "reference_id": "02-TUGF4Z9EK73J-X",
            "ulid": "01KZRGSQK6BTS67WZBMKRCX7TK",
            "pdc_id": null,
            "role_id": 2,
            "first_name": "Amy",
            "last_name": "Huang",
            "email": "amyhuang@ecic.com.tw",
            "email_verified_at": "2017-06-17T04:45:09.000000Z",
            "phone": "+886910807779",
            "location": "TW",
            "locale": "en-US",
            "created_at": "2017-06-17T04:45:09.000000Z",
            "updated_at": "2017-06-17T04:45:09.000000Z",
            "deleted_at": null,
            "last_active_at": null,
            "profile_reviewed_at": null,
            "status": "active",
            "profile_picture_url": null,
            "location_name": "Taiwan"
        },
        {
            "id": 8,
            "reference_id": "02-TUGF4Z9EK73J-X",
            "ulid": "01KZRGSQK6BTS67WZBMKRCX7TK",
            "pdc_id": null,
            "role_id": 2,
            "first_name": "Amy",
            "last_name": "Huang",
            "email": "amyhuang@ecic.com.tw",
            "email_verified_at": "2017-06-17T04:45:09.000000Z",
            "phone": "+886910807779",
            "location": "TW",
            "locale": "en-US",
            "created_at": "2017-06-17T04:45:09.000000Z",
            "updated_at": "2017-06-17T04:45:09.000000Z",
            "deleted_at": null,
            "last_active_at": null,
            "profile_reviewed_at": null,
            "status": "active",
            "profile_picture_url": null,
            "location_name": "Taiwan"
        }
    ]
}
 

Request      

GET api/admin/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

sort   string  optional    

sort by any accepted column: first_name, last_name, email, registration_date, last_active_at, invitation_status, profile_reviewed_at. prefix a "-" before the column name to sort in descending order Example: first_name

filter[invitation_status]   string  optional    

Filter column invitation_status by any accepted value. Matches part of the value. Example: nesciunt

filter[profile_reviewed_at]   custom  optional    

Filter column profile_reviewed_at by any accepted value. users.profile_reviewed_at Example: corporis

filter[is_test]   boolean  optional    

Filter column is_test by any accepted value. Filter by derived test account status from organisation memberships. Example: true

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: first_name, last_name, email. Filter type: like. Example: similique

Update

requires authentication

Update a user.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/admin/users/8" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"iatgn\",
    \"last_name\": \"svixoisbrybyjwigeyf\",
    \"email\": \"rickey.heathcote@example.com\",
    \"phone\": \"+1234567890\",
    \"location\": \"US\",
    \"locale\": \"sr_BA\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/admin/users/8"
);

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

let body = {
    "first_name": "iatgn",
    "last_name": "svixoisbrybyjwigeyf",
    "email": "rickey.heathcote@example.com",
    "phone": "+1234567890",
    "location": "US",
    "locale": "sr_BA"
};

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

Example response (200, successful):


{
    "message": "User updated successfully"
}
 

Request      

PUT api/admin/users/{id}

PATCH api/admin/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the user. Example: 8

Body Parameters

first_name   string     

Must be at least 2 characters. Must not be greater than 50 characters. Example: iatgn

last_name   string     

Must be at least 2 characters. Must not be greater than 50 characters. Example: svixoisbrybyjwigeyf

email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: rickey.heathcote@example.com

phone   string  optional    

The user's phone number. Must be at least 8 characters. Must not be greater than 16 characters. Example: +1234567890

location   string  optional    

The user's location. Must not be greater than 255 characters. Example: US

locale   string  optional    

Must not be greater than 12 characters. Example: sr_BA

Show

requires authentication

Display the specified resource.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/users/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/admin/users/8"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/admin/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the user. Example: 8

Reset Password

requires authentication

Shares functionality from auth.forgot-password route but not throttled for admins

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/admin/users/8/reset-password" \
    --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/admin/users/8/reset-password"
);

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


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

Request      

POST api/admin/users/{user_id}/reset-password

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Auth

Login

Handle an incoming authentication request.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"admin@localhost\",
    \"password\": \"password\",
    \"remember\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/auth/login"
);

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

let body = {
    "email": "admin@localhost",
    "password": "password",
    "remember": false
};

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

Example response (200, successful):


{
    "message": "You have been successfully logged in.",
    "token": "_token_"
}
 

Example response (401, wrong credentials):


{
    "message": "These credentials do not match our records"
}
 

Example response (401, plattform is not registered):


{
    "message": "Plattform for Host $host doesn't exist"
}
 

Example response (412, validation error):


{
    "message": "must be valid email"
}
 

Request      

POST api/auth/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The email of the user. Must be a valid email address. Must not be greater than 254 characters. Example: admin@localhost

password   string     

The password of the user. Must not be greater than 255 characters. Example: password

remember   boolean  optional    

Example: false

Logout

requires authentication

Log the user out of the application.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/auth/logout" \
    --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/auth/logout"
);

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


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

Example response (200, successful):


{
    "message": "You have been successfully logged out."
}
 

Request      

POST api/auth/logout

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get User By Token

requires authentication

Get the user Bearer Token

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/auth/getUserByToken" \
    --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/auth/getUserByToken"
);

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,
        "reference_id": "02-TUGF4Z9EK73J-X",
        "ulid": "01KZRGSQK6BTS67WZBMKRCX7TK",
        "pdc_id": null,
        "role_id": 2,
        "first_name": "Amy",
        "last_name": "Huang",
        "email": "amyhuang@ecic.com.tw",
        "email_verified_at": "2017-06-17T04:45:09.000000Z",
        "phone": "+886910807779",
        "location": "TW",
        "locale": "en-US",
        "created_at": "2017-06-17T04:45:09.000000Z",
        "updated_at": "2017-06-17T04:45:09.000000Z",
        "deleted_at": null,
        "last_active_at": null,
        "profile_reviewed_at": null,
        "status": "active",
        "profile_picture_url": null,
        "location_name": "Taiwan",
        "role": {
            "id": 2,
            "parent_id": null,
            "name": "USER"
        }
    }
}
 

Request      

GET api/auth/getUserByToken

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Forgot Password

Handle an incoming password reset link request.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/auth/forgot-password" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"hermiston.britney@example.org\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/auth/forgot-password"
);

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

let body = {
    "email": "hermiston.britney@example.org"
};

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

Example response (200, successful):


{
    "message": "You will receive instructions to reset email if you have an account with us."
}
 

Example response (200, wrong email):


{
    "message": "You will receive instructions to reset email if you have an account with us."
}
 

Example response (412, validation error):


{
    "message": "must be valid email"
}
 

Request      

POST api/auth/forgot-password

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

Must be a valid email address. Example: hermiston.britney@example.org

Reset Password

Reset a password requested in a forgot password request

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/auth/reset-password?token=totam" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"gonzalo.bogan@example.net\",
    \"token\": \"eum\",
    \"password\": \"password\",
    \"password_confirmation\": \"password\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/auth/reset-password"
);

const params = {
    "token": "totam",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "email": "gonzalo.bogan@example.net",
    "token": "eum",
    "password": "password",
    "password_confirmation": "password"
};

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

Example response (200, successful):


{
    "message": "Your password has been reset."
}
 

Example response (412, validation error):


{
    "message": "must be valid email"
}
 

Request      

POST api/auth/reset-password

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

token   string     

The password reset token, gathered from the reset link in the email. Example: totam

Body Parameters

email   string     

The email. Example: gonzalo.bogan@example.net

token   string  optional    

this is not actually necessary in body, but documentation generates this falsely. Example: eum

password   string     

The new password. Example: password

password_confirmation   string     

The password confirmation. Example: password

Verify Email

requires authentication

Verify an email change request.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/auth/users/8/verify-email?signature=hic&expires=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/auth/users/8/verify-email"
);

const params = {
    "signature": "hic",
    "expires": "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, successful):


{
    "message": "Email verified successfully"
}
 

Request      

GET api/auth/users/{user_id}/verify-email

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Query Parameters

signature   string     

signature hash. generated by the action signing this link. Example: hic

expires   integer     

expiring timestamp. generated by the action signing this link. Example: 14

Confirm password

requires authentication

Confirm the password change

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/auth/users/8/confirm-password-change?signature=voluptates&expires=10" \
    --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/auth/users/8/confirm-password-change"
);

const params = {
    "signature": "voluptates",
    "expires": "10",
};
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, successful):


{
    "message": "Password change succeeded"
}
 

Request      

GET api/auth/users/{user_id}/confirm-password-change

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Query Parameters

signature   string     

signature hash. generated by the action signing this link. Example: voluptates

expires   integer     

expiring timestamp. generated by the action signing this link. Example: 10

Complete Registration

requires authentication

Complete the registration of a user, which was created by invitation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/auth/complete-registration/8?signature=nobis&expires=9" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"uzitzhpevnghjtgwyiyka\",
    \"last_name\": \"dtbqef\",
    \"password\": \"ZNHVEXL\\\"aP.Lj}<d&=X\",
    \"password_confirmation\": \"et\",
    \"phone\": \"+49123456789\",
    \"locale\": \"ar_EG\",
    \"location\": \"vvvipkzkfpzl\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/auth/complete-registration/8"
);

const params = {
    "signature": "nobis",
    "expires": "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",
};

let body = {
    "first_name": "uzitzhpevnghjtgwyiyka",
    "last_name": "dtbqef",
    "password": "ZNHVEXL\"aP.Lj}<d&=X",
    "password_confirmation": "et",
    "phone": "+49123456789",
    "locale": "ar_EG",
    "location": "vvvipkzkfpzl"
};

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

Example response (200, successful):


{
    "message": "Registration completed successfully"
}
 

Request      

POST api/auth/complete-registration/{user_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Query Parameters

signature   string     

signature hash. generated by the action signing this link. Example: nobis

expires   integer     

expiring timestamp. generated by the action signing this link. Example: 9

Body Parameters

first_name   string     

Must be at least 2 characters. Must not be greater than 50 characters. Example: uzitzhpevnghjtgwyiyka

last_name   string     

Must be at least 2 characters. Must not be greater than 50 characters. Example: dtbqef

password   string     

Must not be greater than 255 characters. Example: ZNHVEXL"aP.Lj}<d&=X

password_confirmation   string     

The value and password must match. Example: et

phone   string  optional    

The phone number of the user. Must be at least 8 characters. Must not be greater than 16 characters. Example: +49123456789

locale   string  optional    

Must not be greater than 12 characters. Example: ar_EG

location   string  optional    

Must not be greater than 255 characters. Example: vvvipkzkfpzl

Set Organisation User

requires authentication

Set the organisation user for the current personal access token.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/auth/setOrganisationUser/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/auth/setOrganisationUser/1"
);

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, successful):


{
    "message": "Organisation user set successfully"
}
 

Example response (403, organisation user does not belong to user):


{
    "message": "The organisation user must belong to the same user as the personal access token."
}
 

Request      

GET api/auth/setOrganisationUser/{organisationUser_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisationUser_id   integer     

The ID of the organisationUser. Example: 1

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?page=1&per_page=16" \
    --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 = {
    "page": "1",
    "per_page": "16",
};
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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=6&filter%5Bupdated_at%5D=%3C+2026-10-09+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "6",
    "filter[updated_at]": "< 2026-10-09 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-09 18:31:40

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?page=1&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/chemical-count-bracket"
);

const params = {
    "page": "1",
    "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,
            "CountBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "CountBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/chemical-weight-bracket"
);

const params = {
    "page": "1",
    "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,
            "ChemicalWeightBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "ChemicalWeightBracketName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=11&filter%5Bupdated_at%5D=%3C+2026-10-11+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "11",
    "filter[updated_at]": "< 2026-10-11 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-11 18:31:40

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?page=1&per_page=17&filter%5Bupdated_at%5D=%3E%3D+2026-10-11+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "17",
    "filter[updated_at]": ">= 2026-10-11 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/connections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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:31:40

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?page=1&per_page=13&filter%5Bupdated_at%5D=%3C%3D+2026-09-30+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "13",
    "filter[updated_at]": "<= 2026-09-30 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-09-30 18:31:40

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?page=1&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/discharge-type"
);

const params = {
    "page": "1",
    "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,
            "DischargeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "DischargeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/disposal-pathways"
);

const params = {
    "page": "1",
    "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,
            "PathwayName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "PathwayName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/evaluation-level"
);

const params = {
    "page": "1",
    "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": 3,
            "EvaluationName": "Aspirational",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 3,
            "EvaluationName": "Aspirational",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/facility-type"
);

const params = {
    "page": "1",
    "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,
            "FacilityTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "FacilityTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=13" \
    --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 = {
    "page": "1",
    "per_page": "13",
};
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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/guidelines

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

InCheck-Inventory-CTZ-Certificates

InCheck Inventory CTZ Certificates Index

requires authentication

List inventory-item to CTZ certification links from publish MRSL snapshots ({@see \App\Models\Chemical\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?page=1&per_page=5&filter%5Bupdated_at%5D=%3C%3D+2026-10-12+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "5",
    "filter[updated_at]": "<= 2026-10-12 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-12 18:31:40

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 \App\Models\Chemical\InventoryMrslState}).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/in-check-inventory-mrsl-certificates?page=1&per_page=10&filter%5Bupdated_at%5D=%3D+2026-10-11+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "10",
    "filter[updated_at]": "= 2026-10-11 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-11 18:31:40

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?page=1&per_page=1&filter%5Bupdated_at%5D=%3C%3D+2026-10-21+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "1",
    "filter[updated_at]": "<= 2026-10-21 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-21 18:31:40

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?page=1&per_page=7&filter%5Bupdated_at%5D=%3D+2026-10-17+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "7",
    "filter[updated_at]": "= 2026-10-17 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-17 18:31:40

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?page=1&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/in-check-report-statuses"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=5&filter%5Bupdated_at%5D=%3C+2026-10-02+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "5",
    "filter[updated_at]": "< 2026-10-02 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-02 18:31:40

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?page=1&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/locations"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/material-category"
);

const params = {
    "page": "1",
    "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": 1,
            "MaterialCategoryName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "MaterialCategoryName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=1&filter%5Bupdated_at%5D=%3D+2026-10-16+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "1",
    "filter[updated_at]": "= 2026-10-16 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-16 18:31:40

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?page=1&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/mrsl-versions"
);

const params = {
    "page": "1",
    "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": "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=13" \
    --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 = {
    "page": "1",
    "per_page": "13",
};
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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=8&filter%5Bupdated_at%5D=%3C+2026-10-03+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "8",
    "filter[updated_at]": "< 2026-10-03 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-03 18:31:40

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?page=1&per_page=17&filter%5Bupdated_at%5D=%3D+2026-10-20+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "17",
    "filter[updated_at]": "= 2026-10-20 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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:31:40

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?page=1&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/organisation-registration-statuses"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Organisation-Registration-Status-History

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

requires authentication

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?page=1&per_page=13&filter%5Bupdated_at%5D=%3E%3D+2026-10-13+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "13",
    "filter[updated_at]": ">= 2026-10-13 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-13 18:31:40

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?page=1&per_page=17&filter%5Bupdated_at%5D=%3C+2026-10-09+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "17",
    "filter[updated_at]": "< 2026-10-09 18:31:40",
    "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-09-21 18:31:33"
        },
        {
            "Id": 1,
            "TypeName": "ZDHC Internal",
            "CreateDate": "2026-08-11 13:39:51",
            "LastUpdateDate": "2026-09-21 18:31:33"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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:31:40

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?page=1&per_page=7&filter%5Bupdated_at%5D=%3C%3D+2026-09-23+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "7",
    "filter[updated_at]": "<= 2026-09-23 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-09-23 18:31:40

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?page=1&per_page=1&filter%5Bupdated_at%5D=%3D+2026-10-08+18%3A31%3A40" \
    --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 = {
    "page": "1",
    "per_page": "1",
    "filter[updated_at]": "= 2026-10-08 18:31:40",
};
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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-08 18:31:40

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?page=1&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/processes"
);

const params = {
    "page": "1",
    "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": 1,
            "ProcessName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "ProcessName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/processes

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=10&filter%5Bupdated_at%5D=%3E%3D+2026-09-26+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "10",
    "filter[updated_at]": ">= 2026-09-26 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-09-26 18:31:40

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?page=1&per_page=1&filter%5Bupdated_at%5D=%3D+2026-09-24+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "1",
    "filter[updated_at]": "= 2026-09-24 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-09-24 18:31:40

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?page=1&per_page=5&filter%5Bupdated_at%5D=%3C%3D+2026-09-30+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "5",
    "filter[updated_at]": "<= 2026-09-30 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-09-30 18:31:40

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?page=1&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/product-publication-status"
);

const params = {
    "page": "1",
    "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,
            "PublicationStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "PublicationStatusName": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=17&filter%5Bupdated_at%5D=%3C+2026-09-23+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "17",
    "filter[updated_at]": "< 2026-09-23 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-09-23 18:31:40

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?page=1&per_page=4&filter%5Bupdated_at%5D=%3E%3D+2026-10-19+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "4",
    "filter[updated_at]": ">= 2026-10-19 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-19 18:31:40

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?page=1&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/product-status"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=14&filter%5Bupdated_at%5D=%3D+2026-10-08+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "14",
    "filter[updated_at]": "= 2026-10-08 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-08 18:31:40

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?page=1&per_page=7&filter%5Bupdated_at%5D=%3C+2026-10-15+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "7",
    "filter[updated_at]": "< 2026-10-15 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-15 18:31:40

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?page=1&per_page=1&filter%5Bupdated_at%5D=%3E%3D+2026-10-14+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "1",
    "filter[updated_at]": ">= 2026-10-14 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-14 18:31:40

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?page=1&per_page=13&filter%5Bupdated_at%5D=%3C%3D+2026-10-08+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "13",
    "filter[updated_at]": "<= 2026-10-08 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-08 18:31:40

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?page=1&per_page=10&filter%5Bupdated_at%5D=%3D+2026-10-12+18%3A31%3A40&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 = {
    "page": "1",
    "per_page": "10",
    "filter[updated_at]": "= 2026-10-12 18:31:40",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

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-12 18:31:40

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?page=1&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/profile-supplier-chemicals"
);

const params = {
    "page": "1",
    "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,
            "OrganisationId": 21835,
            "ChemicalTypeId": null,
            "ChemicalCountBracketId": null,
            "ChemicalWeightBracketId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": 21835,
            "ChemicalTypeId": null,
            "ChemicalCountBracketId": null,
            "ChemicalWeightBracketId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=16" \
    --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 = {
    "page": "1",
    "per_page": "16",
};
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": 21836,
            "MaterialId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": 21836,
            "MaterialId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=6" \
    --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 = {
    "page": "1",
    "per_page": "6",
};
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": 21837,
            "ProcessId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "OrganisationId": 21837,
            "ProcessId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/profile-supplier-product-category"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=2&filter%5Bupdated_at%5D=%3D+2026-10-19+18%3A31%3A41&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 = {
    "page": "1",
    "per_page": "2",
    "filter[updated_at]": "= 2026-10-19 18:31:41",
    "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

page   integer  optional    

the page number to show. Example: 1

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-19 18:31:41

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?page=1&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/roles"
);

const params = {
    "page": "1",
    "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,
            "RoleName": "UNREGISTERED",
            "ParentId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "RoleName": "UNREGISTERED",
            "ParentId": null,
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/roles

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/sds-section"
);

const params = {
    "page": "1",
    "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,
            "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=12" \
    --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 = {
    "page": "1",
    "per_page": "12",
};
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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/units"
);

const params = {
    "page": "1",
    "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": 135,
            "UnitName": "",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 135,
            "UnitName": "",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/units

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Users

Users Index

requires authentication

List all users.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/users?page=1&per_page=15&filter%5Bupdated_at%5D=%3C%3D+2026-10-12+18%3A31%3A41&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 = {
    "page": "1",
    "per_page": "15",
    "filter[updated_at]": "<= 2026-10-12 18:31:41",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/azure/v1/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

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-12 18:31:41

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?page=1&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/verification-status"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=3&filter%5Bupdated_at%5D=%3C+2026-10-19+18%3A31%3A41&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 = {
    "page": "1",
    "per_page": "3",
    "filter[updated_at]": "< 2026-10-19 18:31:41",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-19 18:31:41

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 simple pagination (no total row count) — consumers follow {@code links.next} until empty.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/azure/v1/waste-water-results?page=1&per_page=14&filter%5Bupdated_at%5D=%3D+2026-10-05+18%3A31%3A41&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 = {
    "page": "1",
    "per_page": "14",
    "filter[updated_at]": "= 2026-10-05 18:31:41",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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-05 18:31:41

sort   string  optional    

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

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?page=1&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/ww-profile-industry-type"
);

const params = {
    "page": "1",
    "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,
            "IndustryTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": null,
            "IndustryTypeName": "Cotton",
            "CreateDate": null,
            "LastUpdateDate": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=12" \
    --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 = {
    "page": "1",
    "per_page": "12",
};
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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&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/pretreatments"
);

const params = {
    "page": "1",
    "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,
            "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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=13" \
    --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 = {
    "page": "1",
    "per_page": "13",
};
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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

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?page=1&per_page=5&filter%5Bupdated_at%5D=%3E%3D+2026-09-28+18%3A31%3A41&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 = {
    "page": "1",
    "per_page": "5",
    "filter[updated_at]": ">= 2026-09-28 18:31:41",
    "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": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

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

page   integer  optional    

the page number to show. Example: 1

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-09-28 18:31:41

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

Index

requires authentication

Get CTZ Levels

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-level?per_page=3&page=1&filter%5Bname%5D=harum&filter%5Bcreated_at%5D=ipsam&filter%5Bupdated_at%5D=ipsa&search=velit&sort=name&column=name" \
    --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/organisation/1/chemical/certification/ctz-level"
);

const params = {
    "per_page": "3",
    "page": "1",
    "filter[name]": "harum",
    "filter[created_at]": "ipsam",
    "filter[updated_at]": "ipsa",
    "search": "velit",
    "sort": "name",
    "column": "name",
};
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": [
        [],
        []
    ]
}
 

Request      

GET api/organisation/{organisation_id}/chemical/certification/ctz-level

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: harum

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created at Example: ipsam

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated at Example: ipsa

search   string  optional    

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

sort   string  optional    

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

column   string  optional    

get a distinct list of filterable values for any of the columns: name. Example: name

Show

requires authentication

Show a CTZ Level

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-level/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/organisation/1/chemical/certification/ctz-level/1"
);

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": []
}
 

Request      

GET api/organisation/{organisation_id}/chemical/certification/ctz-level/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the ctz level. Example: 1

Assign Organisations

requires authentication

Assign organisations to a CTZ Level

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-level/blanditiis" \
    --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/organisation/1/chemical/certification/ctz-level/blanditiis"
);

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


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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Foundational",
        "score": 10,
        "created_at": "2026-08-11T13:39:53.000000Z",
        "updated_at": "2026-08-27T13:46:25.000000Z"
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/certification/ctz-level/{ctz_level_id}

PATCH api/organisation/{organisation_id}/chemical/certification/ctz-level/{ctz_level_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

ctz_level_id   string     

The ID of the ctz level. Example: blanditiis

Body Parameters

organisations   string[]  optional    

The id of an existing record in the organisations table.

Index

requires authentication

Get all CTZ levels

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/ctz-levels" \
    --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/ctz-levels"
);

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,
        "name": "Foundational",
        "score": 10,
        "created_at": "2026-08-11T13:39:53.000000Z",
        "updated_at": "2026-08-27T13:46:25.000000Z"
    }
}
 

Request      

GET api/ctz-levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Certification Bodies/V1

Assigned Products

List assigned products

requires authentication

Returns a paginated list of assigned products for this certification body.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/assigned-products?per_page=10&page=1&filter%5Bproduct_reference_id%5D=error&filter%5Bproduct_name%5D=tempora&filter%5Bformulator_reference_id%5D=quasi&filter%5Bformulator_name%5D=perferendis&filter%5Bassigned_by%5D=sed&filter%5Bassignment_status%5D=UNDER_REVIEW&filter%5Bassigned_at%5D=%3C%3D+2026-10-02+18%3A31%3A42&search=dicta&sort=product_reference_id" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 3,
    \"search\": \"izuleiogncutgnmccaumezfzihciiqegmixwenvmcndvwvsvrqtbxvpwwgzknkamwmqorwzehoiasq\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/assigned-products"
);

const params = {
    "per_page": "10",
    "page": "1",
    "filter[product_reference_id]": "error",
    "filter[product_name]": "tempora",
    "filter[formulator_reference_id]": "quasi",
    "filter[formulator_name]": "perferendis",
    "filter[assigned_by]": "sed",
    "filter[assignment_status]": "UNDER_REVIEW",
    "filter[assigned_at]": "<= 2026-10-02 18:31:42",
    "search": "dicta",
    "sort": "product_reference_id",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "per_page": 3,
    "search": "izuleiogncutgnmccaumezfzihciiqegmixwenvmcndvwvsvrqtbxvpwwgzknkamwmqorwzehoiasq"
};

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

Example response (200):


{
    "data": [
        {
            "product_reference_id": null,
            "product_name": null,
            "formulator_reference_id": null,
            "formulator_name": null,
            "assigned_by": null,
            "assigned_at": "2026-09-21",
            "assignment_status": null
        },
        {
            "product_reference_id": null,
            "product_name": null,
            "formulator_reference_id": null,
            "formulator_name": null,
            "assigned_by": null,
            "assigned_at": "2026-09-21",
            "assignment_status": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/certification-bodies/v1/assigned-products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[product_reference_id]   string  optional    

Filter column product_reference_id by any accepted value. Filter by product reference ID Example: error

filter[product_name]   string  optional    

Filter column product_name by any accepted value. Filter by product name Example: tempora

filter[formulator_reference_id]   string  optional    

Filter column formulator_reference_id by any accepted value. Filter by formulator reference ID Example: quasi

filter[formulator_name]   string  optional    

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

filter[assigned_by]   string  optional    

Filter column assigned_by by any accepted value. Filter by assigning organisation name Example: sed

filter[assignment_status]   string  optional    

Filter column assignment_status by any accepted value. Matches exact value. Example: UNDER_REVIEW

Must be one of:
  • UNDER_REVIEW
  • ACCEPTED
  • EXPIRED
  • DECLINED
filter[assigned_at]   datetime  optional    

Filter column assigned_at by any accepted value. Filter by assignment created date Example: <= 2026-10-02 18:31:42

search   string  optional    

Search in all of these columns: product_reference_id, product_name, formulator_reference_id, formulator_name. Filter type: like. Minimum length: 3. Example: dicta

sort   string  optional    

sort by any accepted column: product_reference_id, product_name, formulator_reference_id, formulator_name, assigned_by, assigned_at, assignment_status. prefix a "-" before the column name to sort in descending order Example: product_reference_id

Body Parameters

per_page   integer  optional    

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

search   string  optional    

Must be at least 3 characters. Example: izuleiogncutgnmccaumezfzihciiqegmixwenvmcndvwvsvrqtbxvpwwgzknkamwmqorwzehoiasq

filter   string  optional    
product_reference_id   string  optional    

Example: expedita

product_name   string  optional    

Example: aspernatur

formulator_reference_id   string  optional    

Example: reiciendis

formulator_name   string  optional    

Example: aspernatur

assigned_by   string  optional    

Example: rerum

assignment_status   string  optional    
assigned_at   string  optional    

Example: magni

sort   string  optional    

Decline an assigned product

requires authentication

Marks the assignment identified in the URL as declined.

Example request:
curl --request PATCH \
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/assigned-products/1234567890/decline" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"note\": \"Unable to process at this time.\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/assigned-products/1234567890/decline"
);

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

let body = {
    "note": "Unable to process at this time."
};

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

Example response (200):


{
    "data": {
        "product_reference_id": null,
        "product_name": null,
        "formulator_reference_id": null,
        "formulator_name": null,
        "assigned_by": null,
        "assigned_at": "2026-09-21",
        "assignment_status": null
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (404):


Resource not found.
 

Example response (422):


Validation error
 

Request      

PATCH api/certification-bodies/v1/assigned-products/{product_reference_id}/decline

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

product_reference_id   string     

The reference ID of the assigned product. Example: 1234567890

Body Parameters

note   string     

Decline note. Must not be greater than 255 characters. Example: Unable to process at this time.

Certificates

List certificates

requires authentication

Returns a paginated list of certificates for this certification body.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates?per_page=17&page=1&filter%5Bproduct_reference_id%5D=in&filter%5Bstandard_reference_id%5D=ut&filter%5Bstatus%5D=ACTIVE&sort=certificate_reference_id" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 5,
    \"filter\": {
        \"product_reference_id\": \"aliquam\",
        \"standard_reference_id\": \"ut\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates"
);

const params = {
    "per_page": "17",
    "page": "1",
    "filter[product_reference_id]": "in",
    "filter[standard_reference_id]": "ut",
    "filter[status]": "ACTIVE",
    "sort": "certificate_reference_id",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "per_page": 5,
    "filter": {
        "product_reference_id": "aliquam",
        "standard_reference_id": "ut"
    }
};

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

Example response (200):


{
    "data": [
        {
            "certificate_reference_id": "50-6BV23BNKSMT9-G",
            "product_reference_id": "20-SW23FU32JU27-D",
            "product_name": "Alpha External Certificate Product",
            "standard_reference_id": "30-P8AYGY7CGEJC-D",
            "standard_name": "ExternalCertStandardAlpha",
            "certificate_number": "CERT-ALPHA-001",
            "certificate_issue_date": "2024-01-10",
            "certificate_end_date": "2027-01-10",
            "certificate_result": "PASSED",
            "ctz_level": "foundational",
            "gateway_active_until": "2027-06-10",
            "sds_source": "formulator",
            "status": "ACTIVE",
            "removal_status": "pending",
            "created_at": "2024-01-10T00:00:00.000000Z"
        },
        {
            "certificate_reference_id": "50-HXHUH9EG7T27-U",
            "product_reference_id": "20-WEV44RLVJVW3-Q",
            "product_name": "Alpha External Certificate Product",
            "standard_reference_id": "30-ECUB4FP74KKG-J",
            "standard_name": "ExternalCertStandardAlpha",
            "certificate_number": "CERT-ALPHA-001",
            "certificate_issue_date": "2024-01-10",
            "certificate_end_date": "2027-01-10",
            "certificate_result": "PASSED",
            "ctz_level": "foundational",
            "gateway_active_until": "2027-06-10",
            "sds_source": "formulator",
            "status": "ACTIVE",
            "removal_status": "pending",
            "created_at": "2024-01-10T00:00:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/certification-bodies/v1/certificates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[product_reference_id]   string  optional    

Filter column product_reference_id by any accepted value. Filter by product reference ID Example: in

filter[standard_reference_id]   string  optional    

Filter column standard_reference_id by any accepted value. Filter by MRSL standard reference ID Example: ut

filter[status]   string  optional    

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

Must be one of:
  • ACTIVE
  • INACTIVE
sort   string  optional    

sort by any accepted column: certificate_reference_id, product_reference_id, product_name, standard_reference_id, standard_name, certificate_number, certificate_issue_date, certificate_end_date, ctz_level, gateway_active_until, status, created_at. prefix a "-" before the column name to sort in descending order Example: certificate_reference_id

Body Parameters

per_page   integer  optional    

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

filter   object  optional    
product_reference_id   string  optional    

Example: aliquam

standard_reference_id   string  optional    

Example: ut

status   string  optional    
sort   string  optional    

Show a certificate

requires authentication

Returns one certificate for this certification body.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates/50-AAAAAAAAAAA1-X" \
    --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/certification-bodies/v1/certificates/50-AAAAAAAAAAA1-X"
);

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": {
        "certificate_reference_id": "50-HL3JFUQBZGW4-L",
        "product_reference_id": "20-RHNX4GGK7RX8-B",
        "product_name": "Alpha External Certificate Product",
        "standard_reference_id": "30-4AHYJYVP4T67-C",
        "standard_name": "ExternalCertStandardAlpha",
        "certificate_number": "CERT-ALPHA-001",
        "certificate_issue_date": "2024-01-10",
        "certificate_end_date": "2027-01-10",
        "certificate_result": "PASSED",
        "ctz_level": "foundational",
        "gateway_active_until": "2027-06-10",
        "sds_source": "formulator",
        "status": "ACTIVE",
        "removal_status": "pending",
        "created_at": "2024-01-10T00:00:00.000000Z"
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (404):


Resource not found.
 

Request      

GET api/certification-bodies/v1/certificates/{certificate_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

certificate_reference_id   string     

Certificate reference ID. Example: 50-AAAAAAAAAAA1-X

Store a certificate

requires authentication

Stores a new certificate for this certification body.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"product_reference_id\": \"20-Z3X9V2N-1\",
    \"standard_reference_id\": \"10-A1B2C3D-4\",
    \"certificate_number\": \"1234567890\",
    \"certificate_issue_date\": \"2026-01-01\",
    \"certificate_end_date\": \"2026-01-01\",
    \"certificate_result\": \"Pass\",
    \"ctz_level\": \"foundational\",
    \"sds_source\": \"formulator\",
    \"sds_id\": 1
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates"
);

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

let body = {
    "product_reference_id": "20-Z3X9V2N-1",
    "standard_reference_id": "10-A1B2C3D-4",
    "certificate_number": "1234567890",
    "certificate_issue_date": "2026-01-01",
    "certificate_end_date": "2026-01-01",
    "certificate_result": "Pass",
    "ctz_level": "foundational",
    "sds_source": "formulator",
    "sds_id": 1
};

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

Example response (200):


{
    "data": {
        "certificate_reference_id": "50-7CBYBM8KVA9N-B",
        "product_reference_id": "20-S9AK7BSWFAKU-Q",
        "product_name": "Alpha External Certificate Product",
        "standard_reference_id": "30-3YWGSQKZEM8A-R",
        "standard_name": "ExternalCertStandardAlpha",
        "certificate_number": "CERT-ALPHA-001",
        "certificate_issue_date": "2024-01-10",
        "certificate_end_date": "2027-01-10",
        "certificate_result": "PASSED",
        "ctz_level": "foundational",
        "gateway_active_until": "2027-06-10",
        "sds_source": "formulator",
        "status": "ACTIVE",
        "removal_status": "pending",
        "created_at": "2024-01-10T00:00:00.000000Z"
    }
}
 

Example response (201):


Certificate created successfully.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (403):


You are not accredited for this standard.
 

Example response (403):


Your accreditation does not permit the requested CtZ level.
 

Example response (404):


Product not found.
 

Example response (404):


Safety data sheet not found.
 

Example response (404):


Selected safety data sheet not found.
 

Example response (404):


Standard not found.
 

Example response (422):


Validation error
 

Request      

POST api/certification-bodies/v1/certificates

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

product_reference_id   string     

Reference ID of the chemical product to certify. If the product is not yet assigned to the authenticated certification body, an assignment is created automatically. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-Z3X9V2N-1

standard_reference_id   string     

Reference ID of the MRSL standard to certify against. The standard must exist and be accredited for the authenticated certification body. Must match the regex /^30-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 10-A1B2C3D-4

certificate_number   string  optional    

Optional certificate number (string, max 255 characters). Omit or leave empty to store null. Must not be greater than 255 characters. Example: 1234567890

certificate_issue_date   string     

Certificate issue date (date). Must be a valid date in the format Y-m-d. Example: 2026-01-01

certificate_end_date   string  optional    

Optional certificate end date (date). Omit or leave empty to store null; gateway_active_until defaults to three years from now. Must be a valid date in the format Y-m-d. Example: 2026-01-01

certificate_result   string  optional    

Optional certificate result (string, max 255 characters). Omit or leave empty to store null. Must not be greater than 255 characters. Example: Pass

ctz_level   string     

CTZ level for the certificate. Accepted values: foundational, progressive, aspirational.

The value must be allowed for the selected MRSL standard's conformance level:

  • MRSL conformance level 1: foundational only
  • MRSL conformance level 2: foundational or progressive
  • MRSL conformance level 3: foundational, progressive, or aspirational. Example: foundational
Must be one of:
  • foundational
  • progressive
  • aspirational
sds_source   string     

Which safety data sheet (SDS) to base the certification on. Use formulator for the SDS uploaded by the chemical formulator, or certifier for an SDS uploaded by the authenticated certification body. Example: formulator

Must be one of:
  • formulator
  • certifier
sds_id   integer  optional    

Safety data sheet ID of a previously uploaded safety data sheet. Required when the formulator has not uploaded a valid SDS for the product; optional when a formulator SDS exists and can be resolved from sds_source. Example: 1

Remove a certificate

requires authentication

Removes a certificate for this certification body.

Example request:
curl --request PATCH \
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates/50-AAAAAAAAAAA1-X/remove" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"QUALITY_ISSUE\",
    \"note\": \"Chemical product is no longer compliant with the certification body\'s requirements.\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates/50-AAAAAAAAAAA1-X/remove"
);

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

let body = {
    "reason": "QUALITY_ISSUE",
    "note": "Chemical product is no longer compliant with the certification body's requirements."
};

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

Example response (200):


{
    "data": {
        "certificate_reference_id": "50-4L9VAM9ZZNWP-K",
        "product_reference_id": "20-VMKM4ULEM8QD-Y",
        "product_name": "Alpha External Certificate Product",
        "standard_reference_id": "30-4R38WMRG4SNK-G",
        "standard_name": "ExternalCertStandardAlpha",
        "certificate_number": "CERT-ALPHA-001",
        "certificate_issue_date": "2024-01-10",
        "certificate_end_date": "2027-01-10",
        "certificate_result": "PASSED",
        "ctz_level": "foundational",
        "gateway_active_until": "2027-06-10",
        "sds_source": "formulator",
        "status": "ACTIVE",
        "removal_status": "pending",
        "created_at": "2024-01-10T00:00:00.000000Z"
    }
}
 

Example response (200):


Certificate removed successfully.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (404):


Resource not found.
 

Example response (409):


Certificate already removed.
 

Example response (422):


Validation error
 

Request      

PATCH api/certification-bodies/v1/certificates/{certificate_reference_id}/remove

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

certificate_reference_id   string     

Certificate reference ID. Example: 50-AAAAAAAAAAA1-X

Body Parameters

reason   string     

Certification removal reason category. Example: QUALITY_ISSUE

Must be one of:
  • QUALITY_ISSUE
  • SDS_CHANGE
  • ENTRY_ERROR
  • OTHER
note   string  optional    

Optional additional note for the removal. Must not be greater than 255 characters. Example: Chemical product is no longer compliant with the certification body's requirements.

Bulk store certificates

requires authentication

Creates multiple certificates in one request. Each row is validated and processed independently; row-level failures do not prevent other rows from being created.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates/bulk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"rows\": [
        {
            \"product_reference_id\": \"20-Z3X9V2N-1\",
            \"standard_reference_id\": \"10-A1B2C3D-4\",
            \"certificate_number\": \"1234567890\",
            \"certificate_result\": \"Pass\",
            \"certificate_issue_date\": \"2026-01-01\",
            \"certificate_end_date\": \"2026-01-01\",
            \"ctz_level\": \"foundational\",
            \"sds_source\": \"formulator\",
            \"sds_id\": 1
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/certificates/bulk"
);

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

let body = {
    "rows": [
        {
            "product_reference_id": "20-Z3X9V2N-1",
            "standard_reference_id": "10-A1B2C3D-4",
            "certificate_number": "1234567890",
            "certificate_result": "Pass",
            "certificate_issue_date": "2026-01-01",
            "certificate_end_date": "2026-01-01",
            "ctz_level": "foundational",
            "sds_source": "formulator",
            "sds_id": 1
        }
    ]
};

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

Example response (207, Batch processed. Each row reports success or error independently.):


{
    "message": "Batch processed. Check each result individually.",
    "data": {
        "results": [
            {
                "row": 1,
                "status": "success",
                "certificate_reference_id": "50-AAAAAAAAAAA1-X",
                "product_reference_id": "40-AAAAAAAAAAA1-X",
                "gateway_active_until": "2028-01-15",
                "ctz_level": "foundational"
            },
            {
                "row": 2,
                "status": "error",
                "errors": [
                    "Product not found."
                ]
            }
        ],
        "summary": {
            "total": 2,
            "succeeded": 1,
            "failed": 1
        }
    }
}
 

Example response (207):


Batch processed. Check each result individually.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

POST api/certification-bodies/v1/certificates/bulk

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

rows   object[]     

Array of certificate rows to create. Each row uses the same fields as the single certificate store endpoint. Must have at least 1 items.

product_reference_id   string     

Reference ID of the chemical product to certify. If the product is not yet assigned to the authenticated certification body, an assignment is created automatically. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-Z3X9V2N-1

standard_reference_id   string     

Reference ID of the MRSL standard to certify against. The standard must exist and be accredited for the authenticated certification body. Must match the regex /^30-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 10-A1B2C3D-4

certificate_number   string  optional    

Optional certificate number (string, max 255 characters). Omit or leave empty to store null. Must not be greater than 255 characters. Example: 1234567890

certificate_result   string  optional    

Optional certificate result (string, max 255 characters). Omit or leave empty to store null. Must not be greater than 255 characters. Example: Pass

certificate_issue_date   string     

Certificate issue date (date). Must be a valid date in the format Y-m-d. Example: 2026-01-01

certificate_end_date   string  optional    

Optional certificate end date (date). Omit or leave empty to store null; gateway_active_until defaults to three years from now. Must be a valid date in the format Y-m-d. Example: 2026-01-01

ctz_level   string     

CTZ level for the certificate. Accepted values: foundational, progressive, aspirational.

The value must be allowed for the selected MRSL standard's conformance level:

  • MRSL conformance level 1: foundational only
  • MRSL conformance level 2: foundational or progressive
  • MRSL conformance level 3: foundational, progressive, or aspirational. Example: foundational
Must be one of:
  • foundational
  • progressive
  • aspirational
sds_source   string     

Which safety data sheet (SDS) to base the certification on. Use formulator for the SDS uploaded by the chemical formulator, or certifier for an SDS uploaded by the authenticated certification body. Example: formulator

Must be one of:
  • formulator
  • certifier
sds_id   integer  optional    

Safety data sheet ID of a previously uploaded safety data sheet. Required when the formulator has not uploaded a valid SDS for the product; optional when a formulator SDS exists and can be resolved from sds_source. Example: 1

Products

List chemical products

requires authentication

Returns a paginated list of chemical products.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/products?per_page=20&page=1&filter%5Bproduct_reference_id%5D=voluptatibus&filter%5Bname%5D=quis&filter%5Bzdhc_pid%5D=15&filter%5Bstatus%5D=PUBLISHED&filter%5Bformulator_reference_id%5D=magni&filter%5Bformulator_name%5D=ut&filter%5Bconformance_level_id%5D=12&filter%5Bctz_level_id%5D=3&filter%5Bproduct_use_type_id%5D=16&filter%5Bproduct_category_id%5D=12&filter%5Bcreated_at%5D=%3C+2026-10-19+18%3A31%3A42&filter%5Bupdated_at%5D=%3C%3D+2026-10-01+18%3A31%3A42&search=dolores&sort=id" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 16,
    \"search\": \"sgrcgttbdmbwcpkzlurooxfk\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/products"
);

const params = {
    "per_page": "20",
    "page": "1",
    "filter[product_reference_id]": "voluptatibus",
    "filter[name]": "quis",
    "filter[zdhc_pid]": "15",
    "filter[status]": "PUBLISHED",
    "filter[formulator_reference_id]": "magni",
    "filter[formulator_name]": "ut",
    "filter[conformance_level_id]": "12",
    "filter[ctz_level_id]": "3",
    "filter[product_use_type_id]": "16",
    "filter[product_category_id]": "12",
    "filter[created_at]": "< 2026-10-19 18:31:42",
    "filter[updated_at]": "<= 2026-10-01 18:31:42",
    "search": "dolores",
    "sort": "id",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "per_page": 16,
    "search": "sgrcgttbdmbwcpkzlurooxfk"
};

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

Example response (200):


{
    "data": [
        {
            "product_reference_id": "20-SXJPDVFB8GSY-W",
            "name": "Alpha External Product",
            "formulator_reference_id": "01-6MTLUWSLLMXJ-L",
            "formulator_name": "Chemical Formulator Alpha",
            "classifications": [
                {
                    "use_type_name": "Softening agents",
                    "category_name": "Textile Finishing Assistants",
                    "substrate_name": "Textile"
                }
            ],
            "sds_url": "https://example.com/sds.pdf"
        },
        {
            "product_reference_id": "20-H8LFVZLRWCSJ-W",
            "name": "Alpha External Product",
            "formulator_reference_id": "01-WBAJXYRV7LNT-Z",
            "formulator_name": "Chemical Formulator Alpha",
            "classifications": [
                {
                    "use_type_name": "Softening agents",
                    "category_name": "Textile Finishing Assistants",
                    "substrate_name": "Textile"
                }
            ],
            "sds_url": "https://example.com/sds.pdf"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/certification-bodies/v1/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[product_reference_id]   string  optional    

Filter column product_reference_id by any accepted value. Filter by product reference ID Example: voluptatibus

filter[name]   string  optional    

Filter column name by any accepted value. Filter by product name Example: quis

filter[zdhc_pid]   integer  optional    

Filter column zdhc_pid by any accepted value. Filter by ZDHC PID Example: 15

filter[status]   string  optional    

Filter column status by any accepted value. Filter by publication status (maps to publication_status) Example: PUBLISHED

Must be one of:
  • PUBLISHED
  • UNPUBLISHED
filter[formulator_reference_id]   string  optional    

Filter column formulator_reference_id by any accepted value. Filter by formulator reference ID Example: magni

filter[formulator_name]   string  optional    

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

filter[conformance_level_id]   integer  optional    

Filter column conformance_level_id by any accepted value. Filter by conformance level IDs Example: 12

filter[ctz_level_id]   integer  optional    

Filter column ctz_level_id by any accepted value. Filter by CTZ level IDs Example: 3

filter[product_use_type_id]   integer  optional    

Filter column product_use_type_id by any accepted value. Filter by use type ID (multiple selection allowed) Example: 16

filter[product_category_id]   integer  optional    

Filter column product_category_id by any accepted value. Filter by product category ID (multiple selection allowed) Example: 12

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: < 2026-10-19 18:31:42

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: <= 2026-10-01 18:31:42

search   string  optional    

Search in all of these columns: product_reference_id, name, alternate_names, zdhc_pid, formulator_reference_id, formulator_name. Filter type: like. Minimum length: 3. Example: dolores

sort   string  optional    

sort by any accepted column: id, product_reference_id, name, version, status, zdhc_pid, conformance_level_name, ctz_level_name, formulator_reference_id, formulator_name, created_at, updated_at. prefix a "-" before the column name to sort in descending order Example: id

Body Parameters

per_page   integer  optional    

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

search   string  optional    

Must be at least 3 characters. Example: sgrcgttbdmbwcpkzlurooxfk

filter   string  optional    
product_reference_id   string  optional    

Example: aliquam

name   string  optional    

Example: incidunt

zdhc_pid   integer  optional    

Example: 18

status   string  optional    
formulator_reference_id   string  optional    

Example: qui

formulator_name   string  optional    

Example: dignissimos

conformance_level_id   string  optional    

Example: dolores

ctz_level_id   string  optional    

Example: provident

product_use_type_id   string  optional    

Example: iure

product_category_id   string  optional    

Example: qui

created_at   string  optional    

Example: quis

updated_at   string  optional    

Example: cupiditate

sort   string  optional    

Show a chemical product

requires authentication

Returns one chemical product.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/products/20-Z3X9V2N-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/certification-bodies/v1/products/20-Z3X9V2N-1"
);

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


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

Example response (200):


{
    "data": {
        "product_reference_id": "20-7VLS8PDKK98N-U",
        "name": "Alpha External Product",
        "formulator_reference_id": "01-VCLCFEN6LPZ7-N",
        "formulator_name": "Chemical Formulator Alpha",
        "classifications": [
            {
                "use_type_name": "Softening agents",
                "category_name": "Textile Finishing Assistants",
                "substrate_name": "Textile"
            }
        ],
        "sds_url": "https://example.com/sds.pdf"
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (404):


Resource not found.
 

Request      

GET api/certification-bodies/v1/products/{product_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

product_reference_id   string     

Reference ID of the chemical product. Example: 20-Z3X9V2N-1

Safety Data Sheets

Upload a safety data sheet

requires authentication

Uploads a safety data sheet PDF for a chemical product on behalf of the authenticated certification body.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/sds" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "product_reference_id=20-BQRQSGLL7UKR-H"\
    --form "file=@/tmp/phpbKncmm" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/sds"
);

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

const body = new FormData();
body.append('product_reference_id', '20-BQRQSGLL7UKR-H');
body.append('file', document.querySelector('input[name="file"]').files[0]);

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

Example response (200):


{
    "data": {
        "sds_id": 1042,
        "product_reference_id": "20-MG629WGL9Q2J-C",
        "sds_url": "https://cdn.example.com/sds/cb-1042.pdf",
        "uploaded_at": "2026-06-10T09:00:00.000000Z"
    }
}
 

Example response (201):


Safety data sheet uploaded successfully.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (404):


Product not found.
 

Example response (422):


Validation error
 

Request      

POST api/certification-bodies/v1/sds

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

Body Parameters

product_reference_id   string     

Reference ID of the chemical product. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-BQRQSGLL7UKR-H

file   file     

Safety data sheet PDF file. Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpbKncmm

Download a safety data sheet

requires authentication

Downloads a safety data sheet for a chemical product.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/certification-bodies/v1/sds/1042" \
    --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/certification-bodies/v1/sds/1042"
);

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):


file
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types ZDHC MRSL Certification Bodies
 

Example response (403):


User does not have required permission.
 

Example response (404):


Resource not found.
 

Request      

GET api/certification-bodies/v1/sds/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

Safety data sheet ID. Example: 1042

Chemical

Chemcheck Report

Show

requires authentication

Show the chemcheck report as a pdf

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/chemcheck-report" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/chemcheck-report"
);

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


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

Example response (200):


content of the pdf
 

Request      

GET api/organisation/{organisation_id}/chemical/product/{product_id}/chemcheck-report

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

product_id   integer     

The ID of the product. Example: 1

Chemcheck Summary Report

Show

requires authentication

Show the ChemCheck Summary report as a PDF.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/chemcheck-summary-report/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"product_ids\": [
        1,
        2
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/chemcheck-summary-report/1"
);

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

let body = {
    "product_ids": [
        1,
        2
    ]
};

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

Example response (200):


content of the pdf
 

Request      

POST api/organisation/{organisation_id}/chemical/chemcheck-summary-report/{subject_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

Body Parameters

product_ids   integer[]     

IDs of published products belonging to the subject organisation to include in the report.

Activity logs

Index

requires authentication

List available activity logs for chemical actions

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/activity-logs?sort=context-%3Eproduct_id&filter%5Bproduct_id%5D=2&filter%5Bproduct_reference_id%5D=nobis&filter%5Bmrsl_standard_name%5D=autem&filter%5Bmrsl_standard_reference_id%5D=pariatur&filter%5Bctz_level_name%5D=perferendis&filter%5Baction_type%5D=veniam&filter%5Buser_name%5D=nemo&filter%5Bcreated_at%5D=quibusdam&column=context-%3Eproduct_id&search=omnis&page=1&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/organisation/1/chemical/product/activity-logs"
);

const params = {
    "sort": "context->product_id",
    "filter[product_id]": "2",
    "filter[product_reference_id]": "nobis",
    "filter[mrsl_standard_name]": "autem",
    "filter[mrsl_standard_reference_id]": "pariatur",
    "filter[ctz_level_name]": "perferendis",
    "filter[action_type]": "veniam",
    "filter[user_name]": "nemo",
    "filter[created_at]": "quibusdam",
    "column": "context->product_id",
    "search": "omnis",
    "page": "1",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/chemical/product/activity-logs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

sort   string  optional    

sort by any accepted column: context->product_id, context->product_name, context->mrsl_standard_name, context->ctz_level_name, context->action_type, context->user_name, context->organisation_id, message, created_at. prefix a "-" before the column name to sort in descending order Example: context->product_id

filter[product_id]   integer  optional    

Filter column product_id by any accepted value. Filter by product ID Example: 2

filter[product_reference_id]   string  optional    

Filter column product_reference_id by any accepted value. Filter by product reference ID Example: nobis

filter[mrsl_standard_name]   string  optional    

Filter column mrsl_standard_name by any accepted value. Filter by MRSL standard name Example: autem

filter[mrsl_standard_reference_id]   string  optional    

Filter column mrsl_standard_reference_id by any accepted value. Filter by MRSL standard reference ID Example: pariatur

filter[ctz_level_name]   string  optional    

Filter column ctz_level_name by any accepted value. Filter by CTZ level name Example: perferendis

filter[action_type]   string  optional    

Filter column action_type by any accepted value. Filter by action type Example: veniam

filter[user_name]   string  optional    

Filter column user_name by any accepted value. Filter by user name Example: nemo

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: quibusdam

column   string  optional    

get a distinct list of filterable values for any of the columns: context->product_id, context->product_reference_id, context->product_name, context->mrsl_standard_name, context->mrsl_standard_reference_id, context->ctz_level_name, context->action_type, context->user_name, context->organisation_id, message, created_at. Example: context->product_id

search   string  optional    

Search in all of these columns: message. Filter type: like. Example: omnis

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Inventory

Bulk Store

requires authentication

Create or update one or more chemical inventories and their products in a single request.

Inventories can only be submitted or modified within 45 days after the end of the reporting month. The submission window closes at the end of that period (the last eligible day is 45 days after the month ends).

For example, for April 2026 (reporting month ending 30 April 2026), the window closes on 14 June 2026. Requests for a reporting period after this date are rejected.

When the window has closed, the API responds with 422 Unprocessable Entity and a message such as: The deadline for submitting or modifying inventory for April 2026 has passed. Solution providers should surface this error to suppliers so they understand that resubmission is no longer possible for that period.

Inventories for a future reporting month are also rejected with 422 (The inventory date cannot be in the future.).

If a supplier takes no action on a submitted inventory within 45 days, the Performance InCheck is automatically published without requiring explicit supplier approval. This affects how solution providers should design polling and notification logic around submitted inventories awaiting supplier review.

Solution providers do not need to implement custom timeouts or trigger publish themselves — the platform runs a daily job that auto-publishes eligible inventories. Monitor inventory status via the API instead of enforcing your own deadline.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/bulk/store" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inventories\": [
        {
            \"year\": 22,
            \"month\": 1,
            \"submit\": true,
            \"type\": \"usage\",
            \"products\": [
                {
                    \"chemical_product_id\": 1,
                    \"formulator_name\": \"ci\",
                    \"name\": \"eius\",
                    \"weight\": 65
                }
            ]
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/bulk/store"
);

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

let body = {
    "inventories": [
        {
            "year": 22,
            "month": 1,
            "submit": true,
            "type": "usage",
            "products": [
                {
                    "chemical_product_id": 1,
                    "formulator_name": "ci",
                    "name": "eius",
                    "weight": 65
                }
            ]
        }
    ]
};

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

Request      

POST api/organisation/{organisation_reference_id}/chemical/inventory/bulk/store

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Body Parameters

inventories   object[]     
year   integer     

Must be at least 2000. Must not be greater than 2100. Example: 22

month   integer     

Must be at least 1. Must not be greater than 12. Example: 1

submit   boolean  optional    

Example: true

type   string  optional    

Example: usage

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

This field is required when inventories..products..name or inventories..products..formulator_name is not present. The id of an existing record in the chemical_products table. Example: 1

formulator_name   string  optional    

This field is required when inventories..products..chemical_product_id is not present. Must not be greater than 255 characters. Example: ci

name   string  optional    

This field is required when inventories..products..chemical_product_id is not present. Example: eius

weight   number     

Must be at least 0. Example: 65

Index

requires authentication

Show chemical inventories

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory?per_page=17&filter%5Bsupplier_id%5D=1&filter%5Byear%5D=6&filter%5Bmonth%5D=14&filter%5Bstatus%5D=eius&filter%5Breference_id%5D=autem&filter%5Btype%5D=voluptates&sort=year&column=supplier_chemical_inventories.period&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/organisation/1/chemical/inventory"
);

const params = {
    "per_page": "17",
    "filter[supplier_id]": "1",
    "filter[year]": "6",
    "filter[month]": "14",
    "filter[status]": "eius",
    "filter[reference_id]": "autem",
    "filter[type]": "voluptates",
    "sort": "year",
    "column": "supplier_chemical_inventories.period",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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


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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "reference_id": "40-6EHWBWQ3XAMX-Q",
            "legacy_incheck_external_id": "CPXAG2MK-08062020",
            "submitting_user_id": null,
            "submitting_organisation_id": 20570,
            "supplier_id": 16596,
            "period": "2019-05-01T00:00:00.000000Z",
            "type": "unspecified",
            "status": "published",
            "auto_published": 0,
            "published_at": "2020-08-06T00:00:00.000000Z",
            "submitted_at": "2020-08-06T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2026-08-08T13:13:33.000000Z",
            "updated_at": "2026-08-10T05:11:37.000000Z",
            "expected_expiration": "2020-09-20T23:59:59.999999Z",
            "publishable": true,
            "published_inventory": {
                "id": 1,
                "level": null
            },
            "organisation": {
                "id": 16596,
                "maxio_customer_id": 447899,
                "reference_id": "01-HLM7FAP86PKR-I",
                "pdc_id": null,
                "gateway_aid": "A419RY42",
                "uuid": "51c0246d-32e9-44b6-934e-c87c40b0f469",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Combined Fabrics Ltd",
                "legal_name": "Combined Fabrics Ltd",
                "address_1": "Atta Buksh Road (off Bank Stop) 17 KM Ferozpur Road Lahore",
                "address_2": null,
                "city": "Lahore",
                "state": "Punjab",
                "location": "PK",
                "zip": "54760",
                "phone": "009242111266246",
                "email": "raja.naukhaiz@combinedfabrics.com",
                "contact_first_name": "Waleed Yousaf",
                "contact_last_name": "Butt",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://www.combinedfabrics.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2018-05-08T06:00:48.000000Z",
                "updated_at": "2026-08-11T15:37:47.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Pakistan"
            },
            "submitting_organisation": {
                "id": 20570,
                "maxio_customer_id": null,
                "reference_id": "01-9ZRDNB84XUEL-B",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9fab8781-d825-42fe-b3e6-12654811f7a3",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Invited company",
                "legal_name": "Invited company",
                "address_1": "Invited street 1",
                "address_2": "Invited street 2",
                "city": "Invited city",
                "state": "Invited state",
                "location": "US",
                "zip": "12345",
                "phone": "+1234567890",
                "email": "invited@localhost",
                "contact_first_name": "Invited",
                "contact_last_name": "Organisation",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://invited.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2012-05-07 06:57:13",
                "created_at": "2026-08-11T14:22:44.000000Z",
                "updated_at": "2026-08-12T11:27:48.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": 33050,
                "location_name": "United States",
                "in_check_visibility": null
            }
        },
        {
            "id": 1,
            "reference_id": "40-6EHWBWQ3XAMX-Q",
            "legacy_incheck_external_id": "CPXAG2MK-08062020",
            "submitting_user_id": null,
            "submitting_organisation_id": 20570,
            "supplier_id": 16596,
            "period": "2019-05-01T00:00:00.000000Z",
            "type": "unspecified",
            "status": "published",
            "auto_published": 0,
            "published_at": "2020-08-06T00:00:00.000000Z",
            "submitted_at": "2020-08-06T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2026-08-08T13:13:33.000000Z",
            "updated_at": "2026-08-10T05:11:37.000000Z",
            "expected_expiration": "2020-09-20T23:59:59.999999Z",
            "publishable": true,
            "published_inventory": {
                "id": 1,
                "level": null
            },
            "organisation": {
                "id": 16596,
                "maxio_customer_id": 447899,
                "reference_id": "01-HLM7FAP86PKR-I",
                "pdc_id": null,
                "gateway_aid": "A419RY42",
                "uuid": "51c0246d-32e9-44b6-934e-c87c40b0f469",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Combined Fabrics Ltd",
                "legal_name": "Combined Fabrics Ltd",
                "address_1": "Atta Buksh Road (off Bank Stop) 17 KM Ferozpur Road Lahore",
                "address_2": null,
                "city": "Lahore",
                "state": "Punjab",
                "location": "PK",
                "zip": "54760",
                "phone": "009242111266246",
                "email": "raja.naukhaiz@combinedfabrics.com",
                "contact_first_name": "Waleed Yousaf",
                "contact_last_name": "Butt",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://www.combinedfabrics.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2018-05-08T06:00:48.000000Z",
                "updated_at": "2026-08-11T15:37:47.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Pakistan"
            },
            "submitting_organisation": {
                "id": 20570,
                "maxio_customer_id": null,
                "reference_id": "01-9ZRDNB84XUEL-B",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9fab8781-d825-42fe-b3e6-12654811f7a3",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Invited company",
                "legal_name": "Invited company",
                "address_1": "Invited street 1",
                "address_2": "Invited street 2",
                "city": "Invited city",
                "state": "Invited state",
                "location": "US",
                "zip": "12345",
                "phone": "+1234567890",
                "email": "invited@localhost",
                "contact_first_name": "Invited",
                "contact_last_name": "Organisation",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://invited.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2012-05-07 06:57:13",
                "created_at": "2026-08-11T14:22:44.000000Z",
                "updated_at": "2026-08-12T11:27:48.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": 33050,
                "location_name": "United States",
                "in_check_visibility": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/inventory

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Query Parameters

per_page   integer  optional    

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

filter[supplier_id]   integer  optional    

Filter column supplier_id by any accepted value. Matches part of the value. Example: 1

filter[year]   integer  optional    

Filter column year by any accepted value. Matches part of the value. Example: 6

filter[month]   integer  optional    

Filter column month by any accepted value. Matches part of the value. Example: 14

filter[status]   string  optional    

Filter column status by any accepted value. Matches part of the value. Example: eius

filter[reference_id]   string  optional    

Filter column reference_id by any accepted value. Matches part of the value. Example: autem

filter[submitting_organisation.name]   string  optional    

Filter column submitting_organisation.name by any accepted value. Matches part of the value. Example: doloribus

filter[submitting_organisation.id]   string  optional    

Filter column submitting_organisation.id by any accepted value. Matches part of the value. Example: id

filter[organisations.name]   string  optional    

Filter column organisations.name by any accepted value. Matches part of the value. Example: non

filter[organisations.reference_id]   string  optional    

Filter column organisations.reference_id by any accepted value. Matches part of the value. Example: a

filter[incheck_levels.name]   string  optional    

Filter column incheck_levels.name by any accepted value. Matches part of the value. Example: est

filter[type]   string  optional    

Filter column type by any accepted value. Matches part of the value. Example: voluptates

sort   string  optional    

sort by any accepted column: year, month, status, type, reference_id, submitting_organisation_name, incheck_level_name, products_count, organisations.name, organisations.reference_id. prefix a "-" before the column name to sort in descending order Example: year

column   string  optional    

get a distinct list of filterable values for any of the columns: supplier_chemical_inventories.period, supplier_chemical_inventories.reference_id, supplier_chemical_inventories.status, supplier_chemical_inventories.type, submitting_organisation.name, organisations.name, organisations.reference_id, incheck_levels.name. Example: supplier_chemical_inventories.period

page   integer  optional    

the page number to show. Example: 1

Destroy

requires authentication

Delete a chemical inventory

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/voluptates" \
    --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/organisation/1/chemical/inventory/voluptates"
);

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


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

Request      

DELETE api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: voluptates

Decline

requires authentication

Decline a chemical inventory

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/saepe/decline" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"Data inaccuracy detected\",
    \"additional_info\": \"ut\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/saepe/decline"
);

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

let body = {
    "reason": "Data inaccuracy detected",
    "additional_info": "ut"
};

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

Request      

POST api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/decline

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: saepe

Body Parameters

reason   string     

Example: Data inaccuracy detected

Must be one of:
  • Data inaccuracy detected
  • Incomplete product information
  • Non-compliance with MRSL requirements
  • Missing supporting documentation
  • Duplicate submission
  • Out of reporting period scope
  • Other (please specify below)
additional_info   string  optional    

Example: ut

Publish

requires authentication

Publish a chemical inventory. Only one report can be published per month. Higher-level reports can upgrade (replace) lower-level published reports.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/repudiandae/publish" \
    --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/organisation/1/chemical/inventory/repudiandae/publish"
);

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


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

Request      

POST api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/publish

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: repudiandae

Inventory Product

Index

requires authentication

List all products of a given inventory

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/aliquid/product?per_page=16&search=fugiat&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/organisation/1/chemical/inventory/aliquid/product"
);

const params = {
    "per_page": "16",
    "search": "fugiat",
    "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": [
        {
            "inventory_product_id": 209254,
            "product_reference_id": "20-HJSX9X2QCP2X-V",
            "pid": "P738WC76",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "formulator_name": "Super Glanz spa Unipersonale",
            "weight": 41.5,
            "inventory_product_kind": "published",
            "mrslState": {
                "product_name": "APPRETTO ACR/EF [P738WC76]",
                "mrsl_status": "active",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null,
                "ctz_status": null,
                "valid_until": "2026-12-31T00:00:00.000000Z",
                "expired_at": null,
                "created_at": "2025-11-01T00:00:00.000000Z",
                "updated_at": "2025-12-10T00:00:00.000000Z"
            },
            "organisation_reference_id": "01-7QKNFBYR9HMZ-R",
            "original_product": {
                "reference_id": "1234567890",
                "name": "APPRETTO ACR/EF [P738WC76]",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null
            }
        },
        {
            "inventory_product_id": 209254,
            "product_reference_id": "20-F6C96HZ2MSBR-Q",
            "pid": "P738WC76",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "formulator_name": "Super Glanz spa Unipersonale",
            "weight": 41.5,
            "inventory_product_kind": "published",
            "mrslState": {
                "product_name": "APPRETTO ACR/EF [P738WC76]",
                "mrsl_status": "active",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null,
                "ctz_status": null,
                "valid_until": "2026-12-31T00:00:00.000000Z",
                "expired_at": null,
                "created_at": "2025-11-01T00:00:00.000000Z",
                "updated_at": "2025-12-10T00:00:00.000000Z"
            },
            "organisation_reference_id": "01-7QKNFBYR9HMZ-R",
            "original_product": {
                "reference_id": "1234567890",
                "name": "APPRETTO ACR/EF [P738WC76]",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/product

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: aliquid

Query Parameters

per_page   integer  optional    

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

search   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Store

requires authentication

Store a custom product

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/quia/product" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"chemical_product_id\": 14,
    \"formulator_name\": \"lhyvwjtoeuymyk\",
    \"name\": \"omnis\",
    \"weight\": 51
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/quia/product"
);

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

let body = {
    "chemical_product_id": 14,
    "formulator_name": "lhyvwjtoeuymyk",
    "name": "omnis",
    "weight": 51
};

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

Request      

POST api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/product

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: quia

Body Parameters

chemical_product_id   integer  optional    

Catalogue product ID. Must reference a product with at least one MRSL certification (active or expired). Never-certified products are not bindable. Mutually exclusive with name / formulator_name. This field is required when name or formulator_name is not present. The id of an existing record in the chemical_products table. Example: 14

formulator_name   string  optional    

This field is required when chemical_product_id is not present. Must not be greater than 255 characters. Example: lhyvwjtoeuymyk

name   string  optional    

This field is required when chemical_product_id is not present. Example: omnis

weight   number     

Numeric weight. Must be zero or greater, with at most 2 decimal places (e.g. 1.5, 10, 0.25). Must be at least 0. Example: 51

Update

requires authentication

Update a custom product

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/error/product/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"chemical_product_id\": 16,
    \"formulator_name\": \"ittvmnxtczbhtyemydw\",
    \"name\": \"eius\",
    \"weight\": 87
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/error/product/1"
);

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

let body = {
    "chemical_product_id": 16,
    "formulator_name": "ittvmnxtczbhtyemydw",
    "name": "eius",
    "weight": 87
};

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

Request      

PUT api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/product/{id}

PATCH api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/product/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: error

id   integer     

The ID of the product. Example: 1

Body Parameters

chemical_product_id   integer  optional    

Catalogue product ID. Must reference a product with at least one MRSL certification (active or expired). Never-certified products are not bindable. Mutually exclusive with name / formulator_name. This field is required when name or formulator_name is not present. The id of an existing record in the chemical_products table. Example: 16

formulator_name   string  optional    

This field is required when chemical_product_id is not present. Must not be greater than 255 characters. Example: ittvmnxtczbhtyemydw

name   string  optional    

This field is required when chemical_product_id is not present. Example: eius

weight   number     

Numeric weight. Must be zero or greater, with at most 2 decimal places (e.g. 1.5, 10, 0.25). Must be at least 0. Example: 87

Destroy

requires authentication

Destroy a custom product

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/dicta/product/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/organisation/1/chemical/inventory/dicta/product/1"
);

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


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

Request      

DELETE api/organisation/{organisation_reference_id}/chemical/inventory/{chemical_inventory_reference_id}/product/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: dicta

id   integer     

The ID of the product. Example: 1

Product

Index

requires authentication

Get Products

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product?per_page=3&filter[name]=zypgffkbifksgqnkclzcmzhthmb&search=aut&page=1&filter%5Bconformance_level_id%5D=13&filter%5Bctz_level_id%5D=16&sort=chemical_products.id&column=chemical_products.id" \
    --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/organisation/1/chemical/product"
);

const params = {
    "per_page": "3",
    "filter[name]": "zypgffkbifksgqnkclzcmzhthmb",
    "search": "aut",
    "page": "1",
    "filter[conformance_level_id]": "13",
    "filter[ctz_level_id]": "16",
    "sort": "chemical_products.id",
    "column": "chemical_products.id",
};
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,
            "reference_id": "20-6AY3YHAWYTWX-J",
            "organisation_id": 5938,
            "zdhc_pid": "P883AO62",
            "name": "NICCA SUNSOLT 1200",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "conformance_level_id": 1,
            "ctz_level_id": 1,
            "status": "ACCEPTED",
            "publication_status": "UNPUBLISHED",
            "sds_url": null,
            "website_url": null,
            "qr_code_path": null,
            "qr_target_url": null,
            "created_at": "2017-10-06T00:00:00.000000Z",
            "updated_at": "2026-09-03T21:14:14.000000Z",
            "deleted_at": null,
            "technical_data_sheet_url": "",
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "score": 10,
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            }
        },
        {
            "id": 1,
            "reference_id": "20-6AY3YHAWYTWX-J",
            "organisation_id": 5938,
            "zdhc_pid": "P883AO62",
            "name": "NICCA SUNSOLT 1200",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "conformance_level_id": 1,
            "ctz_level_id": 1,
            "status": "ACCEPTED",
            "publication_status": "UNPUBLISHED",
            "sds_url": null,
            "website_url": null,
            "qr_code_path": null,
            "qr_target_url": null,
            "created_at": "2017-10-06T00:00:00.000000Z",
            "updated_at": "2026-09-03T21:14:14.000000Z",
            "deleted_at": null,
            "technical_data_sheet_url": "",
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "score": 10,
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            }
        }
    ]
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Query Parameters

per_page   integer  optional    

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

filter   object  optional    
filter.name   string  optional    

Must be at least 4 characters. Example: zypgffkbifksgqnkclzcmzhthmb

search   string  optional    

Search in all of these columns: chemical_products.name, chemical_products.reference_id, chemical_products.alternate_names, chemical_products.zdhc_pid, organisations.reference_id, organisations.name. Filter type: like. Example: aut

page   integer  optional    

the page number to show. Example: 1

filter[chemical_products.name]   string  optional    

Filter column chemical_products.name by any accepted value. Filter by name Example: quibusdam

filter[chemical_products.zdhc_pid]   integer  optional    

Filter column chemical_products.zdhc_pid by any accepted value. Filter by ZDHC PID Example: 17

filter[chemical_products.status]   string  optional    

Filter column chemical_products.status by any accepted value. Filter by status Example: est

filter[chemical_products.publication_status]   string  optional    

Filter column chemical_products.publication_status by any accepted value. Filter by publication status Example: velit

filter[conformance_level_id]   integer  optional    

Filter column conformance_level_id by any accepted value. Filter by conformance level IDs (MRSL level) Example: 13

filter[ctz_level_id]   integer  optional    

Filter column ctz_level_id by any accepted value. Filter by CTZ level IDs Example: 16

filter[chemical_products.created_at]   datetime  optional    

Filter column chemical_products.created_at by any accepted value. Filter by created date Example: ratione

filter[chemical_products.updated_at]   datetime  optional    

Filter column chemical_products.updated_at by any accepted value. Filter by updated date Example: officia

filter[product_use_types.id]   integer  optional    

Filter column product_use_types.id by any accepted value. Filter by use type ID (multiple selection allowed) Example: 6

filter[product_categories.id]   integer  optional    

Filter column product_categories.id by any accepted value. Filter by use type category ID (multiple selection allowed) Example: 1

filter[product_substrates.id]   integer  optional    

Filter column product_substrates.id by any accepted value. Filter by substrate ID (multiple selection allowed) Example: 18

filter[organisations.reference_id]   string  optional    

Filter column organisations.reference_id by any accepted value. Filter by organisation reference ID Example: qui

filter[organisations.name]   string  optional    

Filter column organisations.name by any accepted value. Filter by organisation name Example: corporis

sort   string  optional    

sort by any accepted column: chemical_products.id, chemical_products.name, chemical_products.version, chemical_products.status, chemical_products.publication_status, chemical_products.zdhc_pid, conformance_level_name, ctz_level_name, organisation_reference_id, organisation_name, chemical_products.created_at, chemical_products.updated_at. prefix a "-" before the column name to sort in descending order Example: chemical_products.id

column   string  optional    

get a distinct list of filterable values for any of the columns: chemical_products.id, chemical_products.name, chemical_products.version, chemical_products.status, chemical_products.publication_status, ctz_level_name, conformance_level_name, organisation_reference_id, organisation_name, chemical_products.created_at, chemical_products.updated_at. Example: chemical_products.id

Export products as CSV

requires authentication

Export the product portfolio as CSV (unpaginated, one row per product). Uses the same filters as the product index (MRSL level, classifications, substrate, etc.). Returns an error response when no products match the applied filters.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/export?per_page=82&filter[name]=wqmulbpyjs&search=provident&filter%5Bconformance_level_id%5D=4&filter%5Bctz_level_id%5D=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/organisation/1/chemical/product/export"
);

const params = {
    "per_page": "82",
    "filter[name]": "wqmulbpyjs",
    "search": "provident",
    "filter[conformance_level_id]": "4",
    "filter[ctz_level_id]": "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):


file
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/export

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Query Parameters

per_page   integer  optional    

Number of items per page. Must be at least 1. Example: 82

filter   object  optional    
filter.name   string  optional    

Must be at least 4 characters. Example: wqmulbpyjs

search   string  optional    

Search in all of these columns: chemical_products.name, chemical_products.reference_id, chemical_products.alternate_names, chemical_products.zdhc_pid, organisations.reference_id, organisations.name. Filter type: like. Example: provident

filter[chemical_products.name]   string  optional    

Filter column chemical_products.name by any accepted value. Filter by name Example: occaecati

filter[chemical_products.zdhc_pid]   integer  optional    

Filter column chemical_products.zdhc_pid by any accepted value. Filter by ZDHC PID Example: 8

filter[chemical_products.status]   string  optional    

Filter column chemical_products.status by any accepted value. Filter by status Example: voluptatum

filter[chemical_products.publication_status]   string  optional    

Filter column chemical_products.publication_status by any accepted value. Filter by publication status Example: aut

filter[conformance_level_id]   integer  optional    

Filter column conformance_level_id by any accepted value. Filter by conformance level IDs (MRSL level) Example: 4

filter[ctz_level_id]   integer  optional    

Filter column ctz_level_id by any accepted value. Filter by CTZ level IDs Example: 9

filter[chemical_products.created_at]   datetime  optional    

Filter column chemical_products.created_at by any accepted value. Filter by created date Example: autem

filter[chemical_products.updated_at]   datetime  optional    

Filter column chemical_products.updated_at by any accepted value. Filter by updated date Example: expedita

filter[product_use_types.id]   integer  optional    

Filter column product_use_types.id by any accepted value. Filter by use type ID (multiple selection allowed) Example: 18

filter[product_categories.id]   integer  optional    

Filter column product_categories.id by any accepted value. Filter by use type category ID (multiple selection allowed) Example: 15

filter[product_substrates.id]   integer  optional    

Filter column product_substrates.id by any accepted value. Filter by substrate ID (multiple selection allowed) Example: 10

filter[organisations.reference_id]   string  optional    

Filter column organisations.reference_id by any accepted value. Filter by organisation reference ID Example: non

filter[organisations.name]   string  optional    

Filter column organisations.name by any accepted value. Filter by organisation name Example: autem

Search by name cached

requires authentication

Search all products by name cached

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/search-by-name-cached?per_page=11&filter[name]=mwrvtjopfqjsxotunab&search=gxmssanrebtbbchtxsltjzanutnbtettdgkrohsuiruruwyxfbtpxkqoxvnoszezdewyrzucgnuqah&filter%5Bname%5D=est&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/organisation/1/chemical/product/search-by-name-cached"
);

const params = {
    "per_page": "11",
    "filter[name]": "mwrvtjopfqjsxotunab",
    "search": "gxmssanrebtbbchtxsltjzanutnbtettdgkrohsuiruruwyxfbtpxkqoxvnoszezdewyrzucgnuqah",
    "filter[name]": "est",
    "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": [
        {
            "reference_id": "20-6AY3YHAWYTWX-J",
            "name": "NICCA SUNSOLT 1200"
        },
        {
            "reference_id": "20-6AY3YHAWYTWX-J",
            "name": "NICCA SUNSOLT 1200"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/search-by-name-cached

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Query Parameters

per_page   integer  optional    

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

filter   object  optional    
filter.name   string  optional    

Must be at least 4 characters. Example: mwrvtjopfqjsxotunab

search   string  optional    

Must be at least 3 characters. Example: gxmssanrebtbbchtxsltjzanutnbtettdgkrohsuiruruwyxfbtpxkqoxvnoszezdewyrzucgnuqah

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: est

page   integer  optional    

the page number to show. Example: 1

Destroy

requires authentication

Destroy a product

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/dolorem" \
    --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/organisation/1/chemical/product/dolorem"
);

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


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

Example response (200):


{
    "message": "Product deleted successfully."
}
 

Request      

DELETE api/organisation/{organisation_reference_id}/chemical/product/{reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

reference_id   string     

The ID of the reference. Example: dolorem

Download Safety Data Sheet (by id, product owner context)

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/safety-data-sheet/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/organisation/1/chemical/product/1/safety-data-sheet/1"
);

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):


file
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/{product_id}/safety-data-sheet/{safetyDataSheet_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_id   integer     

The ID of the product. Example: 1

safetyDataSheet_id   integer     

The ID of the safetyDataSheet. Example: 1

Download Technical Data Sheet

requires authentication

Download a technical data sheet

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/technical-data-sheet" \
    --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/organisation/1/chemical/product/1/technical-data-sheet"
);

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):


file
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/{product_id}/technical-data-sheet

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_id   integer     

The ID of the product. Example: 1

Product public profile

Download Public Safety Data Sheet

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/safety-data-sheet/public" \
    --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/organisation/1/chemical/product/1/safety-data-sheet/public"
);

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):


file
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/{product_id}/safety-data-sheet/public

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_id   integer     

The ID of the product. Example: 1

Public product profile

requires authentication

Get a public product profile

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/public-profile" \
    --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/organisation/1/chemical/product/1/public-profile"
);

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,
        "reference_id": "20-6AY3YHAWYTWX-J",
        "organisation": {
            "id": 5938,
            "reference_id": "01-B88N4SX6EREE-A",
            "type_id": 6,
            "name": "Nicca Chemical Co., Ltd.",
            "address_1": "4-23-1 Bunkyo",
            "address_2": null,
            "city": "Fukui",
            "state": "Fukui",
            "location": "JP",
            "zip": "910-8670",
            "phone": "+81-776-25-8646",
            "email": "zdhc@niccachemical.com",
            "website": "https://nctexchem.com",
            "avatar_url": null,
            "location_name": "Japan"
        },
        "name": "NICCA SUNSOLT 1200",
        "description": null,
        "alternate_names": null,
        "version": 1,
        "status": "ACCEPTED",
        "technical_data_sheet_url": "",
        "conformance_level": {
            "id": 1,
            "name": "Level 1",
            "created_at": "2026-08-11T13:39:53.000000Z",
            "updated_at": "2026-08-11T13:39:53.000000Z"
        },
        "ctz_level": {
            "id": 1,
            "name": "Foundational",
            "score": 10,
            "created_at": "2026-08-11T13:39:53.000000Z",
            "updated_at": "2026-08-27T13:46:25.000000Z"
        },
        "classifications": [
            {
                "id": 248161,
                "product_use_type": {
                    "id": 166,
                    "name": "Leveling Agents",
                    "is_inactive": 0,
                    "created_at": "2026-08-11T13:58:00.000000Z",
                    "updated_at": "2026-08-11T13:58:00.000000Z"
                },
                "product_category": {
                    "id": 66,
                    "name": "Textile Auxiliaries For Dyeing And Printing",
                    "is_inactive": 0,
                    "created_at": "2026-08-11T13:58:01.000000Z",
                    "updated_at": "2026-08-11T13:58:01.000000Z"
                },
                "product_substrate": {
                    "id": 6,
                    "name": "Textile",
                    "is_inactive": 0,
                    "created_at": "2026-08-11T13:58:01.000000Z",
                    "updated_at": "2026-08-11T13:58:01.000000Z"
                },
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z"
            }
        ],
        "sds_visibility": null,
        "sds_url": null,
        "website_url": null
    }
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/{product_id}/public-profile

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_id   integer     

The ID of the product. Example: 1

Download Public Technical Data Sheet

requires authentication

Download a public technical data sheet

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1/technical-data-sheet/public" \
    --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/organisation/1/chemical/product/1/technical-data-sheet/public"
);

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):


file
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product/{product_id}/technical-data-sheet/public

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_id   integer     

The ID of the product. Example: 1

Product Flag

Store

requires authentication

Flag a chemical product or certification

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/flag" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"relation_type\": \"CTZ_CERTIFICATION\",
    \"relation_id\": 14,
    \"note\": \"quod\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/flag"
);

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

let body = {
    "relation_type": "CTZ_CERTIFICATION",
    "relation_id": 14,
    "note": "quod"
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "relation_id": 6127,
        "note": "Testing",
        "user": {
            "id": 33052,
            "name": "Ashad Rahman",
            "reference_id": "02-N8VDXHZNGGZ3-J"
        },
        "created_at": "2026-08-20T15:02:21.000000Z",
        "updated_at": "2026-08-20T15:02:21.000000Z"
    }
}
 

Request      

POST api/organisation/{organisation_reference_id}/chemical/product/flag

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Body Parameters

relation_type   string     

Example: CTZ_CERTIFICATION

Must be one of:
  • CHEMICAL_PRODUCT
  • MRSL_CERTIFICATION
  • CTZ_CERTIFICATION
relation_id   integer     

Must be at least 1. Example: 14

note   string     

Example: quod

Product Assignment

Index

requires authentication

Get Product Assignments

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment?per_page=8&page=1&filter%5Bname%5D=autem&filter%5Breference_id%5D=aliquid&filter%5Bzdhc_pid%5D=4&filter%5Bstatus%5D=DRAFT&filter%5Bassignment_status%5D=UNDER_REVIEW&filter%5Borganisation_id%5D=16&filter%5Bmax_conformance_level_id%5D=8&filter%5Bmax_ctz_level_id%5D=2&filter%5Bcreated_at%5D=rerum&filter%5Bupdated_at%5D=unde&search=fugiat&sort=id&column=id" \
    --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/organisation/1/chemical/product-assignment"
);

const params = {
    "per_page": "8",
    "page": "1",
    "filter[name]": "autem",
    "filter[reference_id]": "aliquid",
    "filter[zdhc_pid]": "4",
    "filter[status]": "DRAFT",
    "filter[assignment_status]": "UNDER_REVIEW",
    "filter[organisation_id]": "16",
    "filter[max_conformance_level_id]": "8",
    "filter[max_ctz_level_id]": "2",
    "filter[created_at]": "rerum",
    "filter[updated_at]": "unde",
    "search": "fugiat",
    "sort": "id",
    "column": "id",
};
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,
            "reference_id": "20-6AY3YHAWYTWX-J",
            "organisation_id": 5938,
            "zdhc_pid": "P883AO62",
            "name": "NICCA SUNSOLT 1200",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "conformance_level_id": 1,
            "ctz_level_id": 1,
            "status": "ACCEPTED",
            "publication_status": "UNPUBLISHED",
            "sds_url": null,
            "website_url": null,
            "qr_code_path": null,
            "qr_target_url": null,
            "created_at": "2017-10-06T00:00:00.000000Z",
            "updated_at": "2026-09-03T21:14:14.000000Z",
            "deleted_at": null,
            "technical_data_sheet_url": "",
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "score": 10,
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            }
        },
        {
            "id": 1,
            "reference_id": "20-6AY3YHAWYTWX-J",
            "organisation_id": 5938,
            "zdhc_pid": "P883AO62",
            "name": "NICCA SUNSOLT 1200",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "conformance_level_id": 1,
            "ctz_level_id": 1,
            "status": "ACCEPTED",
            "publication_status": "UNPUBLISHED",
            "sds_url": null,
            "website_url": null,
            "qr_code_path": null,
            "qr_target_url": null,
            "created_at": "2017-10-06T00:00:00.000000Z",
            "updated_at": "2026-09-03T21:14:14.000000Z",
            "deleted_at": null,
            "technical_data_sheet_url": "",
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "score": 10,
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            }
        }
    ]
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product-assignment

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: autem

filter[reference_id]   string  optional    

Filter column reference_id by any accepted value. Filter by reference ID Example: aliquid

filter[zdhc_pid]   integer  optional    

Filter column zdhc_pid by any accepted value. Filter by ZDHC PID Example: 4

filter[status]   string  optional    

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

Must be one of:
  • DRAFT
  • UNDER_REVIEW
  • ACCEPTED
  • NOT_ACCEPTED
  • DELETED
filter[assignment_status]   string  optional    

Filter column assignment_status by any accepted value. Matches exact value. Example: UNDER_REVIEW

Must be one of:
  • UNDER_REVIEW
  • ACCEPTED
  • EXPIRED
  • DECLINED
filter[organisation_id]   integer  optional    

Filter column organisation_id by any accepted value. Filter by product organisation ID Example: 16

filter[max_conformance_level_id]   integer  optional    

Filter column max_conformance_level_id by any accepted value. Filter by max conformance level IDs from assignment Example: 8

filter[max_ctz_level_id]   integer  optional    

Filter column max_ctz_level_id by any accepted value. Filter by max CTZ level IDs from assignment Example: 2

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: rerum

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: unde

filter[product_use_types.id]   integer  optional    

Filter column product_use_types.id by any accepted value. Filter by use type ID (multiple selection allowed) Example: 1

filter[product_categories.id]   integer  optional    

Filter column product_categories.id by any accepted value. Filter by use type category ID (multiple selection allowed) Example: 12

search   string  optional    

Search in all of these columns: name, alternate_names, reference_id, zdhc_pid. Filter type: like. Example: fugiat

sort   string  optional    

sort by any accepted column: id, name, version, status, assignment_status, zdhc_pid, conformance_level_name, ctz_level_name, created_at, updated_at. prefix a "-" before the column name to sort in descending order Example: id

column   string  optional    

get a distinct list of filterable values for any of the columns: id, name, version, status, assignment_status, ctz_level_name, conformance_level_name, created_at, updated_at. Example: id

Show MRSL Certification

requires authentication

Show a product assignment MRSL certification

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/reiciendis/certification/delectus" \
    --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/organisation/1/chemical/product-assignment/reiciendis/certification/delectus"
);

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,
        "reference_id": "50-C3HREED7B284-C",
        "chemical_product_id": 228615,
        "certification_body_id": 8025,
        "safety_data_sheet_id": 149631,
        "mrsl_standard_id": 267,
        "status": "ACTIVE",
        "certificate_number": null,
        "certificate_issue_date": "2025-01-24T00:00:00.000000Z",
        "certificate_end_date": "2026-01-31T00:00:00.000000Z",
        "gateway_active_until": "2026-01-31T00:00:00.000000Z",
        "certificate_result": "Passed",
        "created_at": "2025-01-30T00:00:00.000000Z",
        "updated_at": "2025-01-30T00:00:00.000000Z",
        "removed_by_certification_body_at": null,
        "removed_by_product_decline_at": null,
        "ctz_certification": {
            "id": 340231,
            "chemical_product_id": 228615,
            "certification_body_id": 8025,
            "safety_data_sheet_id": 149631,
            "ctz_level_id": 4,
            "status": "ACTIVE",
            "product_mrsl_certification_id": 1,
            "created_at": "2025-02-04T00:00:00.000000Z",
            "updated_at": "2025-01-30T00:00:00.000000Z",
            "ctz_level": {
                "id": 4,
                "name": "Prov. Progressive",
                "score": 15,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            },
            "safety_data_sheet": {
                "id": 149631,
                "file_name": "MSDS YELLOW RNL 150%.pdf",
                "mime_type": "application/pdf",
                "file_size": "567856",
                "locale": "en",
                "version": 1,
                "chemical_product_id": 228615,
                "organisation_id": 6322,
                "created_at": "2019-06-20T08:55:18.000000Z",
                "updated_at": "2026-08-11T13:52:53.000000Z",
                "file_url": "",
                "chemical_product": {
                    "id": 228615,
                    "reference_id": "20-QJYG27AJ44HZ-T",
                    "organisation_id": 6322,
                    "zdhc_pid": "P397IA55",
                    "name": "REACTOBOND YELLOW RNL 150%",
                    "version": 1,
                    "description": null,
                    "alternate_names": null,
                    "conformance_level_id": 3,
                    "ctz_level_id": 4,
                    "status": "ACCEPTED",
                    "publication_status": "PUBLISHED",
                    "sds_url": null,
                    "website_url": null,
                    "qr_code_path": null,
                    "qr_target_url": null,
                    "created_at": "2019-06-20T00:00:00.000000Z",
                    "updated_at": "2026-08-11T13:40:12.000000Z",
                    "deleted_at": null,
                    "technical_data_sheet_url": ""
                }
            }
        },
        "mrsl_standard": {
            "id": 267,
            "reference_id": "30-2AFERNUJ42PE-Y",
            "name": "OEKO-TEX® Service GmbH ECO PASSPORT - Level 3",
            "version": "ZDHC MRSL v3.1",
            "conformance_level_id": 3,
            "start_date": "1900-01-01T00:00:00.000000Z",
            "end_date": "2198-08-31T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2026-08-11T13:40:01.000000Z",
            "updated_at": "2026-08-11T13:40:01.000000Z"
        },
        "safety_data_sheet": {
            "id": 149631,
            "file_name": "MSDS YELLOW RNL 150%.pdf",
            "mime_type": "application/pdf",
            "file_size": "567856",
            "locale": "en",
            "version": 1,
            "chemical_product_id": 228615,
            "organisation_id": 6322,
            "created_at": "2019-06-20T08:55:18.000000Z",
            "updated_at": "2026-08-11T13:52:53.000000Z",
            "file_url": "",
            "chemical_product": {
                "id": 228615,
                "reference_id": "20-QJYG27AJ44HZ-T",
                "organisation_id": 6322,
                "zdhc_pid": "P397IA55",
                "name": "REACTOBOND YELLOW RNL 150%",
                "version": 1,
                "description": null,
                "alternate_names": null,
                "conformance_level_id": 3,
                "ctz_level_id": 4,
                "status": "ACCEPTED",
                "publication_status": "PUBLISHED",
                "sds_url": null,
                "website_url": null,
                "qr_code_path": null,
                "qr_target_url": null,
                "created_at": "2019-06-20T00:00:00.000000Z",
                "updated_at": "2026-08-11T13:40:12.000000Z",
                "deleted_at": null,
                "technical_data_sheet_url": ""
            }
        },
        "certification_body": {
            "id": 8025,
            "maxio_customer_id": 435193,
            "reference_id": "01-QD8ADSLW7BBM-V",
            "pdc_id": null,
            "gateway_aid": "A713FG39",
            "uuid": "8c1a1bea-9761-467e-ba51-e34f9fb7bdd3",
            "type_id": 7,
            "status": "approved",
            "is_test": false,
            "name": "OEKO-TEX® Service GmbH",
            "legal_name": "OEKO-TEX® Service GmbH",
            "address_1": "Gutenbergstrasse 1, Zurich 8002 Switzerland",
            "address_2": null,
            "city": "Zurich",
            "state": "Zurich",
            "location": "CH",
            "zip": "8002",
            "phone": "+ 41 44 501 26 03",
            "email": "j.wehrli@oekotex.com",
            "contact_first_name": "Jonathan",
            "contact_last_name": "Wehrli",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2020-01-03T00:00:00.000000Z",
            "updated_at": "2026-08-11T15:37:36.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "Switzerland"
        }
    }
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product-assignment/{product_assignment_id}/certification/{product_mrsl_certification_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_assignment_id   string     

The ID of the product assignment. Example: reiciendis

product_mrsl_certification_id   string     

The ID of the product mrsl certification. Example: delectus

Download Bulk Certification Template

requires authentication

Download a CSV template pre-populated with the certification body's existing active certifications.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/bulk/template" \
    --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/organisation/1/chemical/product-assignment/bulk/template"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/product-assignment/bulk/template

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Bulk Process

requires authentication

Add or remove product assignment certifications from a delimited CSV file. Products that are not assigned to the certification body yet are assigned automatically. Previously declined assignments are undeclined when a certification is created.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/bulk" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "csv=@/tmp/phpblMnfo" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/bulk"
);

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

const body = new FormData();
body.append('csv', document.querySelector('input[name="csv"]').files[0]);

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

Example response (200, CSV rows were processed. Invalid rows appear under `errors` without affecting valid rows.):


{
    "message": "Product assignment certifications processed successfully",
    "data": {
        "submitted_count": 3,
        "created_count": 1,
        "created_ids": [
            101
        ],
        "removed_count": 1,
        "removed_ids": [
            "50-AAAAAAAAAAA1-X"
        ],
        "skipped_count": 1,
        "not_createable_count": 0,
        "errors": []
    }
}
 

Request      

POST api/organisation/{organisation_reference_id}/chemical/product-assignment/bulk

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

Body Parameters

csv   file     

Delimited CSV file using ; as delimiter, maximum file size 40960 KB (40 MB), and header: action, certificate_reference_id, product_reference_id, product_name, formulator_name, certification_body_reference_id, standard_reference_id, ctz_level_id, certificate_number, certificate_result, certificate_issue_date, certificate_end_date, removal_reason. Must be a file. Must not be greater than 40960 kilobytes. Example: /tmp/phpblMnfo

rows   object     

Must have at least 1 items. Must not have more than 100000 items.

Create

requires authentication

Create a product assignment certification

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/esse/certification" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "certificate_number=1234567890"\
    --form "certificate_result=Pass"\
    --form "certificate_end_date=2026-01-01"\
    --form "certificate_issue_date=2026-01-01"\
    --form "mrsl_standard_id=1"\
    --form "ctz_level_id=1"\
    --form "safety_data_sheet_id=1"\
    --form "safety_data_sheet=@/tmp/phpiDmGlo" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/esse/certification"
);

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

const body = new FormData();
body.append('certificate_number', '1234567890');
body.append('certificate_result', 'Pass');
body.append('certificate_end_date', '2026-01-01');
body.append('certificate_issue_date', '2026-01-01');
body.append('mrsl_standard_id', '1');
body.append('ctz_level_id', '1');
body.append('safety_data_sheet_id', '1');
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);

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

Example response (200):


{
    "data": {
        "id": 1,
        "reference_id": "50-C3HREED7B284-C",
        "chemical_product_id": 228615,
        "certification_body_id": 8025,
        "safety_data_sheet_id": 149631,
        "mrsl_standard_id": 267,
        "status": "ACTIVE",
        "certificate_number": null,
        "certificate_issue_date": "2025-01-24T00:00:00.000000Z",
        "certificate_end_date": "2026-01-31T00:00:00.000000Z",
        "gateway_active_until": "2026-01-31T00:00:00.000000Z",
        "certificate_result": "Passed",
        "created_at": "2025-01-30T00:00:00.000000Z",
        "updated_at": "2025-01-30T00:00:00.000000Z",
        "removed_by_certification_body_at": null,
        "removed_by_product_decline_at": null,
        "ctz_certification": {
            "id": 340231,
            "chemical_product_id": 228615,
            "certification_body_id": 8025,
            "safety_data_sheet_id": 149631,
            "ctz_level_id": 4,
            "status": "ACTIVE",
            "product_mrsl_certification_id": 1,
            "created_at": "2025-02-04T00:00:00.000000Z",
            "updated_at": "2025-01-30T00:00:00.000000Z",
            "ctz_level": {
                "id": 4,
                "name": "Prov. Progressive",
                "score": 15,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            },
            "safety_data_sheet": {
                "id": 149631,
                "file_name": "MSDS YELLOW RNL 150%.pdf",
                "mime_type": "application/pdf",
                "file_size": "567856",
                "locale": "en",
                "version": 1,
                "chemical_product_id": 228615,
                "organisation_id": 6322,
                "created_at": "2019-06-20T08:55:18.000000Z",
                "updated_at": "2026-08-11T13:52:53.000000Z",
                "file_url": "",
                "chemical_product": {
                    "id": 228615,
                    "reference_id": "20-QJYG27AJ44HZ-T",
                    "organisation_id": 6322,
                    "zdhc_pid": "P397IA55",
                    "name": "REACTOBOND YELLOW RNL 150%",
                    "version": 1,
                    "description": null,
                    "alternate_names": null,
                    "conformance_level_id": 3,
                    "ctz_level_id": 4,
                    "status": "ACCEPTED",
                    "publication_status": "PUBLISHED",
                    "sds_url": null,
                    "website_url": null,
                    "qr_code_path": null,
                    "qr_target_url": null,
                    "created_at": "2019-06-20T00:00:00.000000Z",
                    "updated_at": "2026-08-11T13:40:12.000000Z",
                    "deleted_at": null,
                    "technical_data_sheet_url": ""
                }
            }
        },
        "mrsl_standard": {
            "id": 267,
            "reference_id": "30-2AFERNUJ42PE-Y",
            "name": "OEKO-TEX® Service GmbH ECO PASSPORT - Level 3",
            "version": "ZDHC MRSL v3.1",
            "conformance_level_id": 3,
            "start_date": "1900-01-01T00:00:00.000000Z",
            "end_date": "2198-08-31T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2026-08-11T13:40:01.000000Z",
            "updated_at": "2026-08-11T13:40:01.000000Z"
        },
        "safety_data_sheet": {
            "id": 149631,
            "file_name": "MSDS YELLOW RNL 150%.pdf",
            "mime_type": "application/pdf",
            "file_size": "567856",
            "locale": "en",
            "version": 1,
            "chemical_product_id": 228615,
            "organisation_id": 6322,
            "created_at": "2019-06-20T08:55:18.000000Z",
            "updated_at": "2026-08-11T13:52:53.000000Z",
            "file_url": "",
            "chemical_product": {
                "id": 228615,
                "reference_id": "20-QJYG27AJ44HZ-T",
                "organisation_id": 6322,
                "zdhc_pid": "P397IA55",
                "name": "REACTOBOND YELLOW RNL 150%",
                "version": 1,
                "description": null,
                "alternate_names": null,
                "conformance_level_id": 3,
                "ctz_level_id": 4,
                "status": "ACCEPTED",
                "publication_status": "PUBLISHED",
                "sds_url": null,
                "website_url": null,
                "qr_code_path": null,
                "qr_target_url": null,
                "created_at": "2019-06-20T00:00:00.000000Z",
                "updated_at": "2026-08-11T13:40:12.000000Z",
                "deleted_at": null,
                "technical_data_sheet_url": ""
            }
        },
        "certification_body": {
            "id": 8025,
            "maxio_customer_id": 435193,
            "reference_id": "01-QD8ADSLW7BBM-V",
            "pdc_id": null,
            "gateway_aid": "A713FG39",
            "uuid": "8c1a1bea-9761-467e-ba51-e34f9fb7bdd3",
            "type_id": 7,
            "status": "approved",
            "is_test": false,
            "name": "OEKO-TEX® Service GmbH",
            "legal_name": "OEKO-TEX® Service GmbH",
            "address_1": "Gutenbergstrasse 1, Zurich 8002 Switzerland",
            "address_2": null,
            "city": "Zurich",
            "state": "Zurich",
            "location": "CH",
            "zip": "8002",
            "phone": "+ 41 44 501 26 03",
            "email": "j.wehrli@oekotex.com",
            "contact_first_name": "Jonathan",
            "contact_last_name": "Wehrli",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2020-01-03T00:00:00.000000Z",
            "updated_at": "2026-08-11T15:37:36.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "Switzerland"
        }
    }
}
 

Request      

POST api/organisation/{organisation_reference_id}/chemical/product-assignment/{product_assignment_id}/certification

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_assignment_id   string     

The ID of the product assignment. Example: esse

Body Parameters

certificate_number   string  optional    

Optional certificate number (string, max 255 characters). Omit or leave empty to store null. Must not be greater than 255 characters. Example: 1234567890

certificate_result   string  optional    

Optional certificate result (string, max 255 characters). Omit or leave empty to store null. Must not be greater than 255 characters. Example: Pass

certificate_end_date   string  optional    

Optional certificate end date (date). Omit or leave empty to store null; gateway_active_until defaults to three years from now. Must be a valid date. Example: 2026-01-01

certificate_issue_date   string     

Certificate issue date (date). Must be a valid date. Example: 2026-01-01

mrsl_standard_id   integer     

MRSL standard ID (integer, must exist in the database and be assigned to the requesting certification body). Example: 1

ctz_level_id   integer     

CTZ level ID (integer, must exist in the database).

Allowed MRSL/CTZ combinations:

  • MRSL levels 1, 2, and 3 may all use CTZ level 1
  • MRSL level 1: CTZ level 1 only
  • MRSL level 2: CTZ levels 1 or 2
  • MRSL level 3: CTZ levels 1, 2, or 3

CTZ level ID 1 is always available to certification bodies; higher CTZ levels must be assigned to the requesting certification body. Example: 1

safety_data_sheet_id   integer     

Safety data sheet ID (integer, must exist for the product and not be deleted). Required when safety_data_sheet is not uploaded. The id of an existing record in the safety_data_sheets table. Example: 1

safety_data_sheet   file     

Safety data sheet file upload. Required when safety_data_sheet_id is not provided. Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpiDmGlo

Remove

requires authentication

Remove a product assignment certification

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/et/certification/molestiae/remove" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"QUALITY_ISSUE\",
    \"note\": \"Chemical product is no longer compliant with the certification body\'s requirements.\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/et/certification/molestiae/remove"
);

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

let body = {
    "reason": "QUALITY_ISSUE",
    "note": "Chemical product is no longer compliant with the certification body's requirements."
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "reference_id": "50-C3HREED7B284-C",
        "chemical_product_id": 228615,
        "certification_body_id": 8025,
        "safety_data_sheet_id": 149631,
        "mrsl_standard_id": 267,
        "status": "ACTIVE",
        "certificate_number": null,
        "certificate_issue_date": "2025-01-24T00:00:00.000000Z",
        "certificate_end_date": "2026-01-31T00:00:00.000000Z",
        "gateway_active_until": "2026-01-31T00:00:00.000000Z",
        "certificate_result": "Passed",
        "created_at": "2025-01-30T00:00:00.000000Z",
        "updated_at": "2025-01-30T00:00:00.000000Z",
        "removed_by_certification_body_at": null,
        "removed_by_product_decline_at": null,
        "ctz_certification": {
            "id": 340231,
            "chemical_product_id": 228615,
            "certification_body_id": 8025,
            "safety_data_sheet_id": 149631,
            "ctz_level_id": 4,
            "status": "ACTIVE",
            "product_mrsl_certification_id": 1,
            "created_at": "2025-02-04T00:00:00.000000Z",
            "updated_at": "2025-01-30T00:00:00.000000Z",
            "ctz_level": {
                "id": 4,
                "name": "Prov. Progressive",
                "score": 15,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            },
            "safety_data_sheet": {
                "id": 149631,
                "file_name": "MSDS YELLOW RNL 150%.pdf",
                "mime_type": "application/pdf",
                "file_size": "567856",
                "locale": "en",
                "version": 1,
                "chemical_product_id": 228615,
                "organisation_id": 6322,
                "created_at": "2019-06-20T08:55:18.000000Z",
                "updated_at": "2026-08-11T13:52:53.000000Z",
                "file_url": "",
                "chemical_product": {
                    "id": 228615,
                    "reference_id": "20-QJYG27AJ44HZ-T",
                    "organisation_id": 6322,
                    "zdhc_pid": "P397IA55",
                    "name": "REACTOBOND YELLOW RNL 150%",
                    "version": 1,
                    "description": null,
                    "alternate_names": null,
                    "conformance_level_id": 3,
                    "ctz_level_id": 4,
                    "status": "ACCEPTED",
                    "publication_status": "PUBLISHED",
                    "sds_url": null,
                    "website_url": null,
                    "qr_code_path": null,
                    "qr_target_url": null,
                    "created_at": "2019-06-20T00:00:00.000000Z",
                    "updated_at": "2026-08-11T13:40:12.000000Z",
                    "deleted_at": null,
                    "technical_data_sheet_url": ""
                }
            }
        },
        "mrsl_standard": {
            "id": 267,
            "reference_id": "30-2AFERNUJ42PE-Y",
            "name": "OEKO-TEX® Service GmbH ECO PASSPORT - Level 3",
            "version": "ZDHC MRSL v3.1",
            "conformance_level_id": 3,
            "start_date": "1900-01-01T00:00:00.000000Z",
            "end_date": "2198-08-31T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2026-08-11T13:40:01.000000Z",
            "updated_at": "2026-08-11T13:40:01.000000Z"
        },
        "safety_data_sheet": {
            "id": 149631,
            "file_name": "MSDS YELLOW RNL 150%.pdf",
            "mime_type": "application/pdf",
            "file_size": "567856",
            "locale": "en",
            "version": 1,
            "chemical_product_id": 228615,
            "organisation_id": 6322,
            "created_at": "2019-06-20T08:55:18.000000Z",
            "updated_at": "2026-08-11T13:52:53.000000Z",
            "file_url": "",
            "chemical_product": {
                "id": 228615,
                "reference_id": "20-QJYG27AJ44HZ-T",
                "organisation_id": 6322,
                "zdhc_pid": "P397IA55",
                "name": "REACTOBOND YELLOW RNL 150%",
                "version": 1,
                "description": null,
                "alternate_names": null,
                "conformance_level_id": 3,
                "ctz_level_id": 4,
                "status": "ACCEPTED",
                "publication_status": "PUBLISHED",
                "sds_url": null,
                "website_url": null,
                "qr_code_path": null,
                "qr_target_url": null,
                "created_at": "2019-06-20T00:00:00.000000Z",
                "updated_at": "2026-08-11T13:40:12.000000Z",
                "deleted_at": null,
                "technical_data_sheet_url": ""
            }
        },
        "certification_body": {
            "id": 8025,
            "maxio_customer_id": 435193,
            "reference_id": "01-QD8ADSLW7BBM-V",
            "pdc_id": null,
            "gateway_aid": "A713FG39",
            "uuid": "8c1a1bea-9761-467e-ba51-e34f9fb7bdd3",
            "type_id": 7,
            "status": "approved",
            "is_test": false,
            "name": "OEKO-TEX® Service GmbH",
            "legal_name": "OEKO-TEX® Service GmbH",
            "address_1": "Gutenbergstrasse 1, Zurich 8002 Switzerland",
            "address_2": null,
            "city": "Zurich",
            "state": "Zurich",
            "location": "CH",
            "zip": "8002",
            "phone": "+ 41 44 501 26 03",
            "email": "j.wehrli@oekotex.com",
            "contact_first_name": "Jonathan",
            "contact_last_name": "Wehrli",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2020-01-03T00:00:00.000000Z",
            "updated_at": "2026-08-11T15:37:36.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "Switzerland"
        }
    }
}
 

Request      

POST api/organisation/{organisation_reference_id}/chemical/product-assignment/{product_assignment_id}/certification/{product_mrsl_certification_id}/remove

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

product_assignment_id   string     

The ID of the product assignment. Example: et

product_mrsl_certification_id   string     

The ID of the product mrsl certification. Example: molestiae

Body Parameters

reason   string     

Certification removal reason category. Example: QUALITY_ISSUE

Must be one of:
  • QUALITY_ISSUE
  • SDS_CHANGE
  • ENTRY_ERROR
  • OTHER
note   string  optional    

Optional additional note for the removal. Must not be greater than 255 characters. Example: Chemical product is no longer compliant with the certification body's requirements.

Product Category

Index

requires authentication

List all product categories

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category?per_page=9&page=1&filter%5Bname%5D=eligendi&filter%5Bis_inactive%5D=&filter%5Bcreated_at%5D=sed&filter%5Bupdated_at%5D=voluptatem&sort=name&search=suscipit&column=name" \
    --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/organisation/1/chemical/classification/product-category"
);

const params = {
    "per_page": "9",
    "page": "1",
    "filter[name]": "eligendi",
    "filter[is_inactive]": "0",
    "filter[created_at]": "sed",
    "filter[updated_at]": "voluptatem",
    "sort": "name",
    "search": "suscipit",
    "column": "name",
};
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,
            "name": "Acids",
            "is_inactive": 0,
            "created_at": "2026-08-11T13:58:01.000000Z",
            "updated_at": "2026-08-11T13:58:01.000000Z",
            "substrates": [
                {
                    "id": 3,
                    "name": "Leather",
                    "is_inactive": 0,
                    "created_at": "2026-08-11T13:58:01.000000Z",
                    "updated_at": "2026-08-11T13:58:01.000000Z",
                    "pivot": {
                        "product_category_id": 1,
                        "product_substrate_id": 3
                    }
                }
            ]
        },
        {
            "id": 1,
            "name": "Acids",
            "is_inactive": 0,
            "created_at": "2026-08-11T13:58:01.000000Z",
            "updated_at": "2026-08-11T13:58:01.000000Z",
            "substrates": [
                {
                    "id": 3,
                    "name": "Leather",
                    "is_inactive": 0,
                    "created_at": "2026-08-11T13:58:01.000000Z",
                    "updated_at": "2026-08-11T13:58:01.000000Z",
                    "pivot": {
                        "product_category_id": 1,
                        "product_substrate_id": 3
                    }
                }
            ]
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/classification/product-category

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: eligendi

filter[is_inactive]   boolean  optional    

Filter column is_inactive by any accepted value. Filter by inactive status Example: false

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: sed

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: voluptatem

filter[substrates.name]   string  optional    

Filter column substrates.name by any accepted value. Filter by substrates name Example: ut

filter[substrates.id]   integer  optional    

Filter column substrates.id by any accepted value. Filter by substrate ID Example: 9

sort   string  optional    

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

search   string  optional    

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

column   string  optional    

get a distinct list of filterable values for any of the columns: name, is_inactive, created_at, updated_at, substrates.name. Example: name

Show

requires authentication

Show a product category

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category/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/organisation/1/chemical/classification/product-category/1"
);

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,
        "name": "Acids",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:01.000000Z",
        "updated_at": "2026-08-11T13:58:01.000000Z",
        "substrates": [
            {
                "id": 3,
                "name": "Leather",
                "is_inactive": 0,
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z"
            }
        ]
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/classification/product-category/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product category. Example: 1

Store

requires authentication

Store a product category

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"xdnommbo\",
    \"is_inactive\": false,
    \"substrates\": [
        10
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category"
);

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

let body = {
    "name": "xdnommbo",
    "is_inactive": false,
    "substrates": [
        10
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Acids",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:01.000000Z",
        "updated_at": "2026-08-11T13:58:01.000000Z",
        "substrates": [
            {
                "id": 3,
                "name": "Leather",
                "is_inactive": 0,
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z"
            }
        ]
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/classification/product-category

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: xdnommbo

is_inactive   boolean  optional    

Example: false

substrates   integer[]  optional    

The id of an existing record in the product_substrates table.

Update

requires authentication

Update a product category

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"divfuh\",
    \"is_inactive\": false,
    \"substrates\": [
        9
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category/1"
);

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

let body = {
    "name": "divfuh",
    "is_inactive": false,
    "substrates": [
        9
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Acids",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:01.000000Z",
        "updated_at": "2026-08-11T13:58:01.000000Z",
        "substrates": [
            {
                "id": 3,
                "name": "Leather",
                "is_inactive": 0,
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z"
            }
        ]
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/classification/product-category/{id}

PATCH api/organisation/{organisation_id}/chemical/classification/product-category/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product category. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: divfuh

is_inactive   boolean  optional    

Example: false

substrates   integer[]  optional    

The id of an existing record in the product_substrates table.

Destroy

requires authentication

Destroy a product category

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category/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/organisation/1/chemical/classification/product-category/1"
);

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


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

Example response (200):


{
    "message": "Product category deleted successfully."
}
 

Request      

DELETE api/organisation/{organisation_id}/chemical/classification/product-category/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product category. Example: 1

Product Substrate

Index

requires authentication

Get Product Substrates

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate?per_page=3&page=1&filter%5Bname%5D=quis&filter%5Bis_inactive%5D=&filter%5Bcategories_count%5D=12&filter%5Buse_types_count%5D=8&filter%5Bupdated_at%5D=maxime&filter%5Bcreated_at%5D=aliquid&sort=name&column=name" \
    --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/organisation/1/chemical/classification/product-substrate"
);

const params = {
    "per_page": "3",
    "page": "1",
    "filter[name]": "quis",
    "filter[is_inactive]": "0",
    "filter[categories_count]": "12",
    "filter[use_types_count]": "8",
    "filter[updated_at]": "maxime",
    "filter[created_at]": "aliquid",
    "sort": "name",
    "column": "name",
};
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,
            "name": "Adhesives",
            "is_inactive": 0,
            "created_at": "2026-08-11T13:58:01.000000Z",
            "updated_at": "2026-08-11T13:58:01.000000Z",
            "categories_count": null,
            "use_types_count": null
        },
        {
            "id": 1,
            "name": "Adhesives",
            "is_inactive": 0,
            "created_at": "2026-08-11T13:58:01.000000Z",
            "updated_at": "2026-08-11T13:58:01.000000Z",
            "categories_count": null,
            "use_types_count": null
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/chemical/classification/product-substrate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: quis

filter[is_inactive]   boolean  optional    

Filter column is_inactive by any accepted value. Filter by inactive status Example: false

filter[categories_count]   integer  optional    

Filter column categories_count by any accepted value. Filter by categories count Example: 12

filter[use_types_count]   integer  optional    

Filter column use_types_count by any accepted value. Filter by use types count Example: 8

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: maxime

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: aliquid

sort   string  optional    

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

column   string  optional    

get a distinct list of filterable values for any of the columns: name, categories_count, use_types_count, is_inactive, updated_at, created_at. Example: name

Show

requires authentication

Show a product substrate

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate/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/organisation/1/chemical/classification/product-substrate/1"
);

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,
        "name": "Adhesives",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:01.000000Z",
        "updated_at": "2026-08-11T13:58:01.000000Z"
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/classification/product-substrate/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product substrate. Example: 1

Store

requires authentication

Create a new product substrate

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ogginwxxu\",
    \"is_inactive\": true,
    \"categories\": [
        11
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate"
);

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

let body = {
    "name": "ogginwxxu",
    "is_inactive": true,
    "categories": [
        11
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Adhesives",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:01.000000Z",
        "updated_at": "2026-08-11T13:58:01.000000Z"
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/classification/product-substrate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: ogginwxxu

is_inactive   boolean  optional    

Example: true

categories   integer[]  optional    

The id of an existing record in the product_categories table.

Update

requires authentication

Update a product substrate

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vxxojksxwgroaup\",
    \"is_inactive\": true,
    \"categories\": [
        18
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate/1"
);

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

let body = {
    "name": "vxxojksxwgroaup",
    "is_inactive": true,
    "categories": [
        18
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Adhesives",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:01.000000Z",
        "updated_at": "2026-08-11T13:58:01.000000Z"
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/classification/product-substrate/{id}

PATCH api/organisation/{organisation_id}/chemical/classification/product-substrate/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product substrate. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: vxxojksxwgroaup

is_inactive   boolean  optional    

Example: true

categories   integer[]  optional    

The id of an existing record in the product_categories table.

Destroy

requires authentication

Destroy a product substrate

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate/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/organisation/1/chemical/classification/product-substrate/1"
);

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


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

Example response (200):


{
    "message": "Product substrate deleted successfully."
}
 

Request      

DELETE api/organisation/{organisation_id}/chemical/classification/product-substrate/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product substrate. Example: 1

Product Use Type

Index

requires authentication

List all product use types

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type?per_page=19&page=1&filter%5Bname%5D=sint&filter%5Bis_inactive%5D=1&filter%5Bcreated_at%5D=veritatis&filter%5Bupdated_at%5D=doloribus&sort=name&search=consequuntur&column=name" \
    --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/organisation/1/chemical/classification/product-use-type"
);

const params = {
    "per_page": "19",
    "page": "1",
    "filter[name]": "sint",
    "filter[is_inactive]": "1",
    "filter[created_at]": "veritatis",
    "filter[updated_at]": "doloribus",
    "sort": "name",
    "search": "consequuntur",
    "column": "name",
};
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,
            "name": "Accelerator For Solvent Coating",
            "is_inactive": 0,
            "created_at": "2026-08-11T13:58:00.000000Z",
            "updated_at": "2026-08-11T13:58:00.000000Z"
        },
        {
            "id": 1,
            "name": "Accelerator For Solvent Coating",
            "is_inactive": 0,
            "created_at": "2026-08-11T13:58:00.000000Z",
            "updated_at": "2026-08-11T13:58:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/classification/product-use-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: sint

filter[is_inactive]   boolean  optional    

Filter column is_inactive by any accepted value. Filter by inactive status Example: true

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: veritatis

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: doloribus

filter[categories.name]   string  optional    

Filter column categories.name by any accepted value. Filter by categories name Example: earum

filter[categories.id]   integer  optional    

Filter column categories.id by any accepted value. Filter by category ID Example: 12

sort   string  optional    

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

search   string  optional    

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

column   string  optional    

get a distinct list of filterable values for any of the columns: name, is_inactive, created_at, updated_at, categories.name. Example: name

Show

requires authentication

Show a product use type

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type/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/organisation/1/chemical/classification/product-use-type/1"
);

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,
        "name": "Accelerator For Solvent Coating",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:00.000000Z",
        "updated_at": "2026-08-11T13:58:00.000000Z",
        "categories": [
            {
                "id": 68,
                "name": "Textile Finishing Assistants",
                "is_inactive": 0,
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z",
                "substrates": [
                    {
                        "id": 6,
                        "name": "Textile",
                        "is_inactive": 0,
                        "created_at": "2026-08-11T13:58:01.000000Z",
                        "updated_at": "2026-08-11T13:58:01.000000Z"
                    }
                ]
            }
        ]
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/classification/product-use-type/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product use type. Example: 1

Store

requires authentication

Store a product use type

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"xpogdtjqoreoivnh\",
    \"is_inactive\": true,
    \"categories\": [
        29
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type"
);

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

let body = {
    "name": "xpogdtjqoreoivnh",
    "is_inactive": true,
    "categories": [
        29
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Accelerator For Solvent Coating",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:00.000000Z",
        "updated_at": "2026-08-11T13:58:00.000000Z",
        "categories": [
            {
                "id": 68,
                "name": "Textile Finishing Assistants",
                "is_inactive": 0,
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z",
                "substrates": [
                    {
                        "id": 6,
                        "name": "Textile",
                        "is_inactive": 0,
                        "created_at": "2026-08-11T13:58:01.000000Z",
                        "updated_at": "2026-08-11T13:58:01.000000Z"
                    }
                ]
            }
        ]
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/classification/product-use-type

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: xpogdtjqoreoivnh

is_inactive   boolean  optional    

Example: true

categories   integer[]  optional    

The id of an existing record in the product_categories table. Must be at least 0.

Update

requires authentication

Update a product use type

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"jjdlzgwukdkjyooicy\",
    \"is_inactive\": false,
    \"categories\": [
        65
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type/1"
);

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

let body = {
    "name": "jjdlzgwukdkjyooicy",
    "is_inactive": false,
    "categories": [
        65
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Accelerator For Solvent Coating",
        "is_inactive": 0,
        "created_at": "2026-08-11T13:58:00.000000Z",
        "updated_at": "2026-08-11T13:58:00.000000Z",
        "categories": [
            {
                "id": 68,
                "name": "Textile Finishing Assistants",
                "is_inactive": 0,
                "created_at": "2026-08-11T13:58:01.000000Z",
                "updated_at": "2026-08-11T13:58:01.000000Z",
                "substrates": [
                    {
                        "id": 6,
                        "name": "Textile",
                        "is_inactive": 0,
                        "created_at": "2026-08-11T13:58:01.000000Z",
                        "updated_at": "2026-08-11T13:58:01.000000Z"
                    }
                ]
            }
        ]
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/classification/product-use-type/{id}

PATCH api/organisation/{organisation_id}/chemical/classification/product-use-type/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product use type. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: jjdlzgwukdkjyooicy

is_inactive   boolean  optional    

Example: false

categories   integer[]  optional    

The id of an existing record in the product_categories table. Must be at least 0.

Destroy

requires authentication

Destroy a product use type

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type/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/organisation/1/chemical/classification/product-use-type/1"
);

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


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

Example response (200):


{
    "message": "Product use type deleted successfully."
}
 

Request      

DELETE api/organisation/{organisation_id}/chemical/classification/product-use-type/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the product use type. Example: 1

Conformance Levels

Index

requires authentication

get all conformance levels

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/conformance-levels" \
    --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/conformance-levels"
);

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,
        "name": "Level 1",
        "created_at": "2026-08-11T13:39:53.000000Z",
        "updated_at": "2026-08-11T13:39:53.000000Z"
    }
}
 

Request      

GET api/conformance-levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Development

Frontend values

Get a list of almost all values

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/development/frontend/values" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/development/frontend/values"
);

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


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

Example response (200):


[
     roles: {}
     organisationTypes: {}
     wastewaterActionTypes: {}
     wastewaterTypes: {}
     samplingPoints: {}
     msrl_conformance_levels: {}
     ctz_conformance_levels: {}
     root_cause_reasons: {}
     corrective_actions: {}
]
 

Request      

GET api/development/frontend/values

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Endpoints

Store

requires authentication

Create a new Organisation API Key

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/admin/organisation-api-keys" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"organisation_user_id\": \"at\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/admin/organisation-api-keys"
);

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

let body = {
    "organisation_user_id": "at"
};

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

Example response (201):


{
 "message": "Organisation API key created successfully."
 "api_key": "foreign_api_key|0de1eb785a5d603f8c56057e6408914a3bd854e4e22e878689b92c6b25b851e7"
}
 

Request      

POST api/admin/organisation-api-keys

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

organisation_user_id   string     

The id of an existing record in the organisation_user table. Example: at

GET api/admin/{organisation_id}/wastewater/reporting/activity-logs

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/1/wastewater/reporting/activity-logs?sort=created_at&filter%5Bclearstream_id%5D=6&filter%5Bclearstream_reference_id%5D=rem&filter%5Baction_type%5D=et&filter%5Buser_name%5D=et&filter%5Borganisation_reference_id%5D=quia&column=context-%3Ecreated_at&search=ut&page=1&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/admin/1/wastewater/reporting/activity-logs"
);

const params = {
    "sort": "created_at",
    "filter[clearstream_id]": "6",
    "filter[clearstream_reference_id]": "rem",
    "filter[action_type]": "et",
    "filter[user_name]": "et",
    "filter[organisation_reference_id]": "quia",
    "column": "context->created_at",
    "search": "ut",
    "page": "1",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/admin/{organisation_id}/wastewater/reporting/activity-logs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

sort   string  optional    

sort by any accepted column: created_at, clearstream_id, clearstream_reference_id, organisation_reference_id, action_type, user_name, message. prefix a "-" before the column name to sort in descending order Example: created_at

filter[clearstream_id]   integer  optional    

Filter column clearstream_id by any accepted value. id of the clearstream report Example: 6

filter[clearstream_reference_id]   string  optional    

Filter column clearstream_reference_id by any accepted value. reference id of the clearstream report Example: rem

filter[action_type]   string  optional    

Filter column action_type by any accepted value. Action type Example: et

filter[user_name]   string  optional    

Filter column user_name by any accepted value. name of the user initiating the action Example: et

filter[organisation_reference_id]   string  optional    

Filter column organisation_reference_id by any accepted value. reference id of the organisation Example: quia

column   string  optional    

get a distinct list of filterable values for any of the columns: context->created_at, context->clearstream_id, context->clearstream_reference_id, context->action_type, context->user_name, context->organisation_id, context->organisation_reference_id, context->message. Example: context->created_at

search   string  optional    

Search in all of these columns: message. Filter type: like. Example: ut

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Show

requires authentication

Download a chemical inventory CSV for a given supplier

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/reports/chemical/chemical-inventory-csv" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inventory_ids\": [
        \"vel\"
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports/chemical/chemical-inventory-csv"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "inventory_ids": [
        "vel"
    ]
};

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

Request      

POST api/reports/chemical/chemical-inventory-csv

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

inventory_ids   string[]     

The reference_id of an existing record in the supplier_chemical_inventories table.

Legacy `POST …/oauth/token` — username/password login, returns `{ result, token }`.

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/gateway-compat/oauth/token" \
    --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/gateway-compat/oauth/token"
);

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


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

Request      

POST api/gateway-compat/oauth/token

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Legacy `GET …/oauth/refreshtoken` — `refreshToken` header; empty `{}` on failure.

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/gateway-compat/oauth/refreshtoken" \
    --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/gateway-compat/oauth/refreshtoken"
);

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 (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 90
x-ratelimit-remaining: 89
vary: Origin
 

{
    "message": "",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
    "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
    "line": 1423,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 47,
            "function": "abort",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/GatewayCompatEnabledMiddleware.php",
            "line": 22,
            "function": "abort"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\GatewayCompatEnabledMiddleware",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/BlockApiAccessTokens.php",
            "line": 24,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\BlockApiAccessTokens",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/OrganisationLastAuthorizationUpdate.php",
            "line": 43,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\OrganisationLastAuthorizationUpdate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 51,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 161,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 127,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 89,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/gateway-compat/oauth/refreshtoken

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Legacy `POST …/oauth/tokenbykey` — service token via `userAccessKey`.

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/gateway-compat/oauth/tokenbykey" \
    --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/gateway-compat/oauth/tokenbykey"
);

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


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

Request      

POST api/gateway-compat/oauth/tokenbykey

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/gateway-compat/v1/GetFacilityProfile

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/gateway-compat/v1/GetFacilityProfile" \
    --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/gateway-compat/v1/GetFacilityProfile"
);

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 (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 90
x-ratelimit-remaining: 88
vary: Origin
 

{
    "message": "",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
    "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
    "line": 1423,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 47,
            "function": "abort",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/GatewayCompatEnabledMiddleware.php",
            "line": 22,
            "function": "abort"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\GatewayCompatEnabledMiddleware",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/BlockApiAccessTokens.php",
            "line": 24,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\BlockApiAccessTokens",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/OrganisationLastAuthorizationUpdate.php",
            "line": 43,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\OrganisationLastAuthorizationUpdate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 51,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 161,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 127,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 89,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/gateway-compat/v1/GetFacilityProfile

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/gateway-compat/v1/GetUserOrganizations

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/gateway-compat/v1/GetUserOrganizations" \
    --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/gateway-compat/v1/GetUserOrganizations"
);

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 (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 90
x-ratelimit-remaining: 87
vary: Origin
 

{
    "message": "",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
    "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
    "line": 1423,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 47,
            "function": "abort",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/GatewayCompatEnabledMiddleware.php",
            "line": 22,
            "function": "abort"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\GatewayCompatEnabledMiddleware",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/BlockApiAccessTokens.php",
            "line": 24,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\BlockApiAccessTokens",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/OrganisationLastAuthorizationUpdate.php",
            "line": 43,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\OrganisationLastAuthorizationUpdate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 51,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 161,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 127,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 89,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/gateway-compat/v1/GetUserOrganizations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/gateway-compat/v1/UserProfile

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/gateway-compat/v1/UserProfile" \
    --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/gateway-compat/v1/UserProfile"
);

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 (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 90
x-ratelimit-remaining: 86
vary: Origin
 

{
    "message": "",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
    "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
    "line": 1423,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
            "line": 47,
            "function": "abort",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/GatewayCompatEnabledMiddleware.php",
            "line": 22,
            "function": "abort"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\GatewayCompatEnabledMiddleware",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/BlockApiAccessTokens.php",
            "line": 24,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\BlockApiAccessTokens",
            "type": "->"
        },
        {
            "file": "/var/www/html/app/Http/Middleware/OrganisationLastAuthorizationUpdate.php",
            "line": 43,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "App\\Http\\Middleware\\OrganisationLastAuthorizationUpdate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 51,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 161,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 127,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 89,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/gateway-compat/v1/UserProfile

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/system/organisation/{organisation_id}/push-notification-count

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/organisation/1/push-notification-count" \
    --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/system/organisation/1/push-notification-count"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/system/organisation/{organisation_id}/push-notification-count

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Summary of completeSampling

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/complete-sampling" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/complete-sampling"
);

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


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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/complete-sampling

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/start-testing

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/start-testing" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/start-testing"
);

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


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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/start-testing

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Finish testing

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/finish-testing" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/finish-testing"
);

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


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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/finish-testing

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

GET api/organisation/{organisation_id}/wastewater/reporting/activity-logs/{report?}

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/activity-logs/1?sort=created_at&filter%5Bclearstream_id%5D=11&filter%5Bclearstream_reference_id%5D=autem&filter%5Baction_type%5D=quod&filter%5Buser_name%5D=soluta&column=context-%3Ecreated_at&search=cum&page=1&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/organisation/1/wastewater/reporting/activity-logs/1"
);

const params = {
    "sort": "created_at",
    "filter[clearstream_id]": "11",
    "filter[clearstream_reference_id]": "autem",
    "filter[action_type]": "quod",
    "filter[user_name]": "soluta",
    "column": "context->created_at",
    "search": "cum",
    "page": "1",
    "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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/activity-logs/{report?}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report   integer  optional    

Example: 1

Query Parameters

sort   string  optional    

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

filter[clearstream_id]   integer  optional    

Filter column clearstream_id by any accepted value. id of the clearstream report Example: 11

filter[clearstream_reference_id]   string  optional    

Filter column clearstream_reference_id by any accepted value. reference id of the clearstream report Example: autem

filter[action_type]   string  optional    

Filter column action_type by any accepted value. Action type Example: quod

filter[user_name]   string  optional    

Filter column user_name by any accepted value. name of the user initiating the action Example: soluta

column   string  optional    

get a distinct list of filterable values for any of the columns: context->created_at, context->clearstream_id, context->clearstream_reference_id, context->action_type, context->user_name, context->organisation_id, context->message. Example: context->created_at

search   string  optional    

Search in all of these columns: message. Filter type: like. Example: cum

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

GET api/organisation/{organisation_id}/wastewater/reporting/labs/test-results/{report_id}/parameters/{id}

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/labs/test-results/1/parameters/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/organisation/1/wastewater/reporting/labs/test-results/1/parameters/1"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/labs/test-results/{report_id}/parameters/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

id   integer     

The ID of the parameter. Example: 1

Receives Maxio webhook events and processes them asynchronously via Event/Listener.

requires authentication

A fast 2xx response is important so Maxio does not retry the webhook.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/webhook/maxio/natus" \
    --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/webhook/maxio/natus"
);

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


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

Request      

POST api/webhook/maxio/{token}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

token   string     

Example: natus

Global Search

Combined

Combined Search

requires authentication

Get combined search results

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/global-search/combined?filter%5Bsearch%5D=tempora" \
    --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/organisation/1/global-search/combined"
);

const params = {
    "filter[search]": "tempora",
};
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": [
        [],
        []
    ]
}
 

Request      

GET api/organisation/{organisation_id}/global-search/combined

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

filter[search]   string  optional    

Filter column search by any accepted value. Search by name or alternate names or reference ID, PDC ID, Gateway AID, or OS Hub Identifier Example: tempora

Organisations

Organisations

requires authentication

Get Products

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/global-search/organisations?filter%5Btype_id%5D=sed&filter%5Blocation%5D=commodi&filter%5Bsearch%5D=voluptatum&filter%5Bonly_active_connections%5D=quos&filter%5Bmrsl_standard_id%5D=facere&filter%5Bctz_level_id%5D=explicabo&filter%5Bhas_incheck_level_1%5D=voluptatem&page=1&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/organisation/1/global-search/organisations"
);

const params = {
    "filter[type_id]": "sed",
    "filter[location]": "commodi",
    "filter[search]": "voluptatum",
    "filter[only_active_connections]": "quos",
    "filter[mrsl_standard_id]": "facere",
    "filter[ctz_level_id]": "explicabo",
    "filter[has_incheck_level_1]": "voluptatem",
    "page": "1",
    "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,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "location": {
                "code": "CN",
                "name": "China"
            }
        },
        {
            "id": 1,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "location": {
                "code": "CN",
                "name": "China"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_id}/global-search/organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

filter[type_id]   string  optional    

Filter column type_id by any accepted value. Matches exact value. Example: sed

filter[location]   string  optional    

Filter column location by any accepted value. Matches exact value. Example: commodi

filter[search]   string  optional    

Filter column search by any accepted value. Search by id, name, legal name, type name, reference ID, PDC ID, Gateway AID, or OS Hub Identifier Example: voluptatum

filter[only_active_connections]   string  optional    

Filter column only_active_connections by any accepted value. 1 = only organisations with an active connection to the current organisation, 0 = no filter Example: quos

filter[mrsl_standard_id]   string  optional    

Filter column mrsl_standard_id by any accepted value. Filter by active MRSL standard IDs (comma-separated) Example: facere

filter[ctz_level_id]   string  optional    

Filter column ctz_level_id by any accepted value. Filter by active CTZ level IDs (comma-separated) Example: explicabo

filter[has_incheck_level_1]   string  optional    

Filter column has_incheck_level_1 by any accepted value. Filter by organisations that have an InCheck level 1 Example: voluptatem

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Chemical Products

Chemical Products

requires authentication

Get Chemical Products

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/global-search/chemical-products?per_page=20&page=1&filter%5Bname%5D=fugit&filter%5Breference_id%5D=inventore&filter%5Bstatus%5D=repellendus&filter%5Bpublication_status%5D=et&filter%5Bconformance_level_id%5D=20&filter%5Bctz_level_id%5D=15&filter%5Borganisation_id%5D=8&filter%5Bcreated_at%5D=magnam&filter%5Bupdated_at%5D=et&filter%5Bsearch%5D=fugiat" \
    --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/organisation/1/global-search/chemical-products"
);

const params = {
    "per_page": "20",
    "page": "1",
    "filter[name]": "fugit",
    "filter[reference_id]": "inventore",
    "filter[status]": "repellendus",
    "filter[publication_status]": "et",
    "filter[conformance_level_id]": "20",
    "filter[ctz_level_id]": "15",
    "filter[organisation_id]": "8",
    "filter[created_at]": "magnam",
    "filter[updated_at]": "et",
    "filter[search]": "fugiat",
};
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,
            "reference_id": "20-6AY3YHAWYTWX-J",
            "status": "ACCEPTED",
            "publication_status": "UNPUBLISHED",
            "name": "NICCA SUNSOLT 1200",
            "alternate_names": null,
            "chemical_formulator": {
                "id": 5938,
                "reference_id": "01-B88N4SX6EREE-A",
                "type_id": 6,
                "name": "Nicca Chemical Co., Ltd.",
                "address_1": "4-23-1 Bunkyo",
                "address_2": null,
                "city": "Fukui",
                "state": "Fukui",
                "location": "JP",
                "zip": "910-8670",
                "phone": "+81-776-25-8646",
                "email": "zdhc@niccachemical.com",
                "website": "https://nctexchem.com",
                "avatar_url": null,
                "location_name": "Japan"
            },
            "can_access_product_profile": true,
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "score": 10,
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            },
            "publication_expired": false,
            "sds_url": null,
            "website_url": null
        },
        {
            "id": 1,
            "reference_id": "20-6AY3YHAWYTWX-J",
            "status": "ACCEPTED",
            "publication_status": "UNPUBLISHED",
            "name": "NICCA SUNSOLT 1200",
            "alternate_names": null,
            "chemical_formulator": {
                "id": 5938,
                "reference_id": "01-B88N4SX6EREE-A",
                "type_id": 6,
                "name": "Nicca Chemical Co., Ltd.",
                "address_1": "4-23-1 Bunkyo",
                "address_2": null,
                "city": "Fukui",
                "state": "Fukui",
                "location": "JP",
                "zip": "910-8670",
                "phone": "+81-776-25-8646",
                "email": "zdhc@niccachemical.com",
                "website": "https://nctexchem.com",
                "avatar_url": null,
                "location_name": "Japan"
            },
            "can_access_product_profile": true,
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "score": 10,
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-27T13:46:25.000000Z"
            },
            "publication_expired": false,
            "sds_url": null,
            "website_url": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_id}/global-search/chemical-products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[name]   string  optional    

Filter column name by any accepted value. Filter by name Example: fugit

filter[reference_id]   string  optional    

Filter column reference_id by any accepted value. Filter by reference ID Example: inventore

filter[status]   string  optional    

Filter column status by any accepted value. Filter by status (multiple selection allowed) Example: repellendus

filter[publication_status]   string  optional    

Filter column publication_status by any accepted value. Filter by publication status (multiple selection allowed) Example: et

filter[conformance_level_id]   integer  optional    

Filter column conformance_level_id by any accepted value. Filter by conformance level IDs (multiple selection allowed) Example: 20

filter[ctz_level_id]   integer  optional    

Filter column ctz_level_id by any accepted value. Filter by CTZ level IDs (multiple selection allowed) Example: 15

filter[certificationBodies.id]   integer  optional    

Filter column certificationBodies.id by any accepted value. Filter by certification body IDs (multiple selection allowed) Example: 7

filter[organisation_id]   integer  optional    

Filter column organisation_id by any accepted value. Filter by organisation IDs (multiple selection allowed) Example: 8

filter[organisation.location]   string  optional    

Filter column organisation.location by any accepted value. Filter by formulators organisation location Example: ut

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: magnam

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: et

filter[useTypes.id]   integer  optional    

Filter column useTypes.id by any accepted value. Filter by use type ID (multiple selection allowed) Example: 5

filter[categories.id]   integer  optional    

Filter column categories.id by any accepted value. Filter by use type category ID (multiple selection allowed) Example: 2

filter[substrates.id]   integer  optional    

Filter column substrates.id by any accepted value. Filter by use type substrate ID (multiple selection allowed) Example: 17

filter[search]   string  optional    

Filter column search by any accepted value. Search by name, alternate names, or ZDHC PID, reference ID Example: fugiat

InCheck

Activity Logs

Index

requires authentication

Get all activity logs for an incheck organisation

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/deserunt/activity-logs?sort=created_at&filter%5Baction_type%5D=eveniet&filter%5Buser_name%5D=ad&column=context-%3Ecreated_at&search=quia&page=1&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/incheck/deserunt/activity-logs"
);

const params = {
    "sort": "created_at",
    "filter[action_type]": "eveniet",
    "filter[user_name]": "ad",
    "column": "context->created_at",
    "search": "quia",
    "page": "1",
    "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,
            "channel": "user",
            "level": "INFO",
            "message": "[created] App\\Models\\User",
            "context": {
                "ip": "127.0.0.1",
                "auth_id": null,
                "changes": {
                    "id": 33047,
                    "ulid": "01kzrgt9m67mqqhva0at3gn395",
                    "email": "gerlach.imani@example.org",
                    "phone": "+12567409057",
                    "locale": "es_CL",
                    "role_id": 2,
                    "password": "$2y$12$rQGC2FgCztJM4S74QhgE/uxMouPZeIiz76ecdQSpDtePQdsiwcgWm",
                    "last_name": "Koepp",
                    "first_name": "Malvina",
                    "reference_id": "02-4TGMVY8MTKE8-Y"
                },
                "context": null,
                "user_id": 33047,
                "endpoint": "console",
                "auth_mail": null,
                "action_type": "created"
            },
            "created_at": "2026-08-11 13:39:58",
            "deleted_at": null
        },
        {
            "id": 1,
            "channel": "user",
            "level": "INFO",
            "message": "[created] App\\Models\\User",
            "context": {
                "ip": "127.0.0.1",
                "auth_id": null,
                "changes": {
                    "id": 33047,
                    "ulid": "01kzrgt9m67mqqhva0at3gn395",
                    "email": "gerlach.imani@example.org",
                    "phone": "+12567409057",
                    "locale": "es_CL",
                    "role_id": 2,
                    "password": "$2y$12$rQGC2FgCztJM4S74QhgE/uxMouPZeIiz76ecdQSpDtePQdsiwcgWm",
                    "last_name": "Koepp",
                    "first_name": "Malvina",
                    "reference_id": "02-4TGMVY8MTKE8-Y"
                },
                "context": null,
                "user_id": 33047,
                "endpoint": "console",
                "auth_mail": null,
                "action_type": "created"
            },
            "created_at": "2026-08-11 13:39:58",
            "deleted_at": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/incheck/{organisation_reference_id}/activity-logs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: deserunt

Query Parameters

sort   string  optional    

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

filter[action_type]   string  optional    

Filter column action_type by any accepted value. Action type Example: eveniet

filter[user_name]   string  optional    

Filter column user_name by any accepted value. name of the user initiating the action Example: ad

column   string  optional    

get a distinct list of filterable values for any of the columns: context->created_at, context->action_type, context->user_name, context->organisation_id, context->message. Example: context->created_at

search   string  optional    

Search in all of these columns: message. Filter type: like. Example: quia

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Index

requires authentication

Get all activity logs for a solution provider organisation

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/eos/solution-provider/activity-logs" \
    --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/incheck/eos/solution-provider/activity-logs"
);

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,
            "channel": "user",
            "level": "INFO",
            "message": "[created] App\\Models\\User",
            "context": {
                "ip": "127.0.0.1",
                "auth_id": null,
                "changes": {
                    "id": 33047,
                    "ulid": "01kzrgt9m67mqqhva0at3gn395",
                    "email": "gerlach.imani@example.org",
                    "phone": "+12567409057",
                    "locale": "es_CL",
                    "role_id": 2,
                    "password": "$2y$12$rQGC2FgCztJM4S74QhgE/uxMouPZeIiz76ecdQSpDtePQdsiwcgWm",
                    "last_name": "Koepp",
                    "first_name": "Malvina",
                    "reference_id": "02-4TGMVY8MTKE8-Y"
                },
                "context": null,
                "user_id": 33047,
                "endpoint": "console",
                "auth_mail": null,
                "action_type": "created"
            },
            "created_at": "2026-08-11 13:39:58",
            "deleted_at": null
        },
        {
            "id": 1,
            "channel": "user",
            "level": "INFO",
            "message": "[created] App\\Models\\User",
            "context": {
                "ip": "127.0.0.1",
                "auth_id": null,
                "changes": {
                    "id": 33047,
                    "ulid": "01kzrgt9m67mqqhva0at3gn395",
                    "email": "gerlach.imani@example.org",
                    "phone": "+12567409057",
                    "locale": "es_CL",
                    "role_id": 2,
                    "password": "$2y$12$rQGC2FgCztJM4S74QhgE/uxMouPZeIiz76ecdQSpDtePQdsiwcgWm",
                    "last_name": "Koepp",
                    "first_name": "Malvina",
                    "reference_id": "02-4TGMVY8MTKE8-Y"
                },
                "context": null,
                "user_id": 33047,
                "endpoint": "console",
                "auth_mail": null,
                "action_type": "created"
            },
            "created_at": "2026-08-11 13:39:58",
            "deleted_at": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/incheck/{organisation_reference_id}/solution-provider/activity-logs

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: eos

Onboarding Progress

requires authentication

See the requirements for the onboarding process to the incheck module

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/1/onboarding-progress" \
    --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/incheck/1/onboarding-progress"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/incheck/{organisation_id}/onboarding-progress

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Level

Index

requires authentication

List InCheck levels

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/level" \
    --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/incheck/level"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/incheck/level

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Reports

Index

requires authentication

Get all incheck reports for an organisation

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/veritatis/reports" \
    --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/incheck/veritatis/reports"
);

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,
            "reference_id": "48-9GTH3JCDLECA-Q",
            "supplier_id": 18091,
            "status": "closed",
            "verified_at": "2025-11-12 00:00:00",
            "closed_at": "2025-11-12 00:00:00",
            "created_at": "2025-11-12T00:00:00.000000Z",
            "updated_at": "2025-11-12T00:00:00.000000Z"
        },
        {
            "id": 1,
            "reference_id": "48-9GTH3JCDLECA-Q",
            "supplier_id": 18091,
            "status": "closed",
            "verified_at": "2025-11-12 00:00:00",
            "closed_at": "2025-11-12 00:00:00",
            "created_at": "2025-11-12T00:00:00.000000Z",
            "updated_at": "2025-11-12T00:00:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/incheck/{organisation_reference_id}/reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: veritatis

Show

requires authentication

Show an incheck report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/ut/reports/voluptatum" \
    --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/incheck/ut/reports/voluptatum"
);

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,
        "reference_id": "48-9GTH3JCDLECA-Q",
        "supplier_id": 18091,
        "status": "closed",
        "verified_at": "2025-11-12 00:00:00",
        "closed_at": "2025-11-12 00:00:00",
        "created_at": "2025-11-12T00:00:00.000000Z",
        "updated_at": "2025-11-12T00:00:00.000000Z"
    }
}
 

Request      

GET api/incheck/{organisation_reference_id}/reports/{reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: ut

reference_id   string     

The ID of the reference. Example: voluptatum

Store

requires authentication

Create a new incheck report

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/perspiciatis/reports" \
    --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/incheck/perspiciatis/reports"
);

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


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

Example response (201):


{
    "data": {
        "id": 1,
        "reference_id": "48-9GTH3JCDLECA-Q",
        "supplier_id": 18091,
        "status": "closed",
        "verified_at": "2025-11-12 00:00:00",
        "closed_at": "2025-11-12 00:00:00",
        "created_at": "2025-11-12T00:00:00.000000Z",
        "updated_at": "2025-11-12T00:00:00.000000Z"
    },
    "message": "InCheck report created successfully"
}
 

Request      

POST api/incheck/{organisation_reference_id}/reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: perspiciatis

Update

requires authentication

Update an incheck report

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/sequi/reports/suscipit" \
    --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/incheck/sequi/reports/suscipit"
);

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


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

Request      

PUT api/incheck/{organisation_reference_id}/reports/{reference_id}

PATCH api/incheck/{organisation_reference_id}/reports/{reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: sequi

reference_id   string     

The ID of the reference. Example: suscipit

Report Inventories

Index

requires authentication

Get all eligabile inventories for an incheck report. Usually last 12 months.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/dolor/reports/doloremque/inventories?per_page=6&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/incheck/dolor/reports/doloremque/inventories"
);

const params = {
    "per_page": "6",
    "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,
            "reference_id": "40-6EHWBWQ3XAMX-Q",
            "legacy_incheck_external_id": "CPXAG2MK-08062020",
            "submitting_user_id": null,
            "submitting_organisation_id": 20570,
            "supplier_id": 16596,
            "period": "2019-05-01T00:00:00.000000Z",
            "type": "unspecified",
            "status": "published",
            "auto_published": 0,
            "published_at": "2020-08-06T00:00:00.000000Z",
            "submitted_at": "2020-08-06T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2026-08-08T13:13:33.000000Z",
            "updated_at": "2026-08-10T05:11:37.000000Z",
            "expected_expiration": "2020-09-20T23:59:59.999999Z",
            "publishable": true,
            "published_inventory": {
                "id": 1,
                "level": null
            },
            "submitting_organisation": {
                "id": 20570,
                "maxio_customer_id": null,
                "reference_id": "01-9ZRDNB84XUEL-B",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9fab8781-d825-42fe-b3e6-12654811f7a3",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Invited company",
                "legal_name": "Invited company",
                "address_1": "Invited street 1",
                "address_2": "Invited street 2",
                "city": "Invited city",
                "state": "Invited state",
                "location": "US",
                "zip": "12345",
                "phone": "+1234567890",
                "email": "invited@localhost",
                "contact_first_name": "Invited",
                "contact_last_name": "Organisation",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://invited.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2012-05-07 06:57:13",
                "created_at": "2026-08-11T14:22:44.000000Z",
                "updated_at": "2026-08-12T11:27:48.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": 33050,
                "location_name": "United States",
                "in_check_visibility": null
            }
        },
        {
            "id": 1,
            "reference_id": "40-6EHWBWQ3XAMX-Q",
            "legacy_incheck_external_id": "CPXAG2MK-08062020",
            "submitting_user_id": null,
            "submitting_organisation_id": 20570,
            "supplier_id": 16596,
            "period": "2019-05-01T00:00:00.000000Z",
            "type": "unspecified",
            "status": "published",
            "auto_published": 0,
            "published_at": "2020-08-06T00:00:00.000000Z",
            "submitted_at": "2020-08-06T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2026-08-08T13:13:33.000000Z",
            "updated_at": "2026-08-10T05:11:37.000000Z",
            "expected_expiration": "2020-09-20T23:59:59.999999Z",
            "publishable": true,
            "published_inventory": {
                "id": 1,
                "level": null
            },
            "submitting_organisation": {
                "id": 20570,
                "maxio_customer_id": null,
                "reference_id": "01-9ZRDNB84XUEL-B",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9fab8781-d825-42fe-b3e6-12654811f7a3",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Invited company",
                "legal_name": "Invited company",
                "address_1": "Invited street 1",
                "address_2": "Invited street 2",
                "city": "Invited city",
                "state": "Invited state",
                "location": "US",
                "zip": "12345",
                "phone": "+1234567890",
                "email": "invited@localhost",
                "contact_first_name": "Invited",
                "contact_last_name": "Organisation",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://invited.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2012-05-07 06:57:13",
                "created_at": "2026-08-11T14:22:44.000000Z",
                "updated_at": "2026-08-12T11:27:48.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": 33050,
                "location_name": "United States",
                "in_check_visibility": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/incheck/{organisation_reference_id}/reports/{report_reference_id}/inventories

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: dolor

report_reference_id   string     

The ID of the report reference. Example: doloremque

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Bind

requires authentication

Bind inventories to an incheck report.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/deleniti/reports/enim/inventories" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inventory_ids\": [
        \"et\"
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/incheck/deleniti/reports/enim/inventories"
);

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

let body = {
    "inventory_ids": [
        "et"
    ]
};

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

Request      

POST api/incheck/{organisation_reference_id}/reports/{report_reference_id}/inventories

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

The ID of the organisation reference. Example: deleniti

report_reference_id   string     

The ID of the report reference. Example: enim

Body Parameters

inventory_ids   string[]     

InCheck Report PDF

Show

requires authentication

Show the incheck report as a pdf

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/incheck/inventories/nihil/incheck-report-pdf" \
    --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/organisation/1/incheck/inventories/nihil/incheck-report-pdf"
);

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


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

Example response (200):


content of the pdf
 

Request      

GET api/organisation/{organisation_reference_id}/incheck/inventories/{chemical_inventory_reference_id}/incheck-report-pdf

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   integer     

The ID of the organisation reference. Example: 1

chemical_inventory_reference_id   string     

The ID of the chemical inventory reference. Example: nihil

Supplier Providers

index

requires authentication

List selected solution providers

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/1/providers" \
    --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/incheck/1/providers"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/incheck/{organisation_id}/providers

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Levels

requires authentication

List all inCheck levels for a supplier

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/1/providers/levels" \
    --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/incheck/1/providers/levels"
);

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,
            "name": "Level 0",
            "legacy_report_level_display": "InCheck",
            "created_at": "2026-08-11T13:39:58.000000Z",
            "updated_at": "2026-08-11T13:39:58.000000Z"
        },
        {
            "id": 1,
            "name": "Level 0",
            "legacy_report_level_display": "InCheck",
            "created_at": "2026-08-11T13:39:58.000000Z",
            "updated_at": "2026-08-11T13:39:58.000000Z"
        }
    ]
}
 

Request      

GET api/incheck/{organisation_id}/providers/levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Sync

requires authentication

Sync relating Suppliers to Incheck Providers AND set the incheck level

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/1/providers/sync" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"level_ids\": [
        4
    ],
    \"provider_visibility_ids\": [
        19
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/incheck/1/providers/sync"
);

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

let body = {
    "level_ids": [
        4
    ],
    "provider_visibility_ids": [
        19
    ]
};

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

Request      

POST api/incheck/{organisation_id}/providers/sync

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

level_ids   integer[]  optional    

The id of an existing record in the incheck_levels table.

provider_visibility_ids   integer[]  optional    

The id of an existing record in the incheck_visibilities table.

Industry Identifiers

Index

Get a paginated list of industry identifiers.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/industry-identifiers?per_page=12&page=1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/industry-identifiers"
);

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

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


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

Example response (200):


{
    "data": [
        {
            "id": 2,
            "name": "HIGG ID"
        },
        {
            "id": 2,
            "name": "HIGG ID"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "50",
        "to": 2
    }
}
 

Request      

GET api/industry-identifiers

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Labels

Index

requires authentication

Get a list of labels for an organisation

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/labels?page=1&per_page=1&filter%5Blabelable_type%5D=quis&sort=name&search=et" \
    --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/organisations/1/labels"
);

const params = {
    "page": "1",
    "per_page": "1",
    "filter[labelable_type]": "quis",
    "sort": "name",
    "search": "et",
};
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": [
        [],
        []
    ]
}
 

Request      

GET api/organisations/{organisation_id}/labels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

filter[labelable_type]   string  optional    

Filter column labelable_type by any accepted value. Filter by labelable type (e.g. organisation_connection). See LabelableTypeEnum for allowed values. Example: quis

sort   string  optional    

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

search   string  optional    

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

Destroy

requires authentication

Delete a label.

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/labels/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/organisations/1/labels/1"
);

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


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

Request      

DELETE api/organisations/{organisation_id}/labels/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the label. Example: 1

Legacy ID Lookup

Legacy ID Lookup

requires authentication

Resolve a legacy identifier to a Gateway 2.0 reference_id from the database.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/legacy-id-lookup" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"entity\": \"omnis\",
    \"legacy_id\": \"ujdgrmbobfl\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/legacy-id-lookup"
);

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

let body = {
    "entity": "omnis",
    "legacy_id": "ujdgrmbobfl"
};

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

Example response (200, successful):


{
    "message": "OK",
    "data": {
        "entity": "organisations",
        "legacy_id": "A356IB10",
        "reference_id": "01-6FUUY46UMH-P"
    }
}
 

Example response (404, not found):


{
    "message": "No reference ID matches the entered legacy ID."
}
 

Request      

GET api/legacy-id-lookup

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

entity   string     

Example: omnis

legacy_id   string     

Must not be greater than 255 characters. Example: ujdgrmbobfl

Localisation

Locales

Get a list of all accepted locales

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/localisation/locales" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/localisation/locales"
);

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


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

Example response (200):


[
     {
         "en": "English",
         "zh": "英语",
     }
]
 

Request      

GET api/localisation/locales

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Locations

Get a list of all accepted locations

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/localisation/locations" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/localisation/locations"
);

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


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

Example response (200):


[
     {
         "AD": "Andorra",
         "AE": "United Arab Emirates",
         "AF": "Afghanistan",
         "AG": "Antigua and Barbuda",
     }
]
 

Request      

GET api/localisation/locations

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

MRSL Standards

Index

requires authentication

Get MRSL Standards

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard?per_page=16&page=1&filter%5Bconformance_level_id%5D=8&filter%5Bstatus%5D=iste&filter%5Bstart_date%5D=adipisci&filter%5Bend_date%5D=distinctio&filter%5Bcreated_at%5D=cumque&filter%5Bupdated_at%5D=molestiae&search=maiores&sort=name&column=name" \
    --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/organisation/1/chemical/certification/mrsl-standard"
);

const params = {
    "per_page": "16",
    "page": "1",
    "filter[conformance_level_id]": "8",
    "filter[status]": "iste",
    "filter[start_date]": "adipisci",
    "filter[end_date]": "distinctio",
    "filter[created_at]": "cumque",
    "filter[updated_at]": "molestiae",
    "search": "maiores",
    "sort": "name",
    "column": "name",
};
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,
            "reference_id": "30-BEM6XYP73DEC-L",
            "name": "Brachi Testing Services",
            "version": "ZDHC MRSL v2.0",
            "conformance_level_id": 1,
            "start_date": "2020-08-12T00:00:00.000000Z",
            "end_date": "2024-06-01T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2026-08-11T13:40:01.000000Z",
            "updated_at": "2026-08-11T13:40:01.000000Z",
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "organisations": [
                {
                    "id": 8866,
                    "maxio_customer_id": 436853,
                    "reference_id": "01-NLFUUQEDERJ9-J",
                    "pdc_id": null,
                    "gateway_aid": "A904AT31",
                    "uuid": "af138370-c9cb-4899-9461-0f58db21d54d",
                    "type_id": 7,
                    "status": "approved",
                    "is_test": false,
                    "name": "Brachi Testing Services S.r.l. Unipersonale_MRSL",
                    "legal_name": "Brachi Testing Services S.r.l. Unipersonale_MRSL",
                    "address_1": "Via Fona di Mezzana, 59100",
                    "address_2": null,
                    "city": "Mezzana",
                    "state": "Prato",
                    "location": "IT",
                    "zip": "",
                    "phone": "+390574591343",
                    "email": "giancarlo.diblasi@brachi.it",
                    "contact_first_name": "Giancarlo",
                    "contact_last_name": "Di Blasi",
                    "billing_contact_email": null,
                    "billing_contact_first_name": null,
                    "billing_contact_last_name": null,
                    "billing_contact_phone": null,
                    "business_registration_document_extension": null,
                    "business_registration_document_name": null,
                    "safety_data_sheet_name": null,
                    "website": null,
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": null,
                    "created_at": "2020-01-08T00:00:00.000000Z",
                    "updated_at": "2026-08-11T15:37:38.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Italy",
                    "pivot": {
                        "mrsl_standard_id": 1,
                        "organisation_id": 8866,
                        "id": 124,
                        "valid_until": "2024-06-01T00:00:00.000000Z",
                        "created_at": "2020-10-05T00:00:00.000000Z",
                        "updated_at": "2025-03-12T00:00:00.000000Z"
                    }
                }
            ]
        },
        {
            "id": 1,
            "reference_id": "30-BEM6XYP73DEC-L",
            "name": "Brachi Testing Services",
            "version": "ZDHC MRSL v2.0",
            "conformance_level_id": 1,
            "start_date": "2020-08-12T00:00:00.000000Z",
            "end_date": "2024-06-01T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2026-08-11T13:40:01.000000Z",
            "updated_at": "2026-08-11T13:40:01.000000Z",
            "conformance_level": {
                "id": 1,
                "name": "Level 1",
                "created_at": "2026-08-11T13:39:53.000000Z",
                "updated_at": "2026-08-11T13:39:53.000000Z"
            },
            "organisations": [
                {
                    "id": 8866,
                    "maxio_customer_id": 436853,
                    "reference_id": "01-NLFUUQEDERJ9-J",
                    "pdc_id": null,
                    "gateway_aid": "A904AT31",
                    "uuid": "af138370-c9cb-4899-9461-0f58db21d54d",
                    "type_id": 7,
                    "status": "approved",
                    "is_test": false,
                    "name": "Brachi Testing Services S.r.l. Unipersonale_MRSL",
                    "legal_name": "Brachi Testing Services S.r.l. Unipersonale_MRSL",
                    "address_1": "Via Fona di Mezzana, 59100",
                    "address_2": null,
                    "city": "Mezzana",
                    "state": "Prato",
                    "location": "IT",
                    "zip": "",
                    "phone": "+390574591343",
                    "email": "giancarlo.diblasi@brachi.it",
                    "contact_first_name": "Giancarlo",
                    "contact_last_name": "Di Blasi",
                    "billing_contact_email": null,
                    "billing_contact_first_name": null,
                    "billing_contact_last_name": null,
                    "billing_contact_phone": null,
                    "business_registration_document_extension": null,
                    "business_registration_document_name": null,
                    "safety_data_sheet_name": null,
                    "website": null,
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": null,
                    "created_at": "2020-01-08T00:00:00.000000Z",
                    "updated_at": "2026-08-11T15:37:38.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Italy",
                    "pivot": {
                        "mrsl_standard_id": 1,
                        "organisation_id": 8866,
                        "id": 124,
                        "valid_until": "2024-06-01T00:00:00.000000Z",
                        "created_at": "2020-10-05T00:00:00.000000Z",
                        "updated_at": "2025-03-12T00:00:00.000000Z"
                    }
                }
            ]
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/chemical/certification/mrsl-standard

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[conformance_level_id]   integer  optional    

Filter column conformance_level_id by any accepted value. Filter by conformance level ID Example: 8

filter[organisations.id]   integer  optional    

Filter column organisations.id by any accepted value. Filter by assigned organisation ID Example: 14

filter[status]   string  optional    

Filter column status by any accepted value. Filter by status Example: iste

filter[start_date]   date  optional    

Filter column start_date by any accepted value. Filter by start date Example: adipisci

filter[end_date]   date  optional    

Filter column end_date by any accepted value. Filter by end date Example: distinctio

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created at Example: cumque

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated at Example: molestiae

search   string  optional    

Search in all of these columns: name, version, reference_id. Filter type: like. Example: maiores

sort   string  optional    

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

column   string  optional    

get a distinct list of filterable values for any of the columns: name, version, status, conformance_level_id. Example: name

Show

requires authentication

Show a MRSL Standard

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard/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/organisation/1/chemical/certification/mrsl-standard/1"
);

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,
        "reference_id": "30-BEM6XYP73DEC-L",
        "name": "Brachi Testing Services",
        "version": "ZDHC MRSL v2.0",
        "conformance_level_id": 1,
        "start_date": "2020-08-12T00:00:00.000000Z",
        "end_date": "2024-06-01T00:00:00.000000Z",
        "status": "PASSED",
        "created_at": "2026-08-11T13:40:01.000000Z",
        "updated_at": "2026-08-11T13:40:01.000000Z",
        "conformance_level": {
            "id": 1,
            "name": "Level 1",
            "created_at": "2026-08-11T13:39:53.000000Z",
            "updated_at": "2026-08-11T13:39:53.000000Z"
        },
        "organisations": [
            {
                "id": 8866,
                "maxio_customer_id": 436853,
                "reference_id": "01-NLFUUQEDERJ9-J",
                "pdc_id": null,
                "gateway_aid": "A904AT31",
                "uuid": "af138370-c9cb-4899-9461-0f58db21d54d",
                "type_id": 7,
                "status": "approved",
                "is_test": false,
                "name": "Brachi Testing Services S.r.l. Unipersonale_MRSL",
                "legal_name": "Brachi Testing Services S.r.l. Unipersonale_MRSL",
                "address_1": "Via Fona di Mezzana, 59100",
                "address_2": null,
                "city": "Mezzana",
                "state": "Prato",
                "location": "IT",
                "zip": "",
                "phone": "+390574591343",
                "email": "giancarlo.diblasi@brachi.it",
                "contact_first_name": "Giancarlo",
                "contact_last_name": "Di Blasi",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": null,
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2020-01-08T00:00:00.000000Z",
                "updated_at": "2026-08-11T15:37:38.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Italy",
                "pivot": {
                    "mrsl_standard_id": 1,
                    "organisation_id": 8866,
                    "id": 124,
                    "valid_until": "2024-06-01T00:00:00.000000Z",
                    "created_at": "2020-10-05T00:00:00.000000Z",
                    "updated_at": "2025-03-12T00:00:00.000000Z"
                }
            }
        ]
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/certification/mrsl-standard/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the mrsl standard. Example: 1

Store

requires authentication

Create a new MRSL Standard

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"pj\",
    \"version\": \"okcyahynifkukxp\",
    \"conformance_level_id\": \"exercitationem\",
    \"start_date\": \"2026-09-21T18:31:39\",
    \"end_date\": \"2026-09-21T18:31:39\",
    \"status\": \"PASSED\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard"
);

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

let body = {
    "name": "pj",
    "version": "okcyahynifkukxp",
    "conformance_level_id": "exercitationem",
    "start_date": "2026-09-21T18:31:39",
    "end_date": "2026-09-21T18:31:39",
    "status": "PASSED"
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "reference_id": "30-BEM6XYP73DEC-L",
        "name": "Brachi Testing Services",
        "version": "ZDHC MRSL v2.0",
        "conformance_level_id": 1,
        "start_date": "2020-08-12T00:00:00.000000Z",
        "end_date": "2024-06-01T00:00:00.000000Z",
        "status": "PASSED",
        "created_at": "2026-08-11T13:40:01.000000Z",
        "updated_at": "2026-08-11T13:40:01.000000Z"
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/certification/mrsl-standard

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: pj

version   string     

Must not be greater than 255 characters. Example: okcyahynifkukxp

organisations   string[]  optional    

The id of an existing record in the organisations table.

conformance_level_id   string     

The id of an existing record in the conformance_levels table. Example: exercitationem

start_date   string     

Must be a valid date. Example: 2026-09-21T18:31:39

end_date   string  optional    

Must be a valid date. Example: 2026-09-21T18:31:39

status   string     

Example: PASSED

Must be one of:
  • FAILED
  • PASSED

Update

requires authentication

Update a MRSL Standard

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"uerrkjgthn\",
    \"version\": \"bba\",
    \"conformance_level_id\": \"tempore\",
    \"start_date\": \"2026-09-21T18:31:39\",
    \"end_date\": \"2026-09-21T18:31:39\",
    \"status\": \"FAILED\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard/1"
);

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

let body = {
    "name": "uerrkjgthn",
    "version": "bba",
    "conformance_level_id": "tempore",
    "start_date": "2026-09-21T18:31:39",
    "end_date": "2026-09-21T18:31:39",
    "status": "FAILED"
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "reference_id": "30-BEM6XYP73DEC-L",
        "name": "Brachi Testing Services",
        "version": "ZDHC MRSL v2.0",
        "conformance_level_id": 1,
        "start_date": "2020-08-12T00:00:00.000000Z",
        "end_date": "2024-06-01T00:00:00.000000Z",
        "status": "PASSED",
        "created_at": "2026-08-11T13:40:01.000000Z",
        "updated_at": "2026-08-11T13:40:01.000000Z"
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/certification/mrsl-standard/{id}

PATCH api/organisation/{organisation_id}/chemical/certification/mrsl-standard/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the mrsl standard. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: uerrkjgthn

version   string     

Must not be greater than 255 characters. Example: bba

organisations   string[]  optional    

The id of an existing record in the organisations table.

conformance_level_id   string     

The id of an existing record in the conformance_levels table. Example: tempore

start_date   string     

Must be a valid date. Example: 2026-09-21T18:31:39

end_date   string  optional    

Must be a valid date. Example: 2026-09-21T18:31:39

status   string     

Example: FAILED

Must be one of:
  • FAILED
  • PASSED

Organisations

Registration

Admin Register

requires authentication

Register a new organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/admin/organisations/registration/register" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=lawmpcopieu"\
    --form "legal_name=tsqnxhkeicnnxdagpyyrnjw"\
    --form "type_id=iure"\
    --form "is_test="\
    --form "address_1=sed"\
    --form "city=wexwjyfollyq"\
    --form "state=jeqn"\
    --form "location=ET"\
    --form "zip=eqabbkp"\
    --form "phone=+1234567890"\
    --form "email=triston.carroll@example.net"\
    --form "contact_first_name=autem"\
    --form "contact_last_name=non"\
    --form "billing_contact_email=joaquin.douglas@example.org"\
    --form "billing_contact_first_name=voluptates"\
    --form "billing_contact_last_name=corporis"\
    --form "billing_contact_phone=o"\
    --form "website=https://example.com"\
    --form "industry_ids[][id]=20"\
    --form "industry_ids[][value]=uaz"\
    --form "conformance_level_products[][id]=20"\
    --form "conformance_level_products[][count]=8"\
    --form "business_registration_document=@/tmp/phppgGpgM" \
    --form "safety_data_sheet=@/tmp/phpLmDGhM" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/admin/organisations/registration/register"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'lawmpcopieu');
body.append('legal_name', 'tsqnxhkeicnnxdagpyyrnjw');
body.append('type_id', 'iure');
body.append('is_test', '');
body.append('address_1', 'sed');
body.append('city', 'wexwjyfollyq');
body.append('state', 'jeqn');
body.append('location', 'ET');
body.append('zip', 'eqabbkp');
body.append('phone', '+1234567890');
body.append('email', 'triston.carroll@example.net');
body.append('contact_first_name', 'autem');
body.append('contact_last_name', 'non');
body.append('billing_contact_email', 'joaquin.douglas@example.org');
body.append('billing_contact_first_name', 'voluptates');
body.append('billing_contact_last_name', 'corporis');
body.append('billing_contact_phone', 'o');
body.append('website', 'https://example.com');
body.append('industry_ids[][id]', '20');
body.append('industry_ids[][value]', 'uaz');
body.append('conformance_level_products[][id]', '20');
body.append('conformance_level_products[][count]', '8');
body.append('business_registration_document', document.querySelector('input[name="business_registration_document"]').files[0]);
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);

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

Example response (200, Success):


{
    "message": "registered successfully",
    "referenceID": "[reference_id]"
}
 

Request      

POST api/admin/organisations/registration/register

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: lawmpcopieu

legal_name   string     

Must not be greater than 255 characters. Example: tsqnxhkeicnnxdagpyyrnjw

type_id   string     

The id of an existing record in the organisation_types table. Example: iure

is_test   boolean  optional    

Example: false

address_1   string     

Example: sed

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: wexwjyfollyq

state   string     

Must not be greater than 255 characters. Example: jeqn

location   string     

Example: ET

Must be one of:
  • AF
  • AX
  • AL
  • DZ
  • AS
  • AD
  • AO
  • AI
  • AQ
  • AG
  • AR
  • AM
  • AW
  • AU
  • AT
  • AZ
  • BS
  • BH
  • BD
  • BB
  • BY
  • BE
  • BZ
  • BJ
  • BM
  • BT
  • BO
  • BA
  • BW
  • BV
  • BR
  • IO
  • VG
  • BN
  • BG
  • BF
  • BI
  • KH
  • CM
  • CA
  • CV
  • BQ
  • KY
  • CF
  • TD
  • CL
  • CN
  • CX
  • CC
  • CO
  • KM
  • CG
  • CD
  • CK
  • CR
  • CI
  • HR
  • CU
  • CW
  • CY
  • CZ
  • DK
  • DJ
  • DM
  • DO
  • EC
  • EG
  • SV
  • GQ
  • ER
  • EE
  • SZ
  • ET
  • FK
  • FO
  • FJ
  • FI
  • FR
  • GF
  • PF
  • TF
  • GA
  • GM
  • GE
  • DE
  • GH
  • GI
  • GR
  • GL
  • GD
  • GP
  • GU
  • GT
  • GG
  • GN
  • GW
  • GY
  • HT
  • HM
  • HN
  • HK
  • HU
  • IS
  • IN
  • ID
  • IR
  • IQ
  • IE
  • IM
  • IL
  • IT
  • JM
  • JP
  • JE
  • JO
  • KZ
  • KE
  • KI
  • KW
  • KG
  • LA
  • LV
  • LB
  • LS
  • LR
  • LY
  • LI
  • LT
  • LU
  • MO
  • MG
  • MW
  • MY
  • MV
  • ML
  • MT
  • MH
  • MQ
  • MR
  • MU
  • YT
  • MX
  • FM
  • MD
  • MC
  • MN
  • ME
  • MS
  • MA
  • MZ
  • MM
  • NA
  • NR
  • NP
  • NL
  • NC
  • NZ
  • NI
  • NE
  • NG
  • NU
  • NF
  • KP
  • MK
  • MP
  • NO
  • OM
  • PK
  • PW
  • PS
  • PA
  • PG
  • PY
  • PE
  • PH
  • PN
  • PL
  • PT
  • PR
  • QA
  • RE
  • RO
  • RU
  • RW
  • WS
  • SM
  • ST
  • SA
  • SN
  • RS
  • SC
  • SL
  • SG
  • SX
  • SK
  • SI
  • SB
  • SO
  • ZA
  • GS
  • KR
  • SS
  • ES
  • LK
  • BL
  • SH
  • KN
  • LC
  • MF
  • PM
  • VC
  • SD
  • SR
  • SJ
  • SE
  • CH
  • SY
  • TW
  • TJ
  • TZ
  • TH
  • TL
  • TG
  • TK
  • TO
  • TT
  • TN
  • TR
  • TM
  • TC
  • TV
  • UM
  • VI
  • UG
  • UA
  • AE
  • GB
  • US
  • UY
  • UZ
  • VU
  • VA
  • VE
  • VN
  • WF
  • EH
  • YE
  • ZM
  • ZW
zip   string     

Must not be greater than 64 characters. Example: eqabbkp

phone   string  optional    

Must be at least 8 characters. Must not be greater than 16 characters. Example: +1234567890

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: triston.carroll@example.net

contact_first_name   string     

Example: autem

contact_last_name   string     

Example: non

billing_contact_email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: joaquin.douglas@example.org

billing_contact_first_name   string     

Example: voluptates

billing_contact_last_name   string     

Example: corporis

billing_contact_phone   string     

Must be at least 8 characters. Must not be greater than 16 characters. Example: o

business_registration_document   file  optional    

Business registration document provided as a file upload (PDF, JPG, or PNG). Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phppgGpgM

website   string  optional    

[MANDATORY ONLY FOR: Vendors & Chemical Formulators] The website of the organisation. Must not be greater than 255 characters. Example: https://example.com

industry_ids   object[]  optional    

[ONLY: Suppliers & Vendors] The industry identifiers associated with the organisation.

id   integer  optional    

This field is required when industry_ids.*.value is present. The id of an existing record in the industry_identifiers table. Example: 20

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: uaz

safety_data_sheet   file  optional    

[ONLY: Chemical Formulators] Safety data sheet provided as a file upload. Must be a file. Example: /tmp/phpLmDGhM

conformance_level_products   object[]  optional    
id   integer  optional    

This field is required when conformance_level_products.*.count is present. The id of an existing record in the conformance_levels table. Example: 20

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 8

Register

requires authentication

Register a new organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/register/1?email=ptremblay%40example.org&user_id=0&user_is_registered=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "user_first_name=mrsyawi"\
    --form "user_last_name=vn"\
    --form "user_password=gr"\
    --form "user_password_confirmation=itaque"\
    --form "user_phone=dizqdlfetvvitwzq"\
    --form "user_locale=es_BO"\
    --form "user_location=jh"\
    --form "address_1=doloribus"\
    --form "city=qnnednpiueaeh"\
    --form "state=cugmgjuairomwz"\
    --form "location=SS"\
    --form "zip=geisvdaizlupxodqq"\
    --form "phone=sllsogxpfb"\
    --form "email=walker.casper@example.net"\
    --form "contact_first_name=veniam"\
    --form "contact_last_name=asperiores"\
    --form "billing_contact_email=marlon.mckenzie@example.org"\
    --form "billing_contact_first_name=reiciendis"\
    --form "billing_contact_last_name=odio"\
    --form "billing_contact_phone=hsuhoogxwqfhk"\
    --form "website=yuhebsoipbvwsvfkcyapoj"\
    --form "name=uctgdzmygatweqjmvjdlongb"\
    --form "legal_name=tmfnvpwjabzldxw"\
    --form "tas_document_id=animi"\
    --form "tas_accepted=1"\
    --form "industry_ids[][id]=13"\
    --form "industry_ids[][value]=znhdimnavjrzehpd"\
    --form "conformance_level_products[][id]=5"\
    --form "conformance_level_products[][count]=41"\
    --form "business_registration_document=@/tmp/phpGABIIA" \
    --form "safety_data_sheet=@/tmp/phpioNOIA" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/register/1"
);

const params = {
    "email": "ptremblay@example.org",
    "user_id": "0",
    "user_is_registered": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

const body = new FormData();
body.append('user_first_name', 'mrsyawi');
body.append('user_last_name', 'vn');
body.append('user_password', 'gr');
body.append('user_password_confirmation', 'itaque');
body.append('user_phone', 'dizqdlfetvvitwzq');
body.append('user_locale', 'es_BO');
body.append('user_location', 'jh');
body.append('address_1', 'doloribus');
body.append('city', 'qnnednpiueaeh');
body.append('state', 'cugmgjuairomwz');
body.append('location', 'SS');
body.append('zip', 'geisvdaizlupxodqq');
body.append('phone', 'sllsogxpfb');
body.append('email', 'walker.casper@example.net');
body.append('contact_first_name', 'veniam');
body.append('contact_last_name', 'asperiores');
body.append('billing_contact_email', 'marlon.mckenzie@example.org');
body.append('billing_contact_first_name', 'reiciendis');
body.append('billing_contact_last_name', 'odio');
body.append('billing_contact_phone', 'hsuhoogxwqfhk');
body.append('website', 'yuhebsoipbvwsvfkcyapoj');
body.append('name', 'uctgdzmygatweqjmvjdlongb');
body.append('legal_name', 'tmfnvpwjabzldxw');
body.append('tas_document_id', 'animi');
body.append('tas_accepted', '1');
body.append('industry_ids[][id]', '13');
body.append('industry_ids[][value]', 'znhdimnavjrzehpd');
body.append('conformance_level_products[][id]', '5');
body.append('conformance_level_products[][count]', '41');
body.append('business_registration_document', document.querySelector('input[name="business_registration_document"]').files[0]);
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);

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

Example response (200, Success):


{
    "message": "registered successfully",
    "organisationID": "[id]",
    "registrationID": "[uuid]"
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

POST api/organisations/registration/register/{invitation_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

invitation_id   integer     

The ID of the invitation. Example: 1

Query Parameters

email   string     

required Example: ptremblay@example.org

user_id   number     

required Example: 0

user_is_registered   boolean     

required Example: true

Body Parameters

user_first_name   string     

(Only required for unregistered users). Must be at least 2 characters. Must not be greater than 50 characters. Example: mrsyawi

user_last_name   string     

(Only required for unregistered users). Must be at least 2 characters. Must not be greater than 50 characters. Example: vn

user_password   string     

(Only required for unregistered users). Must not be greater than 255 characters. Example: gr

user_password_confirmation   string     

(Only required for unregistered users). The value and user_password must match. Example: itaque

user_phone   string  optional    

(Only required for unregistered users). Must be at least 8 characters. Must not be greater than 16 characters. Example: dizqdlfetvvitwzq

user_locale   string  optional    

(Only required for unregistered users). Must not be greater than 12 characters. Example: es_BO

user_location   string  optional    

(Only required for unregistered users). Must not be greater than 255 characters. Example: jh

address_1   string     

Example: doloribus

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: qnnednpiueaeh

state   string     

Must not be greater than 255 characters. Example: cugmgjuairomwz

location   string     

Example: SS

Must be one of:
  • AF
  • AX
  • AL
  • DZ
  • AS
  • AD
  • AO
  • AI
  • AQ
  • AG
  • AR
  • AM
  • AW
  • AU
  • AT
  • AZ
  • BS
  • BH
  • BD
  • BB
  • BY
  • BE
  • BZ
  • BJ
  • BM
  • BT
  • BO
  • BA
  • BW
  • BV
  • BR
  • IO
  • VG
  • BN
  • BG
  • BF
  • BI
  • KH
  • CM
  • CA
  • CV
  • BQ
  • KY
  • CF
  • TD
  • CL
  • CN
  • CX
  • CC
  • CO
  • KM
  • CG
  • CD
  • CK
  • CR
  • CI
  • HR
  • CU
  • CW
  • CY
  • CZ
  • DK
  • DJ
  • DM
  • DO
  • EC
  • EG
  • SV
  • GQ
  • ER
  • EE
  • SZ
  • ET
  • FK
  • FO
  • FJ
  • FI
  • FR
  • GF
  • PF
  • TF
  • GA
  • GM
  • GE
  • DE
  • GH
  • GI
  • GR
  • GL
  • GD
  • GP
  • GU
  • GT
  • GG
  • GN
  • GW
  • GY
  • HT
  • HM
  • HN
  • HK
  • HU
  • IS
  • IN
  • ID
  • IR
  • IQ
  • IE
  • IM
  • IL
  • IT
  • JM
  • JP
  • JE
  • JO
  • KZ
  • KE
  • KI
  • KW
  • KG
  • LA
  • LV
  • LB
  • LS
  • LR
  • LY
  • LI
  • LT
  • LU
  • MO
  • MG
  • MW
  • MY
  • MV
  • ML
  • MT
  • MH
  • MQ
  • MR
  • MU
  • YT
  • MX
  • FM
  • MD
  • MC
  • MN
  • ME
  • MS
  • MA
  • MZ
  • MM
  • NA
  • NR
  • NP
  • NL
  • NC
  • NZ
  • NI
  • NE
  • NG
  • NU
  • NF
  • KP
  • MK
  • MP
  • NO
  • OM
  • PK
  • PW
  • PS
  • PA
  • PG
  • PY
  • PE
  • PH
  • PN
  • PL
  • PT
  • PR
  • QA
  • RE
  • RO
  • RU
  • RW
  • WS
  • SM
  • ST
  • SA
  • SN
  • RS
  • SC
  • SL
  • SG
  • SX
  • SK
  • SI
  • SB
  • SO
  • ZA
  • GS
  • KR
  • SS
  • ES
  • LK
  • BL
  • SH
  • KN
  • LC
  • MF
  • PM
  • VC
  • SD
  • SR
  • SJ
  • SE
  • CH
  • SY
  • TW
  • TJ
  • TZ
  • TH
  • TL
  • TG
  • TK
  • TO
  • TT
  • TN
  • TR
  • TM
  • TC
  • TV
  • UM
  • VI
  • UG
  • UA
  • AE
  • GB
  • US
  • UY
  • UZ
  • VU
  • VA
  • VE
  • VN
  • WF
  • EH
  • YE
  • ZM
  • ZW
zip   string     

Must not be greater than 64 characters. Example: geisvdaizlupxodqq

phone   string  optional    

Must be at least 8 characters. Must not be greater than 16 characters. Example: sllsogxpfb

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: walker.casper@example.net

contact_first_name   string     

Example: veniam

contact_last_name   string     

Example: asperiores

billing_contact_email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: marlon.mckenzie@example.org

billing_contact_first_name   string     

Example: reiciendis

billing_contact_last_name   string     

Example: odio

billing_contact_phone   string     

Must be at least 8 characters. Must not be greater than 16 characters. Example: hsuhoogxwqfhk

business_registration_document   file     

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpGABIIA

website   string  optional    

Must not be greater than 255 characters. Example: yuhebsoipbvwsvfkcyapoj

industry_ids   object[]  optional    
id   integer  optional    

This field is required when industry_ids.*.value is present. The id of an existing record in the industry_identifiers table. Example: 13

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: znhdimnavjrzehpd

safety_data_sheet   file     

Must be a file. Example: /tmp/phpioNOIA

conformance_level_products   object[]  optional    
id   integer  optional    

This field is required when conformance_level_products.*.count is present. The id of an existing record in the conformance_levels table. Example: 5

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 41

name   string     

Must not be greater than 255 characters. Example: uctgdzmygatweqjmvjdlongb

legal_name   string     

Must not be greater than 255 characters. Example: tmfnvpwjabzldxw

tas_document_id   string     

The id of an existing record in the App\Models\TermsAndServiceDocument table. Example: animi

tas_accepted   boolean     

Must be accepted. Example: true

Status

See a non-active organisation's registration status.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/dbe9c009-5a8a-3457-8b57-7931306e0b50/status" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/dbe9c009-5a8a-3457-8b57-7931306e0b50/status"
);

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


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

Example response (200):


{
    "data": {
        "id": 1,
        "maxio_customer_id": 418364,
        "reference_id": "01-7TXNQR4L9PFH-I",
        "pdc_id": null,
        "gateway_aid": "A356IB10",
        "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
        "type_id": 2,
        "status": "approved",
        "is_test": false,
        "name": "Ping Yang Pengye Shoes Com Ltd",
        "legal_name": "Ping Yang Pengye Shoes Com Ltd",
        "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
        "address_2": null,
        "city": "Wenzhou",
        "state": "Zhejiang",
        "location": "CN",
        "zip": "",
        "phone": "",
        "email": "pengye@126.com",
        "contact_first_name": "JIAN",
        "contact_last_name": "Le",
        "billing_contact_email": null,
        "billing_contact_first_name": null,
        "billing_contact_last_name": null,
        "billing_contact_phone": null,
        "business_registration_document_extension": null,
        "business_registration_document_name": null,
        "safety_data_sheet_name": null,
        "website": null,
        "avatar_url": null,
        "applicant_comment": null,
        "reviewer_comment": null,
        "registration_mail_sent_at": null,
        "created_at": "2021-11-04T12:19:55.000000Z",
        "updated_at": "2026-08-11T15:37:26.000000Z",
        "reviewer_comment_category": null,
        "profile_reviewed_at": null,
        "profile_reviewed_by_user_id": null,
        "location_name": "China",
        "type": {
            "id": 2,
            "name": "Supplier",
            "display_name": "Supplier",
            "description": null,
            "selectable": 1,
            "created_at": "2026-08-11T13:39:51.000000Z",
            "updated_at": "2026-09-21T18:31:33.000000Z"
        },
        "industry_identifiers": [],
        "conformance_level_products": [],
        "field_comments": null
    }
}
 

Request      

GET api/organisations/registration/{organisation_uuid}/status

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_uuid   string     

Example: dbe9c009-5a8a-3457-8b57-7931306e0b50

Update

Update the organisations data from the user side.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/8252b233-bb1a-325d-8a1d-19f6c7017f73/update" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "address_1=nulla"\
    --form "city=l"\
    --form "state=onktngxihalyqg"\
    --form "location=GP"\
    --form "zip=seztzc"\
    --form "phone=+1234567890"\
    --form "email=davis.macie@example.org"\
    --form "contact_first_name=beatae"\
    --form "contact_last_name=corrupti"\
    --form "billing_contact_email=hegmann.wava@example.net"\
    --form "billing_contact_first_name=neque"\
    --form "billing_contact_last_name=aliquid"\
    --form "billing_contact_phone=i"\
    --form "website=https://example.com"\
    --form "name=bzs"\
    --form "legal_name=ugxrezyabqdurrtnsoy"\
    --form "applicant_comment=blanditiis"\
    --form "industry_ids[][id]=14"\
    --form "industry_ids[][value]=fbqwgmfoolwfanjkzlwjqvv"\
    --form "conformance_level_products[][id]=1"\
    --form "conformance_level_products[][count]=43"\
    --form "business_registration_document=@/tmp/phpGbLikA" \
    --form "safety_data_sheet=@/tmp/phpNgpnkA" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/8252b233-bb1a-325d-8a1d-19f6c7017f73/update"
);

const headers = {
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('address_1', 'nulla');
body.append('city', 'l');
body.append('state', 'onktngxihalyqg');
body.append('location', 'GP');
body.append('zip', 'seztzc');
body.append('phone', '+1234567890');
body.append('email', 'davis.macie@example.org');
body.append('contact_first_name', 'beatae');
body.append('contact_last_name', 'corrupti');
body.append('billing_contact_email', 'hegmann.wava@example.net');
body.append('billing_contact_first_name', 'neque');
body.append('billing_contact_last_name', 'aliquid');
body.append('billing_contact_phone', 'i');
body.append('website', 'https://example.com');
body.append('name', 'bzs');
body.append('legal_name', 'ugxrezyabqdurrtnsoy');
body.append('applicant_comment', 'blanditiis');
body.append('industry_ids[][id]', '14');
body.append('industry_ids[][value]', 'fbqwgmfoolwfanjkzlwjqvv');
body.append('conformance_level_products[][id]', '1');
body.append('conformance_level_products[][count]', '43');
body.append('business_registration_document', document.querySelector('input[name="business_registration_document"]').files[0]);
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);

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

Example response (200, Success):


{
    "message": "updated successfully"
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

PUT api/organisations/registration/{organisation_uuid}/update

PATCH api/organisations/registration/{organisation_uuid}/update

Headers

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_uuid   string     

Example: 8252b233-bb1a-325d-8a1d-19f6c7017f73

Body Parameters

address_1   string     

Example: nulla

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: l

state   string     

Must not be greater than 255 characters. Example: onktngxihalyqg

location   string     

Example: GP

Must be one of:
  • AF
  • AX
  • AL
  • DZ
  • AS
  • AD
  • AO
  • AI
  • AQ
  • AG
  • AR
  • AM
  • AW
  • AU
  • AT
  • AZ
  • BS
  • BH
  • BD
  • BB
  • BY
  • BE
  • BZ
  • BJ
  • BM
  • BT
  • BO
  • BA
  • BW
  • BV
  • BR
  • IO
  • VG
  • BN
  • BG
  • BF
  • BI
  • KH
  • CM
  • CA
  • CV
  • BQ
  • KY
  • CF
  • TD
  • CL
  • CN
  • CX
  • CC
  • CO
  • KM
  • CG
  • CD
  • CK
  • CR
  • CI
  • HR
  • CU
  • CW
  • CY
  • CZ
  • DK
  • DJ
  • DM
  • DO
  • EC
  • EG
  • SV
  • GQ
  • ER
  • EE
  • SZ
  • ET
  • FK
  • FO
  • FJ
  • FI
  • FR
  • GF
  • PF
  • TF
  • GA
  • GM
  • GE
  • DE
  • GH
  • GI
  • GR
  • GL
  • GD
  • GP
  • GU
  • GT
  • GG
  • GN
  • GW
  • GY
  • HT
  • HM
  • HN
  • HK
  • HU
  • IS
  • IN
  • ID
  • IR
  • IQ
  • IE
  • IM
  • IL
  • IT
  • JM
  • JP
  • JE
  • JO
  • KZ
  • KE
  • KI
  • KW
  • KG
  • LA
  • LV
  • LB
  • LS
  • LR
  • LY
  • LI
  • LT
  • LU
  • MO
  • MG
  • MW
  • MY
  • MV
  • ML
  • MT
  • MH
  • MQ
  • MR
  • MU
  • YT
  • MX
  • FM
  • MD
  • MC
  • MN
  • ME
  • MS
  • MA
  • MZ
  • MM
  • NA
  • NR
  • NP
  • NL
  • NC
  • NZ
  • NI
  • NE
  • NG
  • NU
  • NF
  • KP
  • MK
  • MP
  • NO
  • OM
  • PK
  • PW
  • PS
  • PA
  • PG
  • PY
  • PE
  • PH
  • PN
  • PL
  • PT
  • PR
  • QA
  • RE
  • RO
  • RU
  • RW
  • WS
  • SM
  • ST
  • SA
  • SN
  • RS
  • SC
  • SL
  • SG
  • SX
  • SK
  • SI
  • SB
  • SO
  • ZA
  • GS
  • KR
  • SS
  • ES
  • LK
  • BL
  • SH
  • KN
  • LC
  • MF
  • PM
  • VC
  • SD
  • SR
  • SJ
  • SE
  • CH
  • SY
  • TW
  • TJ
  • TZ
  • TH
  • TL
  • TG
  • TK
  • TO
  • TT
  • TN
  • TR
  • TM
  • TC
  • TV
  • UM
  • VI
  • UG
  • UA
  • AE
  • GB
  • US
  • UY
  • UZ
  • VU
  • VA
  • VE
  • VN
  • WF
  • EH
  • YE
  • ZM
  • ZW
zip   string     

Must not be greater than 64 characters. Example: seztzc

phone   string  optional    

Must be at least 8 characters. Must not be greater than 16 characters. Example: +1234567890

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: davis.macie@example.org

contact_first_name   string     

Example: beatae

contact_last_name   string     

Example: corrupti

billing_contact_email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: hegmann.wava@example.net

billing_contact_first_name   string     

Example: neque

billing_contact_last_name   string     

Example: aliquid

billing_contact_phone   string     

Must be at least 8 characters. Must not be greater than 16 characters. Example: i

business_registration_document   file     

Business registration document provided as a file upload (PDF, JPG, or PNG). Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpGbLikA

website   string  optional    

[MANDATORY ONLY FOR: Vendors & Chemical Formulators] The website of the organisation. Must not be greater than 255 characters. Example: https://example.com

industry_ids   object[]  optional    

[ONLY: Suppliers & Vendors] The industry identifiers associated with the organisation.

id   integer  optional    

This field is required when industry_ids.*.value is present. The id of an existing record in the industry_identifiers table. Example: 14

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: fbqwgmfoolwfanjkzlwjqvv

safety_data_sheet   file     

[ONLY: Chemical Formulators] Safety data sheet provided as a file upload. Must be a file. Example: /tmp/phpNgpnkA

conformance_level_products   object[]  optional    
id   integer  optional    

This field is required when conformance_level_products.*.count is present. The id of an existing record in the conformance_levels table. Example: 1

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 43

name   string  optional    

Must not be greater than 255 characters. Example: bzs

legal_name   string  optional    

Must not be greater than 255 characters. Example: ugxrezyabqdurrtnsoy

applicant_comment   string  optional    

Example: blanditiis

Allowed Connections

Index

requires authentication

List all organisation connections

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/organisation/1/allowed-connections?per_page=3&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/organisations/organisation/1/allowed-connections"
);

const params = {
    "per_page": "3",
    "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,
            "source_type_id": 4,
            "target_type_id": 2,
            "deactivated": 0,
            "created_at": "2026-05-18T16:16:07.000000Z",
            "updated_at": "2026-05-18T16:16:07.000000Z",
            "source": {
                "id": 4,
                "name": "Brand",
                "display_name": "Brand",
                "description": null,
                "selectable": 1,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-09-21T18:31:33.000000Z"
            },
            "target": {
                "id": 2,
                "name": "Supplier",
                "display_name": "Supplier",
                "description": null,
                "selectable": 1,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-09-21T18:31:33.000000Z"
            }
        },
        {
            "id": 1,
            "source_type_id": 4,
            "target_type_id": 2,
            "deactivated": 0,
            "created_at": "2026-05-18T16:16:07.000000Z",
            "updated_at": "2026-05-18T16:16:07.000000Z",
            "source": {
                "id": 4,
                "name": "Brand",
                "display_name": "Brand",
                "description": null,
                "selectable": 1,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-09-21T18:31:33.000000Z"
            },
            "target": {
                "id": 2,
                "name": "Supplier",
                "display_name": "Supplier",
                "description": null,
                "selectable": 1,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-09-21T18:31:33.000000Z"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisations/organisation/{organisation_id}/allowed-connections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Store

requires authentication

Store an organisation connection

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/organisation/1/allowed-connections" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"source_type_id\": 10,
    \"target_type_id\": 13,
    \"deactivated\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/organisation/1/allowed-connections"
);

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

let body = {
    "source_type_id": 10,
    "target_type_id": 13,
    "deactivated": false
};

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "source_type_id": 4,
            "target_type_id": 2,
            "deactivated": 0,
            "created_at": "2026-05-18T16:16:07.000000Z",
            "updated_at": "2026-05-18T16:16:07.000000Z"
        },
        {
            "id": 1,
            "source_type_id": 4,
            "target_type_id": 2,
            "deactivated": 0,
            "created_at": "2026-05-18T16:16:07.000000Z",
            "updated_at": "2026-05-18T16:16:07.000000Z"
        }
    ]
}
 

Request      

POST api/organisations/organisation/{organisation_id}/allowed-connections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

source_type_id   integer     

The id of an existing record in the organisation_types table. Example: 10

target_type_id   integer     

The id of an existing record in the organisation_types table. Example: 13

deactivated   boolean  optional    

Example: false

Destroy

requires authentication

Destroy an organisation connection

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/organisation/1/allowed-connections/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/organisations/organisation/1/allowed-connections/1"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

DELETE api/organisations/organisation/{organisation_id}/allowed-connections/{connection_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Selectable target types

requires authentication

Get types that are selectable for a connection

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/selectable-target-types" \
    --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/organisations/1/connections/selectable-target-types"
);

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": [
        1,
        2,
        3
    ]
}
 

Request      

GET api/organisations/{organisation_id}/connections/selectable-target-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Connection Associations

Index

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/associations?per_page=16&page=1&search=provident&filter%5Btype%5D=suppliers_to_brand&filter%5Bfrom_organisation_connection_id%5D=18&filter%5Bfrom_organisation_id%5D=2&filter%5Bcreated_at%5D=%3E%3D+2026-10-11+18%3A31%3A42&filter%5Bupdated_at%5D=%3D+2026-10-03+18%3A31%3A42&sort=type" \
    --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/organisations/1/connections/1/associations"
);

const params = {
    "per_page": "16",
    "page": "1",
    "search": "provident",
    "filter[type]": "suppliers_to_brand",
    "filter[from_organisation_connection_id]": "18",
    "filter[from_organisation_id]": "2",
    "filter[created_at]": ">= 2026-10-11 18:31:42",
    "filter[updated_at]": "= 2026-10-03 18:31:42",
    "sort": "type",
};
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": 59,
            "type": "suppliers_to_brand",
            "to_endpoint": "receiving_organisation",
            "to_organisation_connection": {
                "id": 29327,
                "sending_organisation_id": 21838,
                "receiving_organisation_id": 21840,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:43.000000Z",
                "updated_at": "2026-09-21T18:31:43.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "from_endpoint": "sending_organisation",
            "from_organisation_connection": {
                "id": 29326,
                "sending_organisation_id": 21839,
                "receiving_organisation_id": 21840,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:43.000000Z",
                "updated_at": "2026-09-21T18:31:43.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "created_at": "2026-09-21T18:31:43.000000Z",
            "updated_at": "2026-09-21T18:31:43.000000Z"
        },
        {
            "id": 59,
            "type": "suppliers_to_brand",
            "to_endpoint": "receiving_organisation",
            "to_organisation_connection": {
                "id": 29327,
                "sending_organisation_id": 21838,
                "receiving_organisation_id": 21840,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:43.000000Z",
                "updated_at": "2026-09-21T18:31:43.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "from_endpoint": "sending_organisation",
            "from_organisation_connection": {
                "id": 29326,
                "sending_organisation_id": 21839,
                "receiving_organisation_id": 21840,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:43.000000Z",
                "updated_at": "2026-09-21T18:31:43.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "created_at": "2026-09-21T18:31:43.000000Z",
            "updated_at": "2026-09-21T18:31:43.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/connections/{connection_id}/associations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: from_organisation_name, from_organisation_location. Filter type: like. Example: provident

filter[type]   string  optional    

Filter column type by any accepted value. Matches exact value. Example: suppliers_to_brand

Must be one of:
  • suppliers_to_brand
filter[from_organisation_connection_id]   integer  optional    

Filter column from_organisation_connection_id by any accepted value. From connection id. Example: 18

filter[from_organisation_id]   integer  optional    

Filter column from_organisation_id by any accepted value. Resolved “from” organisation id (matches sending/receiving on the from connection per from_endpoint). Example: 2

filter[created_at]   datetime  optional    

Filter column created_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:31:42

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-03 18:31:42

sort   string  optional    

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

Sync

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/associations/sync" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"suppliers_to_brand\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/associations/sync"
);

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

let body = {
    "type": "suppliers_to_brand"
};

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

Example response (200):


{
    "data": [
        {
            "id": 60,
            "type": "suppliers_to_brand",
            "to_endpoint": "receiving_organisation",
            "to_organisation_connection": {
                "id": 29330,
                "sending_organisation_id": 21841,
                "receiving_organisation_id": 21843,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:44.000000Z",
                "updated_at": "2026-09-21T18:31:44.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "from_endpoint": "sending_organisation",
            "from_organisation_connection": {
                "id": 29329,
                "sending_organisation_id": 21842,
                "receiving_organisation_id": 21843,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:44.000000Z",
                "updated_at": "2026-09-21T18:31:44.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "created_at": "2026-09-21T18:31:44.000000Z",
            "updated_at": "2026-09-21T18:31:44.000000Z"
        },
        {
            "id": 60,
            "type": "suppliers_to_brand",
            "to_endpoint": "receiving_organisation",
            "to_organisation_connection": {
                "id": 29330,
                "sending_organisation_id": 21841,
                "receiving_organisation_id": 21843,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:44.000000Z",
                "updated_at": "2026-09-21T18:31:44.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "from_endpoint": "sending_organisation",
            "from_organisation_connection": {
                "id": 29329,
                "sending_organisation_id": 21842,
                "receiving_organisation_id": 21843,
                "accepted_at": null,
                "disconnected_at": null,
                "rejected_at": null,
                "created_at": "2026-09-21T18:31:44.000000Z",
                "updated_at": "2026-09-21T18:31:44.000000Z",
                "status": "pending",
                "sharing_settings": []
            },
            "created_at": "2026-09-21T18:31:44.000000Z",
            "updated_at": "2026-09-21T18:31:44.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

POST api/organisations/{organisation_id}/connections/{connection_id}/associations/sync

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Body Parameters

type   string     

List of allowed association types. Allowed types depend on the organisation type:

  • Vendor:
    • suppliers_to_brand. Example: suppliers_to_brand
Must be one of:
  • suppliers_to_brand
organisation_connection_ids   object  optional    

List of organisation connection IDs to sync the association with. The connections have to be active and the counterpart organisation type has to be allowed for the selected association type. The id of an existing record in the organisation_connections table.

Connections

Index

requires authentication

List all organisation connections

Each item in data can include one integer field per {@see OrganisationConnectionAssociationTypeEnum} case: {type}_association_count (e.g. suppliers_to_brand_association_count), from withCount on the connection model.

search matches the other party's organisation name and legal name (partial), its reference_id (partial), its id (exact), its location (country name resolved to the stored country code) and the names of the labels the requesting organisation attached to the connection (partial).

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections?per_page=7&page=1&search=expedita&filter%5Bstatus%5D=et&filter%5Binitiated_by%5D=ea&filter%5Blabels%5D=id&filter%5Borganisation_type%5D=repellendus&filter%5Borganisation_location%5D=est&filter%5Bsharing%5D=ex" \
    --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/organisations/1/connections"
);

const params = {
    "per_page": "7",
    "page": "1",
    "search": "expedita",
    "filter[status]": "et",
    "filter[initiated_by]": "ea",
    "filter[labels]": "id",
    "filter[organisation_type]": "repellendus",
    "filter[organisation_location]": "est",
    "filter[sharing]": "ex",
};
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,
            "sending_organisation_id": 18880,
            "receiving_organisation_id": 17322,
            "accepted_at": "2021-01-15 00:00:00",
            "disconnected_at": null,
            "rejected_at": null,
            "created_at": "2021-01-15T00:00:00.000000Z",
            "updated_at": "2021-01-15T00:00:00.000000Z",
            "status": "active",
            "receiving_organisation": {
                "id": 17322,
                "maxio_customer_id": 449338,
                "reference_id": "01-HVE8HZ3VX64D-Z",
                "pdc_id": null,
                "gateway_aid": "A284DO88",
                "uuid": "8ae99159-9d60-4c62-921b-cb4b75028182",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Bindal Silk Mills Private Limited",
                "legal_name": "Bindal Silk Mills Private Limited",
                "address_1": "p-216,kadodara",
                "address_2": null,
                "city": "Surat",
                "state": "Gujarat",
                "location": "IN",
                "zip": "394327",
                "phone": "02622 271009,",
                "email": "mail@bindalmill.com",
                "contact_first_name": "avichal",
                "contact_last_name": "arya",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": null,
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2017-09-27T03:26:36.000000Z",
                "updated_at": "2026-08-11T15:37:48.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "India",
                "type": {
                    "id": 2,
                    "name": "Supplier",
                    "display_name": "Supplier",
                    "description": null,
                    "selectable": 1,
                    "created_at": "2026-08-11T13:39:51.000000Z",
                    "updated_at": "2026-09-21T18:31:33.000000Z"
                }
            },
            "sending_organisation": {
                "id": 18880,
                "maxio_customer_id": 452434,
                "reference_id": "01-4J9DPSBBP3WQ-F",
                "pdc_id": null,
                "gateway_aid": "A137YR68",
                "uuid": "2b09c75c-48fd-4095-a444-f77ca28d6d81",
                "type_id": 4,
                "status": "approved",
                "is_test": false,
                "name": "Primark",
                "legal_name": "Primark",
                "address_1": "10 Grosvenor Street, London, W1K 4QY",
                "address_2": null,
                "city": "City Of London",
                "state": "London",
                "location": "GB",
                "zip": "RG1 1TZ",
                "phone": "+44 7525203334",
                "email": "pwalters@primark.co.uk",
                "contact_first_name": "HANDE",
                "contact_last_name": "Tezer",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://www.primark.com/en/homepage",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2017-08-01T00:00:00.000000Z",
                "updated_at": "2026-08-12T17:59:04.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-08-12 17:59:04",
                "profile_reviewed_by_user_id": 6016,
                "location_name": "United Kingdom",
                "type": {
                    "id": 4,
                    "name": "Brand",
                    "display_name": "Brand",
                    "description": null,
                    "selectable": 1,
                    "created_at": "2026-08-11T13:39:51.000000Z",
                    "updated_at": "2026-09-21T18:31:33.000000Z"
                }
            }
        },
        {
            "id": 1,
            "sending_organisation_id": 18880,
            "receiving_organisation_id": 17322,
            "accepted_at": "2021-01-15 00:00:00",
            "disconnected_at": null,
            "rejected_at": null,
            "created_at": "2021-01-15T00:00:00.000000Z",
            "updated_at": "2021-01-15T00:00:00.000000Z",
            "status": "active",
            "receiving_organisation": {
                "id": 17322,
                "maxio_customer_id": 449338,
                "reference_id": "01-HVE8HZ3VX64D-Z",
                "pdc_id": null,
                "gateway_aid": "A284DO88",
                "uuid": "8ae99159-9d60-4c62-921b-cb4b75028182",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Bindal Silk Mills Private Limited",
                "legal_name": "Bindal Silk Mills Private Limited",
                "address_1": "p-216,kadodara",
                "address_2": null,
                "city": "Surat",
                "state": "Gujarat",
                "location": "IN",
                "zip": "394327",
                "phone": "02622 271009,",
                "email": "mail@bindalmill.com",
                "contact_first_name": "avichal",
                "contact_last_name": "arya",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": null,
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2017-09-27T03:26:36.000000Z",
                "updated_at": "2026-08-11T15:37:48.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "India",
                "type": {
                    "id": 2,
                    "name": "Supplier",
                    "display_name": "Supplier",
                    "description": null,
                    "selectable": 1,
                    "created_at": "2026-08-11T13:39:51.000000Z",
                    "updated_at": "2026-09-21T18:31:33.000000Z"
                }
            },
            "sending_organisation": {
                "id": 18880,
                "maxio_customer_id": 452434,
                "reference_id": "01-4J9DPSBBP3WQ-F",
                "pdc_id": null,
                "gateway_aid": "A137YR68",
                "uuid": "2b09c75c-48fd-4095-a444-f77ca28d6d81",
                "type_id": 4,
                "status": "approved",
                "is_test": false,
                "name": "Primark",
                "legal_name": "Primark",
                "address_1": "10 Grosvenor Street, London, W1K 4QY",
                "address_2": null,
                "city": "City Of London",
                "state": "London",
                "location": "GB",
                "zip": "RG1 1TZ",
                "phone": "+44 7525203334",
                "email": "pwalters@primark.co.uk",
                "contact_first_name": "HANDE",
                "contact_last_name": "Tezer",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://www.primark.com/en/homepage",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2017-08-01T00:00:00.000000Z",
                "updated_at": "2026-08-12T17:59:04.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-08-12 17:59:04",
                "profile_reviewed_by_user_id": 6016,
                "location_name": "United Kingdom",
                "type": {
                    "id": 4,
                    "name": "Brand",
                    "display_name": "Brand",
                    "description": null,
                    "selectable": 1,
                    "created_at": "2026-08-11T13:39:51.000000Z",
                    "updated_at": "2026-09-21T18:31:33.000000Z"
                }
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/connections

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: organisation_name, legal_name, organisation_location, organisation_id, organisation_reference_id, labels. Filter type: like. Example: expedita

filter[status]   The status of the connection. Can be one of: active, pending, rejected, disconnected  optional    

Filter column status by any accepted value. custom Example: et

filter[initiated_by]   The organisation that initiated the connection. Can be one of: us, them  optional    

Filter column initiated_by by any accepted value. custom Example: ea

filter[labels]   Comma-separated label IDs. Returns connections that have at least one of these labels.  optional    

Filter column labels by any accepted value. custom Example: id

filter[organisation_type]   Comma-separated organisation type IDs. Matches connections where either sendingOrganisation.type or receivingOrganisation.type has one of these type IDs.  optional    

Filter column organisation_type by any accepted value. custom Example: repellendus

filter[organisation_location]   Comma-separated location values. Matches connections where either sendingOrganisation.location or receivingOrganisation.location has one of these values.  optional    

Filter column organisation_location by any accepted value. custom Example: est

filter[sharing]   Comma-separated sharing types (e.g. share_chemical_inventory, share_wastewater_reporting). Returns connections that have at least one of these sharing types enabled for the requesting organisation.  optional    

Filter column sharing by any accepted value. custom Example: ex

Export connections as CSV

requires authentication

All connections for the organisation (unpaginated, one row per connection). The other party on each connection is used for the organisation columns.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/export" \
    --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/organisations/1/connections/export"
);

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):


file
 

Request      

GET api/organisations/{organisation_id}/connections/export

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Search connectable organisations

requires authentication

Search for connectable organisations

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/search-connectable-organisations?page=1&per_page=5&search=sed&filter%5Bname%5D=quod&filter%5Blegal_name%5D=optio&filter%5Breference_id%5D=sit" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type_id\": 11,
    \"search\": \"sint\",
    \"exclude_connected\": \"0\",
    \"exclude_pending\": \"1\",
    \"include_all\": \"false\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/search-connectable-organisations"
);

const params = {
    "page": "1",
    "per_page": "5",
    "search": "sed",
    "filter[name]": "quod",
    "filter[legal_name]": "optio",
    "filter[reference_id]": "sit",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "type_id": 11,
    "search": "sint",
    "exclude_connected": "0",
    "exclude_pending": "1",
    "include_all": "false"
};

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "maxio_customer_id": 418364,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "pdc_id": null,
            "gateway_aid": "A356IB10",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
            "address_2": null,
            "city": "Wenzhou",
            "state": "Zhejiang",
            "location": "CN",
            "zip": "",
            "phone": "",
            "email": "pengye@126.com",
            "contact_first_name": "JIAN",
            "contact_last_name": "Le",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "China"
        },
        {
            "id": 1,
            "maxio_customer_id": 418364,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "pdc_id": null,
            "gateway_aid": "A356IB10",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
            "address_2": null,
            "city": "Wenzhou",
            "state": "Zhejiang",
            "location": "CN",
            "zip": "",
            "phone": "",
            "email": "pengye@126.com",
            "contact_first_name": "JIAN",
            "contact_last_name": "Le",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "China"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/connections/search-connectable-organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

search   string  optional    

Search in all of these columns: reference_id, name, legal_name. Filter type: like. Example: sed

filter[name]   The name of the organisation.  optional    

Filter column name by any accepted value. partial Example: quod

filter[legal_name]   The legal name of the organisation.  optional    

Filter column legal_name by any accepted value. partial Example: optio

filter[reference_id]   The reference ID of the organisation.  optional    

Filter column reference_id by any accepted value. partial Example: sit

Body Parameters

type_id   integer     

The id of an existing record in the organisation_types table. Example: 11

search   string     

Example: sint

exclude_connected   string  optional    

Example: 0

Must be one of:
  • true
  • false
  • 1
  • 0
exclude_pending   string  optional    

Example: 1

Must be one of:
  • true
  • false
  • 1
  • 0
include_all   string  optional    

Example: false

Must be one of:
  • true
  • false
  • 1
  • 0

Show

requires authentication

Show an organisation connection

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/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/organisations/1/connections/1"
);

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,
        "sending_organisation_id": 18880,
        "receiving_organisation_id": 17322,
        "accepted_at": "2021-01-15 00:00:00",
        "disconnected_at": null,
        "rejected_at": null,
        "created_at": "2021-01-15T00:00:00.000000Z",
        "updated_at": "2021-01-15T00:00:00.000000Z",
        "status": "active",
        "sending_organisation": {
            "id": 18880,
            "reference_id": "01-4J9DPSBBP3WQ-F",
            "type_id": 4,
            "name": "Primark",
            "address_1": "10 Grosvenor Street, London, W1K 4QY",
            "address_2": null,
            "city": "City Of London",
            "state": "London",
            "location": "GB",
            "zip": "RG1 1TZ",
            "phone": "+44 7525203334",
            "email": "pwalters@primark.co.uk",
            "website": "https://www.primark.com/en/homepage",
            "avatar_url": null,
            "location_name": "United Kingdom"
        },
        "receiving_organisation": {
            "id": 17322,
            "reference_id": "01-HVE8HZ3VX64D-Z",
            "type_id": 2,
            "name": "Bindal Silk Mills Private Limited",
            "address_1": "p-216,kadodara",
            "address_2": null,
            "city": "Surat",
            "state": "Gujarat",
            "location": "IN",
            "zip": "394327",
            "phone": "02622 271009,",
            "email": "mail@bindalmill.com",
            "website": null,
            "avatar_url": null,
            "location_name": "India"
        },
        "labels": [],
        "sharing_settings": []
    }
}
 

Request      

GET api/organisations/{organisation_id}/connections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the connection. Example: 1

Update

requires authentication

Update an organisation connection

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"labels\": [
        \"zmysrodxhoyopfaxpij\"
    ],
    \"sharing_settings\": [
        {
            \"type\": \"ut\",
            \"active\": true
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1"
);

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

let body = {
    "labels": [
        "zmysrodxhoyopfaxpij"
    ],
    "sharing_settings": [
        {
            "type": "ut",
            "active": true
        }
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "sending_organisation_id": 18880,
        "receiving_organisation_id": 17322,
        "accepted_at": "2021-01-15 00:00:00",
        "disconnected_at": null,
        "rejected_at": null,
        "created_at": "2021-01-15T00:00:00.000000Z",
        "updated_at": "2021-01-15T00:00:00.000000Z",
        "status": "active",
        "sharing_settings": []
    }
}
 

Request      

PUT api/organisations/{organisation_id}/connections/{id}

PATCH api/organisations/{organisation_id}/connections/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the connection. Example: 1

Body Parameters

labels   string[]  optional    

Must not be greater than 255 characters.

sharing_settings   object[]     
type   string     

List of sharing types to enable for this connection. Allowed values depend on the organisation type:

  • Supplier:

    • share_chemical_inventory
    • share_wastewater_reporting
    • share_laboratory_data
  • Brand:

    • share_connection_on_detox. Example: ut
active   boolean     

Whether this sharing type is enabled (true) or disabled (false) for the connection. Example: true

Invite

requires authentication

Invite an organisation to connect

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/invite" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"organisation_id\": 6
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/invite"
);

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

let body = {
    "organisation_id": 6
};

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

Example response (200):


Organisation connection initiated
 

Request      

POST api/organisations/{organisation_id}/connections/invite

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

organisation_id   integer     

The id of an existing record in the organisations table. Example: 6

Accept

requires authentication

Accept an organisation connection

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/accept" \
    --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/organisations/1/connections/1/accept"
);

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


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

Example response (200):


{
    "message": "Organisation connection accepted"
}
 

Request      

POST api/organisations/{organisation_id}/connections/{connection_id}/accept

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Reject

requires authentication

Reject an organisation connection

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/reject" \
    --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/organisations/1/connections/1/reject"
);

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


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

Example response (200):


{
    "message": "Organisation connection rejected"
}
 

Request      

POST api/organisations/{organisation_id}/connections/{connection_id}/reject

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Disconnect

requires authentication

Disconnect an organisation connection

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/disconnect" \
    --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/organisations/1/connections/1/disconnect"
);

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


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

Example response (200):


{
    "message": "Organisation disconnected"
}
 

Request      

POST api/organisations/{organisation_id}/connections/{connection_id}/disconnect

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Cancel

requires authentication

Cancel a pending organisation connection request

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/1/cancel" \
    --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/organisations/1/connections/1/cancel"
);

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


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

Example response (200):


{
    "message": "Connection request cancelled"
}
 

Request      

POST api/organisations/{organisation_id}/connections/{connection_id}/cancel

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

connection_id   integer     

The ID of the connection. Example: 1

Index

requires authentication

List all organisations.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations?filter%5Bstatus%5D=velit&filter%5Bname%5D=sit&filter%5Blegal_name%5D=praesentium&filter%5Btype_id%5D=libero&filter%5Blocation%5D=sit&filter%5Bdeactivated%5D=1&filter%5Bis_test%5D=&sort=name&page=1&per_page=18&search=cum" \
    --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/organisations"
);

const params = {
    "filter[status]": "velit",
    "filter[name]": "sit",
    "filter[legal_name]": "praesentium",
    "filter[type_id]": "libero",
    "filter[location]": "sit",
    "filter[deactivated]": "1",
    "filter[is_test]": "0",
    "sort": "name",
    "page": "1",
    "per_page": "18",
    "search": "cum",
};
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,
            "maxio_customer_id": 418364,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "pdc_id": null,
            "gateway_aid": "A356IB10",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
            "address_2": null,
            "city": "Wenzhou",
            "state": "Zhejiang",
            "location": "CN",
            "zip": "",
            "phone": "",
            "email": "pengye@126.com",
            "contact_first_name": "JIAN",
            "contact_last_name": "Le",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "China",
            "type_name": "ZDHC MRSL Certification Bodies"
        },
        {
            "id": 1,
            "maxio_customer_id": 418364,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "pdc_id": null,
            "gateway_aid": "A356IB10",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
            "address_2": null,
            "city": "Wenzhou",
            "state": "Zhejiang",
            "location": "CN",
            "zip": "",
            "phone": "",
            "email": "pengye@126.com",
            "contact_first_name": "JIAN",
            "contact_last_name": "Le",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "China",
            "type_name": "Chemical Agents/Subsidiaries"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "50",
        "to": 2
    }
}
 

Request      

GET api/organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[status]   string  optional    

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

filter[name]   string  optional    

Filter column name by any accepted value. Matches part of the value. Example: sit

filter[legal_name]   string  optional    

Filter column legal_name by any accepted value. Matches part of the value. Example: praesentium

filter[type_id]   string  optional    

Filter column type_id by any accepted value. Matches exact value. Example: libero

filter[location]   string  optional    

Filter column location by any accepted value. Matches exact value. Example: sit

filter[deactivated]   boolean  optional    

Filter column deactivated by any accepted value. Filter by deactivation status. Only available for ZDHC Internal organisations. Example: true

filter[is_test]   boolean  optional    

Filter column is_test by any accepted value. Filter by test account flag. Example: false

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

search   string  optional    

Search in all of these columns: name, legal_name, status, contact_first_name, contact_last_name, location_name. Filter type: like. Example: cum

Show

Show an organisation's data.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1"
);

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


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

Example response (200):


{
    "data": {
        "id": 1,
        "maxio_customer_id": 418364,
        "reference_id": "01-7TXNQR4L9PFH-I",
        "pdc_id": null,
        "gateway_aid": "A356IB10",
        "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
        "type_id": 2,
        "status": "approved",
        "is_test": false,
        "name": "Ping Yang Pengye Shoes Com Ltd",
        "legal_name": "Ping Yang Pengye Shoes Com Ltd",
        "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
        "address_2": null,
        "city": "Wenzhou",
        "state": "Zhejiang",
        "location": "CN",
        "zip": "",
        "phone": "",
        "email": "pengye@126.com",
        "contact_first_name": "JIAN",
        "contact_last_name": "Le",
        "billing_contact_email": null,
        "billing_contact_first_name": null,
        "billing_contact_last_name": null,
        "billing_contact_phone": null,
        "business_registration_document_extension": null,
        "business_registration_document_name": null,
        "safety_data_sheet_name": null,
        "website": null,
        "avatar_url": null,
        "applicant_comment": null,
        "reviewer_comment": null,
        "registration_mail_sent_at": null,
        "created_at": "2021-11-04T12:19:55.000000Z",
        "updated_at": "2026-08-11T15:37:26.000000Z",
        "reviewer_comment_category": null,
        "profile_reviewed_at": null,
        "profile_reviewed_by_user_id": null,
        "location_name": "China",
        "type": {
            "id": 2,
            "name": "Supplier",
            "display_name": "Supplier",
            "description": null,
            "selectable": 1,
            "created_at": "2026-08-11T13:39:51.000000Z",
            "updated_at": "2026-09-21T18:31:33.000000Z"
        },
        "industry_identifiers": [],
        "conformance_level_products": [],
        "field_comments": null
    }
}
 

Request      

GET api/organisations/{subject_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

subject_id   integer     

The ID of the subject. Example: 1

Update

Update an organisation's data. Use a PATCH request for partial updates to get better performance.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "address_1=eos"\
    --form "city=v"\
    --form "state=txedfsmkrplyl"\
    --form "location=AQ"\
    --form "zip=ipkvwitvlk"\
    --form "phone=+1234567890"\
    --form "email=green.theresa@example.net"\
    --form "contact_first_name=perspiciatis"\
    --form "contact_last_name=minima"\
    --form "billing_contact_email=smith.eino@example.org"\
    --form "billing_contact_first_name=ab"\
    --form "billing_contact_last_name=corporis"\
    --form "billing_contact_phone=udzqnrcudaanowd"\
    --form "website=https://example.com"\
    --form "status=rejected"\
    --form "reviewer_comment=laudantium"\
    --form "reviewer_comment_category=Incomplete information"\
    --form "industry_ids[][id]=18"\
    --form "industry_ids[][value]=nriihkomfzzmqzkiytqjoxlxr"\
    --form "conformance_level_products[][id]=15"\
    --form "conformance_level_products[][count]=3"\
    --form "business_registration_document=@/tmp/phpoKBOjl" \
    --form "safety_data_sheet=@/tmp/phpkDmfjl" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1"
);

const headers = {
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('address_1', 'eos');
body.append('city', 'v');
body.append('state', 'txedfsmkrplyl');
body.append('location', 'AQ');
body.append('zip', 'ipkvwitvlk');
body.append('phone', '+1234567890');
body.append('email', 'green.theresa@example.net');
body.append('contact_first_name', 'perspiciatis');
body.append('contact_last_name', 'minima');
body.append('billing_contact_email', 'smith.eino@example.org');
body.append('billing_contact_first_name', 'ab');
body.append('billing_contact_last_name', 'corporis');
body.append('billing_contact_phone', 'udzqnrcudaanowd');
body.append('website', 'https://example.com');
body.append('status', 'rejected');
body.append('reviewer_comment', 'laudantium');
body.append('reviewer_comment_category', 'Incomplete information');
body.append('industry_ids[][id]', '18');
body.append('industry_ids[][value]', 'nriihkomfzzmqzkiytqjoxlxr');
body.append('conformance_level_products[][id]', '15');
body.append('conformance_level_products[][count]', '3');
body.append('business_registration_document', document.querySelector('input[name="business_registration_document"]').files[0]);
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);

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

Example response (200, Success):


{
    "message": "updated successfully"
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

PUT api/organisations/{subject_id}

PATCH api/organisations/{subject_id}

Headers

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

subject_id   integer     

The ID of the subject. Example: 1

Body Parameters

address_1   string     

Example: eos

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: v

state   string     

Must not be greater than 255 characters. Example: txedfsmkrplyl

location   string     

Example: AQ

Must be one of:
  • AF
  • AX
  • AL
  • DZ
  • AS
  • AD
  • AO
  • AI
  • AQ
  • AG
  • AR
  • AM
  • AW
  • AU
  • AT
  • AZ
  • BS
  • BH
  • BD
  • BB
  • BY
  • BE
  • BZ
  • BJ
  • BM
  • BT
  • BO
  • BA
  • BW
  • BV
  • BR
  • IO
  • VG
  • BN
  • BG
  • BF
  • BI
  • KH
  • CM
  • CA
  • CV
  • BQ
  • KY
  • CF
  • TD
  • CL
  • CN
  • CX
  • CC
  • CO
  • KM
  • CG
  • CD
  • CK
  • CR
  • CI
  • HR
  • CU
  • CW
  • CY
  • CZ
  • DK
  • DJ
  • DM
  • DO
  • EC
  • EG
  • SV
  • GQ
  • ER
  • EE
  • SZ
  • ET
  • FK
  • FO
  • FJ
  • FI
  • FR
  • GF
  • PF
  • TF
  • GA
  • GM
  • GE
  • DE
  • GH
  • GI
  • GR
  • GL
  • GD
  • GP
  • GU
  • GT
  • GG
  • GN
  • GW
  • GY
  • HT
  • HM
  • HN
  • HK
  • HU
  • IS
  • IN
  • ID
  • IR
  • IQ
  • IE
  • IM
  • IL
  • IT
  • JM
  • JP
  • JE
  • JO
  • KZ
  • KE
  • KI
  • KW
  • KG
  • LA
  • LV
  • LB
  • LS
  • LR
  • LY
  • LI
  • LT
  • LU
  • MO
  • MG
  • MW
  • MY
  • MV
  • ML
  • MT
  • MH
  • MQ
  • MR
  • MU
  • YT
  • MX
  • FM
  • MD
  • MC
  • MN
  • ME
  • MS
  • MA
  • MZ
  • MM
  • NA
  • NR
  • NP
  • NL
  • NC
  • NZ
  • NI
  • NE
  • NG
  • NU
  • NF
  • KP
  • MK
  • MP
  • NO
  • OM
  • PK
  • PW
  • PS
  • PA
  • PG
  • PY
  • PE
  • PH
  • PN
  • PL
  • PT
  • PR
  • QA
  • RE
  • RO
  • RU
  • RW
  • WS
  • SM
  • ST
  • SA
  • SN
  • RS
  • SC
  • SL
  • SG
  • SX
  • SK
  • SI
  • SB
  • SO
  • ZA
  • GS
  • KR
  • SS
  • ES
  • LK
  • BL
  • SH
  • KN
  • LC
  • MF
  • PM
  • VC
  • SD
  • SR
  • SJ
  • SE
  • CH
  • SY
  • TW
  • TJ
  • TZ
  • TH
  • TL
  • TG
  • TK
  • TO
  • TT
  • TN
  • TR
  • TM
  • TC
  • TV
  • UM
  • VI
  • UG
  • UA
  • AE
  • GB
  • US
  • UY
  • UZ
  • VU
  • VA
  • VE
  • VN
  • WF
  • EH
  • YE
  • ZM
  • ZW
zip   string     

Must not be greater than 64 characters. Example: ipkvwitvlk

phone   string  optional    

Must be at least 8 characters. Must not be greater than 16 characters. Example: +1234567890

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: green.theresa@example.net

contact_first_name   string     

Example: perspiciatis

contact_last_name   string     

Example: minima

billing_contact_email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: smith.eino@example.org

billing_contact_first_name   string     

Example: ab

billing_contact_last_name   string     

Example: corporis

billing_contact_phone   string     

Must be at least 8 characters. Must not be greater than 16 characters. Example: udzqnrcudaanowd

business_registration_document   file     

Business registration document provided as a file upload (PDF, JPG, or PNG). Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpoKBOjl

website   string  optional    

[MANDATORY ONLY FOR: Vendors & Chemical Formulators] The website of the organisation. Must not be greater than 255 characters. Example: https://example.com

industry_ids   object[]  optional    

[ONLY: Suppliers & Vendors] The industry identifiers associated with the organisation.

id   integer  optional    

This field is required when industry_ids.*.value is present. The id of an existing record in the industry_identifiers table. Example: 18

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: nriihkomfzzmqzkiytqjoxlxr

safety_data_sheet   file     

[ONLY: Chemical Formulators] Safety data sheet provided as a file upload. Must be a file. Example: /tmp/phpkDmfjl

conformance_level_products   object[]  optional    
id   integer  optional    

This field is required when conformance_level_products.*.count is present. The id of an existing record in the conformance_levels table. Example: 15

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 3

status   string  optional    

Example: rejected

Must be one of:
  • approved
  • submitted
  • needs_correction
  • rejected
reviewer_comment   string  optional    

Example: laudantium

reviewer_comment_category   string  optional    

Example: Incomplete information

Must be one of:
  • Incomplete information
  • Invalid documentation
  • Unqualified organisation type
  • Non-compliance with Requirements
  • Other

Distinct Status

requires authentication

Get a list of distinct organisation statuses.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations-distinct-status" \
    --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/organisations-distinct-status"
);

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, Success):


{
    "data": [
        "submitted",
        "needs_correction",
        "approved",
        "rejected"
    ]
}
 

Request      

GET api/organisations-distinct-status

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Distinct Types

requires authentication

Get a list of distinct organisation types.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations-distinct-types" \
    --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/organisations-distinct-types"
);

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, Success):


{
    "data": {
        "1": "Supplier",
        "2": "Vendor"
    }
}
 

Request      

GET api/organisations-distinct-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Deactivate

requires authentication

Soft-delete an organisation by setting its deleted_at timestamp.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/deactivate" \
    --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/organisations/1/deactivate"
);

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


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

Example response (200, Success):


{
    "message": "Organisation deactivated successfully"
}
 

Request      

POST api/organisations/{subject_id}/deactivate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

subject_id   integer     

The ID of the subject. Example: 1

Reactivate

requires authentication

Restore a soft-deleted organisation by clearing its deleted_at timestamp.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/reactivate" \
    --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/organisations/1/reactivate"
);

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


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

Example response (200, Success):


{
    "message": "Organisation reactivated successfully"
}
 

Request      

POST api/organisations/{subject}/reactivate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

subject   integer     

Example: 1

Request name change

requires authentication

Request a name change for an organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/name-change" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=wzhwbqxoiemvczjmz"\
    --form "legal_name=codevr"\
    --form "change_reason=tzfoiylmkgm"\
    --form "confirmation="\
    --form "evidence=@/tmp/phpaFapPp" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/name-change"
);

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

const body = new FormData();
body.append('name', 'wzhwbqxoiemvczjmz');
body.append('legal_name', 'codevr');
body.append('change_reason', 'tzfoiylmkgm');
body.append('confirmation', '');
body.append('evidence', document.querySelector('input[name="evidence"]').files[0]);

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

Example response (200):


email sent to [support email address]
 

Request      

POST api/organisations/{organisation_id}/name-change

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

name   string  optional    

This field is required when legal_name is not present. Must not be greater than 255 characters. Example: wzhwbqxoiemvczjmz

legal_name   string  optional    

This field is required when name is not present. Must not be greater than 255 characters. Example: codevr

change_reason   string     

Must not be greater than 10000 characters. Example: tzfoiylmkgm

evidence   file  optional    

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpaFapPp

confirmation   boolean     

Must be accepted. Example: false

Profile

Public profile

requires authentication

Get a public profile of an organisation.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/organisation-profile/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/organisations/1/organisation-profile/1"
);

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,
        "reference_id": "01-7TXNQR4L9PFH-I",
        "type_id": 2,
        "name": "Ping Yang Pengye Shoes Com Ltd",
        "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
        "address_2": null,
        "city": "Wenzhou",
        "state": "Zhejiang",
        "location": "CN",
        "zip": "",
        "phone": "",
        "email": "pengye@126.com",
        "website": null,
        "avatar_url": null,
        "location_name": "China",
        "os_hub_identifier": null,
        "type": {
            "id": 2,
            "name": "Supplier"
        },
        "further_details": null
    }
}
 

Request      

GET api/organisations/{organisation_id}/organisation-profile/{subject_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

Visibility Settings

Show Visibility settings

requires authentication

Get all visibility settings of an organisation, grouped by visibility type.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/visibility-settings" \
    --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/organisations/1/visibility-settings"
);

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, Success):


{
    "message": "Visibility settings fetched successfully"
}
 

Request      

GET api/organisations/{organisation_id}/visibility-settings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Update Visibility settings

requires authentication

Update the visibility settings of an organisation.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/visibility-settings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"visibility_type\": \"organisation_profile_details\",
    \"visibility_settings\": [
        {
            \"organisation_type_id\": 3,
            \"visible\": false
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/visibility-settings"
);

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

let body = {
    "visibility_type": "organisation_profile_details",
    "visibility_settings": [
        {
            "organisation_type_id": 3,
            "visible": false
        }
    ]
};

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

Example response (200, Success):


{
    "message": "Visibility settings updated successfully"
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

PUT api/organisations/{organisation_id}/visibility-settings

PATCH api/organisations/{organisation_id}/visibility-settings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

visibility_type   string     

Visibility type: organisation_profile_details or sds_files. sds_files is ONLY available for Chemical Formulators.
Other organisation types (e.g. Supplier) will receive a validation error if they use sds_files. Example: organisation_profile_details

Must be one of:
  • organisation_profile_details
  • sds_files
visibility_settings   object[]     

Must have at least 1 items.

organisation_type_id   integer     

The id of an existing record in the organisation_types table. Example: 3

Must be one of:
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
visible   boolean     

Example: false

Documents

Safety Data Sheet

requires authentication

Download the organisation's safety data sheet. Available to the organisation itself and to organisation types that were granted SDS file visibility by the owner.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/documents/safety-data-sheet" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/documents/safety-data-sheet"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200):


content of the safety data sheet
 

Request      

GET api/organisations/{subject_id}/documents/safety-data-sheet

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

subject_id   integer     

The ID of the subject. Example: 1

Business Registration Document

requires authentication

Download the organisation's business registration document. Available to the organisation itself and to ZDHC Internal.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/documents/business-registration-document" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/documents/business-registration-document"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200):


content of the business registration document
 

Request      

GET api/organisations/{subject_id}/documents/business-registration-document

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

subject_id   integer     

The ID of the subject. Example: 1

History

Index

requires authentication

List all history entries for an organisation.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/history/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/organisations/1/history/1"
);

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": [
        [],
        []
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "10",
        "to": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/history/{subject_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subject_id   integer     

The ID of the subject. Example: 1

Invitations

Index

requires authentication

List all invitations for the organisation.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/invitation?per_page=11&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/organisations/1/invitation"
);

const params = {
    "per_page": "11",
    "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,
            "reference_id": "06-NUN3WT8GGYXD-I",
            "uuid": "a285d001-29eb-4c62-bd59-f9c969d7a5f4",
            "inviting_organisation_id": 21227,
            "inviting_user_id": 33068,
            "receiving_organisation_id": 21441,
            "receiving_user_id": 33061,
            "status": "INVITED",
            "valid_until": "2026-09-16T08:40:40.000000Z",
            "redeemed_at": null,
            "auto_connect": false,
            "created_at": "2026-08-17T08:40:40.000000Z",
            "updated_at": "2026-08-17T08:40:40.000000Z",
            "receiving_organisation": {
                "id": 21441,
                "reference_id": "01-SJZZYFBBY8S8-E",
                "type_id": 2,
                "name": "Invited company",
                "address_1": "Invited street 1",
                "address_2": "Invited street 2",
                "city": "Invited city",
                "state": "Invited state",
                "location": "US",
                "zip": "12345",
                "phone": "+1234567890",
                "email": "invited@localhost",
                "website": "https://invited.com",
                "avatar_url": null,
                "location_name": "United States"
            },
            "receiving_user": {
                "id": 33061,
                "email": "puranik@zdhc.org",
                "profile_picture_url": null
            },
            "inviting_user": {
                "id": 33068,
                "email": "y.mehta@zdhc.org",
                "profile_picture_url": null
            }
        },
        {
            "id": 1,
            "reference_id": "06-NUN3WT8GGYXD-I",
            "uuid": "a285d001-29eb-4c62-bd59-f9c969d7a5f4",
            "inviting_organisation_id": 21227,
            "inviting_user_id": 33068,
            "receiving_organisation_id": 21441,
            "receiving_user_id": 33061,
            "status": "INVITED",
            "valid_until": "2026-09-16T08:40:40.000000Z",
            "redeemed_at": null,
            "auto_connect": false,
            "created_at": "2026-08-17T08:40:40.000000Z",
            "updated_at": "2026-08-17T08:40:40.000000Z",
            "receiving_organisation": {
                "id": 21441,
                "reference_id": "01-SJZZYFBBY8S8-E",
                "type_id": 2,
                "name": "Invited company",
                "address_1": "Invited street 1",
                "address_2": "Invited street 2",
                "city": "Invited city",
                "state": "Invited state",
                "location": "US",
                "zip": "12345",
                "phone": "+1234567890",
                "email": "invited@localhost",
                "website": "https://invited.com",
                "avatar_url": null,
                "location_name": "United States"
            },
            "receiving_user": {
                "id": 33061,
                "email": "puranik@zdhc.org",
                "profile_picture_url": null
            },
            "inviting_user": {
                "id": 33068,
                "email": "y.mehta@zdhc.org",
                "profile_picture_url": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/invitation

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Store

requires authentication

Create a new invitation for the organisation

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/invitation" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"organisation_type_id\": 5,
    \"email\": \"luettgen.anastacio@example.com\",
    \"auto_connect\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/invitation"
);

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

let body = {
    "organisation_type_id": 5,
    "email": "luettgen.anastacio@example.com",
    "auto_connect": false
};

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisations/{organisation_id}/invitation

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

organisation_type_id   integer     

The id of an existing record in the organisation_types table. Example: 5

email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: luettgen.anastacio@example.com

auto_connect   boolean  optional    

Example: false

Subscriptions

Index

requires authentication

Get Subscriptions

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions?per_page=1&page=1&filter%5Bsubscribable_product_id%5D=16&filter%5Bstatus%5D=minima&filter%5Binvoice_created_at%5D=quidem&filter%5Bstart_at%5D=ut&filter%5Bvalid_until%5D=ut&filter%5Bcreated_at%5D=velit&filter%5Bupdated_at%5D=sunt&search=quod&sort=id&column=id" \
    --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/organisations/1/subscriptions"
);

const params = {
    "per_page": "1",
    "page": "1",
    "filter[subscribable_product_id]": "16",
    "filter[status]": "minima",
    "filter[invoice_created_at]": "quidem",
    "filter[start_at]": "ut",
    "filter[valid_until]": "ut",
    "filter[created_at]": "velit",
    "filter[updated_at]": "sunt",
    "search": "quod",
    "sort": "id",
    "column": "id",
};
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,
            "organisation_id": 20658,
            "subscribable_product_id": 14,
            "status": "active",
            "auto_renew": false,
            "selected_stairstep": null,
            "maxio_subscription_id": 561845,
            "expired_at": null,
            "self_upgrade_disabled_until": null,
            "created_at": "2026-08-14T14:44:53.000000Z",
            "updated_at": "2026-09-11T02:30:13.000000Z",
            "deleted_at": null,
            "subscribable_product": {
                "id": 14,
                "subscribable_product_family_handle": "suppliers",
                "subscribable_product_family_id": 3211,
                "name": "ClearStream",
                "handle": "clearstream",
                "maxio_product_id": 6151,
                "created_at": "2026-08-11T20:17:05.000000Z",
                "updated_at": "2026-08-11T20:17:05.000000Z",
                "deleted_at": null
            },
            "current_period": {
                "id": 1,
                "organisation_product_subscription_id": 1,
                "starts_at": "2026-08-14T11:58:59.000000Z",
                "ends_at": "2027-08-14T11:58:59.000000Z",
                "role": "signup",
                "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                "maxio_payment_id": "7197580",
                "payment_status": "paid",
                "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                "created_at": "2026-08-14T14:44:53.000000Z",
                "updated_at": "2026-08-14T14:44:53.000000Z"
            },
            "periods": [
                {
                    "id": 1,
                    "organisation_product_subscription_id": 1,
                    "starts_at": "2026-08-14T11:58:59.000000Z",
                    "ends_at": "2027-08-14T11:58:59.000000Z",
                    "role": "signup",
                    "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                    "maxio_payment_id": "7197580",
                    "payment_status": "paid",
                    "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                    "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                    "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                    "created_at": "2026-08-14T14:44:53.000000Z",
                    "updated_at": "2026-08-14T14:44:53.000000Z"
                }
            ],
            "invoices": [],
            "usage": []
        },
        {
            "id": 1,
            "organisation_id": 20658,
            "subscribable_product_id": 14,
            "status": "active",
            "auto_renew": false,
            "selected_stairstep": null,
            "maxio_subscription_id": 561845,
            "expired_at": null,
            "self_upgrade_disabled_until": null,
            "created_at": "2026-08-14T14:44:53.000000Z",
            "updated_at": "2026-09-11T02:30:13.000000Z",
            "deleted_at": null,
            "subscribable_product": {
                "id": 14,
                "subscribable_product_family_handle": "suppliers",
                "subscribable_product_family_id": 3211,
                "name": "ClearStream",
                "handle": "clearstream",
                "maxio_product_id": 6151,
                "created_at": "2026-08-11T20:17:05.000000Z",
                "updated_at": "2026-08-11T20:17:05.000000Z",
                "deleted_at": null
            },
            "current_period": {
                "id": 1,
                "organisation_product_subscription_id": 1,
                "starts_at": "2026-08-14T11:58:59.000000Z",
                "ends_at": "2027-08-14T11:58:59.000000Z",
                "role": "signup",
                "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                "maxio_payment_id": "7197580",
                "payment_status": "paid",
                "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                "created_at": "2026-08-14T14:44:53.000000Z",
                "updated_at": "2026-08-14T14:44:53.000000Z"
            },
            "periods": [
                {
                    "id": 1,
                    "organisation_product_subscription_id": 1,
                    "starts_at": "2026-08-14T11:58:59.000000Z",
                    "ends_at": "2027-08-14T11:58:59.000000Z",
                    "role": "signup",
                    "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                    "maxio_payment_id": "7197580",
                    "payment_status": "paid",
                    "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                    "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                    "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                    "created_at": "2026-08-14T14:44:53.000000Z",
                    "updated_at": "2026-08-14T14:44:53.000000Z"
                }
            ],
            "invoices": [],
            "usage": []
        }
    ]
}
 

Request      

GET api/organisations/{organisation_id}/subscriptions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[subscribable_product_id]   integer  optional    

Filter column subscribable_product_id by any accepted value. Filter by product ID (multiple selection allowed) Example: 16

filter[subscribable_products.handle]   string  optional    

Filter column subscribable_products.handle by any accepted value. Filter by product handle (multiple selection allowed) Example: aut

filter[status]   string  optional    

Filter column status by any accepted value. Filter by status (multiple selection allowed) Example: minima

filter[invoice_created_at]   datetime  optional    

Filter column invoice_created_at by any accepted value. Filter by invoice created date Example: quidem

filter[start_at]   datetime  optional    

Filter column start_at by any accepted value. Filter by start date Example: ut

filter[valid_until]   datetime  optional    

Filter column valid_until by any accepted value. Filter by valid until date Example: ut

filter[created_at]   datetime  optional    

Filter column created_at by any accepted value. Filter by created date Example: velit

filter[updated_at]   datetime  optional    

Filter column updated_at by any accepted value. Filter by updated date Example: sunt

search   string  optional    

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

sort   string  optional    

sort by any accepted column: id, subscribable_product.name, status, invoice_created_at, start_at, valid_until, created_at, updated_at. prefix a "-" before the column name to sort in descending order Example: id

column   string  optional    

get a distinct list of filterable values for any of the columns: id, subscribable_product.name, status, invoice_created_at, start_at, valid_until, created_at, updated_at. Example: id

Chargify.js security token

requires authentication

Returns a signed JWT for use as securityToken in Chargify.js client config. Call this when loading the Chargify.js form; pass the token to chargify.load({ securityToken: ... }). Uses organisation id as subject (sub) for per-account rate limiting in Maxio.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/chargify-security-token" \
    --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/organisations/1/subscriptions/chargify-security-token"
);

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": {
        "security_token": "eyJ0eXAiOiJKV1QiLCJhbGc..."
    }
}
 

Example response (429):


Too many requests (rate limit: 10/minute, 60/hour per organisation)
 

Example response (500):


Chargify.js keys not configured
 

Request      

GET api/organisations/{organisation_id}/subscriptions/chargify-security-token

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Show

requires authentication

Show a Subscription

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/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/organisations/1/subscriptions/1"
);

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,
        "organisation_id": 20658,
        "subscribable_product_id": 14,
        "status": "active",
        "auto_renew": false,
        "selected_stairstep": null,
        "maxio_subscription_id": 561845,
        "expired_at": null,
        "self_upgrade_disabled_until": null,
        "created_at": "2026-08-14T14:44:53.000000Z",
        "updated_at": "2026-09-11T02:30:13.000000Z",
        "deleted_at": null,
        "current_period": {
            "id": 1,
            "organisation_product_subscription_id": 1,
            "starts_at": "2026-08-14T11:58:59.000000Z",
            "ends_at": "2027-08-14T11:58:59.000000Z",
            "role": "signup",
            "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
            "maxio_payment_id": "7197580",
            "payment_status": "paid",
            "invoice_created_at": "2026-08-14T11:59:00.000000Z",
            "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
            "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
            "created_at": "2026-08-14T14:44:53.000000Z",
            "updated_at": "2026-08-14T14:44:53.000000Z"
        },
        "periods": [
            {
                "id": 1,
                "organisation_product_subscription_id": 1,
                "starts_at": "2026-08-14T11:58:59.000000Z",
                "ends_at": "2027-08-14T11:58:59.000000Z",
                "role": "signup",
                "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                "maxio_payment_id": "7197580",
                "payment_status": "paid",
                "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                "created_at": "2026-08-14T14:44:53.000000Z",
                "updated_at": "2026-08-14T14:44:53.000000Z"
            }
        ],
        "invoices": [],
        "usage": []
    }
}
 

Example response (500):


Failed to load subscription invoices from Maxio
 

Request      

GET api/organisations/{organisation_id}/subscriptions/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the subscription. Example: 1

Product details

requires authentication

Get product details including available components and prices for the given product handle. Used by the frontend to decide which components to show when creating a subscription.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/product-details/excepturi" \
    --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/organisations/1/subscriptions/product-details/excepturi"
);

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


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

Example response (200):


{
    "data": {
        "product": {
            "name": null,
            "handle": null,
            "description": null,
            "accounting_code": null,
            "price_in_cents": null,
            "interval": null,
            "interval_unit": null,
            "trial_price_in_cents": null,
            "trial_interval": null,
            "trial_interval_unit": null,
            "expiration_interval": null,
            "expiration_interval_unit": null
        }
    }
}
 

Example response (404):


Product not found
 

Request      

GET api/organisations/{organisation_id}/subscriptions/product-details/{product_handle}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

product_handle   string     

Example: excepturi

Coupon Validation

requires authentication

Validate coupons for a product

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/validate-coupons/laborum" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"coupon\": \"eauzga\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/validate-coupons/laborum"
);

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

let body = {
    "coupon": "eauzga"
};

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

Example response (200):


{
    "data": {
        "code": null,
        "description": null,
        "amount": null,
        "amount_in_cents": null,
        "percentage": null,
        "compounding_strategy": null,
        "start_date": null,
        "end_date": null,
        "recurring": null,
        "duration_period_count": null,
        "duration_interval": null,
        "duration_interval_unit": null,
        "stackable": null
    }
}
 

Example response (400):


Coupon invalid, expired or not found
 

Example response (404):


Product not found
 

Request      

POST api/organisations/{organisation_id}/subscriptions/validate-coupons/{product_handle}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

product_handle   string     

Example: laborum

Body Parameters

coupon   string     

Must not be greater than 255 characters. Example: eauzga

Create a new subscription

requires authentication

Create a new subscription for the organisation (existing Maxio customer). Runs a subscription preview first, if testing is enabled, returns the preview response. If testing is disabled, creates the subscription. Customer must send all required customer/payment/billing data. Tier/component amounts supported via components.

Stripe SCA/3DS (post-auth): Maxio may return HTTP 422 with action_link. This endpoint maps that to HTTP 422 with code=three_d_secure_required and structured data (action_link, gateway_payment_id, …). Other Maxio 422 declines are returned as code=billing_error. No backend callback_url is required — the frontend appends redirect_url to action_link and refreshes subscription status after return (Maxio completes the subscription server-side; local sync via existing Maxio webhooks).

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/incidunt" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_testing\": false,
    \"chargify_token\": \"njxhwxxfturkfguvfthzhcvfk\",
    \"collection_method\": \"remittance\",
    \"payment_profile_id\": 60,
    \"payment_type\": \"bank_transfer\",
    \"first_name\": \"hwjpeavbjjeqlzw\",
    \"last_name\": \"jvbxrwhcylxyspdughkpyl\",
    \"billing_first_name\": \"cxa\",
    \"billing_last_name\": \"vmxxngsrcmyxbl\",
    \"email\": \"stroman.lulu@example.net\",
    \"locale\": \"ar_YE\",
    \"organization\": \"qjhmhubcxkwsl\",
    \"phone\": \"excepturi\",
    \"address\": \"ceinczubkvg\",
    \"address_2\": \"bglqeklrkudckglhowyeocmg\",
    \"city\": \"robiambgrfvxfobnrmkhsf\",
    \"state\": \"u\",
    \"country\": \"ny\",
    \"zip\": \"mesrivxcpi\",
    \"billing_address\": \"yluhetibgdduetn\",
    \"billing_address_2\": \"mgfewcfjdkugwklmfercyzeu\",
    \"billing_city\": \"vnsptqjijeciwovnbgr\",
    \"billing_state\": \"kiwrjbnbuavthyyngickw\",
    \"billing_country\": \"an\",
    \"billing_zip\": \"hnmboipqo\",
    \"tax_id\": \"qui\",
    \"coupon_codes\": [
        \"nqwf\"
    ],
    \"components\": [
        {
            \"component_id\": 13,
            \"allocated_quantity\": 35,
            \"quantity\": 26,
            \"price_point_id\": 4
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/incidunt"
);

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

let body = {
    "is_testing": false,
    "chargify_token": "njxhwxxfturkfguvfthzhcvfk",
    "collection_method": "remittance",
    "payment_profile_id": 60,
    "payment_type": "bank_transfer",
    "first_name": "hwjpeavbjjeqlzw",
    "last_name": "jvbxrwhcylxyspdughkpyl",
    "billing_first_name": "cxa",
    "billing_last_name": "vmxxngsrcmyxbl",
    "email": "stroman.lulu@example.net",
    "locale": "ar_YE",
    "organization": "qjhmhubcxkwsl",
    "phone": "excepturi",
    "address": "ceinczubkvg",
    "address_2": "bglqeklrkudckglhowyeocmg",
    "city": "robiambgrfvxfobnrmkhsf",
    "state": "u",
    "country": "ny",
    "zip": "mesrivxcpi",
    "billing_address": "yluhetibgdduetn",
    "billing_address_2": "mgfewcfjdkugwklmfercyzeu",
    "billing_city": "vnsptqjijeciwovnbgr",
    "billing_state": "kiwrjbnbuavthyyngickw",
    "billing_country": "an",
    "billing_zip": "hnmboipqo",
    "tax_id": "qui",
    "coupon_codes": [
        "nqwf"
    ],
    "components": [
        {
            "component_id": 13,
            "allocated_quantity": 35,
            "quantity": 26,
            "price_point_id": 4
        }
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "organisation_id": 20658,
        "subscribable_product_id": 14,
        "status": "active",
        "auto_renew": false,
        "selected_stairstep": null,
        "maxio_subscription_id": 561845,
        "expired_at": null,
        "self_upgrade_disabled_until": null,
        "created_at": "2026-08-14T14:44:53.000000Z",
        "updated_at": "2026-09-11T02:30:13.000000Z",
        "deleted_at": null,
        "current_period": {
            "id": 1,
            "organisation_product_subscription_id": 1,
            "starts_at": "2026-08-14T11:58:59.000000Z",
            "ends_at": "2027-08-14T11:58:59.000000Z",
            "role": "signup",
            "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
            "maxio_payment_id": "7197580",
            "payment_status": "paid",
            "invoice_created_at": "2026-08-14T11:59:00.000000Z",
            "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
            "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
            "created_at": "2026-08-14T14:44:53.000000Z",
            "updated_at": "2026-08-14T14:44:53.000000Z"
        },
        "periods": [
            {
                "id": 1,
                "organisation_product_subscription_id": 1,
                "starts_at": "2026-08-14T11:58:59.000000Z",
                "ends_at": "2027-08-14T11:58:59.000000Z",
                "role": "signup",
                "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                "maxio_payment_id": "7197580",
                "payment_status": "paid",
                "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                "created_at": "2026-08-14T14:44:53.000000Z",
                "updated_at": "2026-08-14T14:44:53.000000Z"
            }
        ],
        "invoices": [],
        "usage": []
    }
}
 

Example response (400):


Organisation has no Maxio customer ID
 

Example response (422):


three_d_secure_required | billing_error
 

Example response (500):


Maxio preview or create failed
 

Request      

POST api/organisations/{organisation_id}/subscriptions/{product_handle}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

product_handle   string     

Example: incidunt

Body Parameters

is_testing   boolean     

Should be used to validate the subscription payload and for price precalculation. Example: false

chargify_token   string  optional    

The chargify token for the subscription generated with chargify.js. Must not be greater than 255 characters. Example: njxhwxxfturkfguvfthzhcvfk

collection_method   string     

The collection method for the subscription. Can be "automatic" or "remittance" => invoice based. If remittance is used, the subscription has to be paied within 60 days and no further payment details needed. Example: remittance

Must be one of:
  • automatic
  • remittance
payment_profile_id   integer  optional    

Must be at least 1. Example: 60

payment_type   string     

Example: bank_transfer

Must be one of:
  • credit_card
  • bank_transfer
first_name   string     

Must not be greater than 255 characters. Example: hwjpeavbjjeqlzw

last_name   string     

Must not be greater than 255 characters. Example: jvbxrwhcylxyspdughkpyl

billing_first_name   string     

Must not be greater than 255 characters. Example: cxa

billing_last_name   string     

Must not be greater than 255 characters. Example: vmxxngsrcmyxbl

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: stroman.lulu@example.net

locale   string  optional    

Must not be greater than 10 characters. Example: ar_YE

organization   string     

Must not be greater than 255 characters. Example: qjhmhubcxkwsl

phone   string     

Example: excepturi

address   string     

Must not be greater than 255 characters. Example: ceinczubkvg

address_2   string  optional    

Must not be greater than 255 characters. Example: bglqeklrkudckglhowyeocmg

city   string     

Must not be greater than 255 characters. Example: robiambgrfvxfobnrmkhsf

state   string     

Must not be greater than 255 characters. Example: u

country   string     

The country of the organisation. Must be a valid ISO 3166-1 alpha-2 code. Must be 2 characters. Example: ny

zip   string     

Must not be greater than 255 characters. Example: mesrivxcpi

billing_address   string     

Must not be greater than 255 characters. Example: yluhetibgdduetn

billing_address_2   string  optional    

Must not be greater than 255 characters. Example: mgfewcfjdkugwklmfercyzeu

billing_city   string     

Must not be greater than 255 characters. Example: vnsptqjijeciwovnbgr

billing_state   string     

Must not be greater than 255 characters. Example: kiwrjbnbuavthyyngickw

billing_country   string     

The country of the billing address. Must be a valid ISO 3166-1 alpha-2 code. Must be 2 characters. Example: an

billing_zip   string     

Must not be greater than 255 characters. Example: hnmboipqo

tax_id   string  optional    

Optional VAT or tax registration number. Sent to Maxio as vat_number for tax calculation. Do not include the ISO 3166-1 alpha-2 country prefix (e.g. use "123456789" for a German number, not "DE123456789"). When provided: 2–50 characters, must start with a letter or digit, and may contain only letters, digits, dots (.), and hyphens (-). Example: qui

components   object[]  optional    
component_id   integer     

Example: 13

allocated_quantity   number     

Must be at least 0. Example: 35

quantity   integer  optional    

Must be at least 0. Example: 26

price_point_id   integer     

Must be at least 1. Example: 4

coupon_codes   string[]     

Must not be greater than 255 characters.

Update a subscription (stairstep upgrade only)

requires authentication

Preview or apply a prorated stairstep component upgrade. Only upgrades are allowed; downgrades are rejected. The upgrade charge is prorated for the remaining period and does not extend the subscription end date.

Send is_testing=true to get a preview (allocation_preview with total_in_cents etc.). Send is_testing=false to apply.

Self-upgrade lock: when self_upgrade_disabled_until is set to a future date, preview and apply are rejected with HTTP 422 until that date is reached (the daily job then clears the lock).

Stripe SCA/3DS (post-auth): payment-profile create or allocation charge may return Maxio 422 with action_link. Mapped to HTTP 422 with code=three_d_secure_required (same shape as subscription create).

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_testing\": false,
    \"chargify_token\": \"sjfohuuqqqwmlosm\",
    \"collection_method\": \"remittance\",
    \"payment_profile_id\": 67,
    \"payment_type\": \"bank_transfer\",
    \"first_name\": \"skddezvkbfawwpinitcpa\",
    \"last_name\": \"w\",
    \"billing_first_name\": \"hsrqdjvgbbznbjzdfml\",
    \"billing_last_name\": \"cgpjdhlmtzgnqv\",
    \"email\": \"rosanna.ankunding@example.org\",
    \"locale\": \"gl_ES\",
    \"organization\": \"mlth\",
    \"phone\": \"wdyqg\",
    \"address\": \"zh\",
    \"address_2\": \"w\",
    \"city\": \"exrgmfjr\",
    \"state\": \"lwodj\",
    \"country\": \"yo\",
    \"zip\": \"nboaw\",
    \"billing_address\": \"rrgeolmghzkwxegtmdjxy\",
    \"billing_address_2\": \"jmsdgthrljitvrwihvkslm\",
    \"billing_city\": \"cqetixxhnadqsuzizauvrj\",
    \"billing_state\": \"uhpojhrpwxuunribgm\",
    \"billing_country\": \"hd\",
    \"billing_zip\": \"gmvhbwfqoezpykwbqcyamac\",
    \"tax_id\": \"delectus\",
    \"components\": [
        {
            \"component_id\": 31,
            \"allocated_quantity\": 38
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/1"
);

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

let body = {
    "is_testing": false,
    "chargify_token": "sjfohuuqqqwmlosm",
    "collection_method": "remittance",
    "payment_profile_id": 67,
    "payment_type": "bank_transfer",
    "first_name": "skddezvkbfawwpinitcpa",
    "last_name": "w",
    "billing_first_name": "hsrqdjvgbbznbjzdfml",
    "billing_last_name": "cgpjdhlmtzgnqv",
    "email": "rosanna.ankunding@example.org",
    "locale": "gl_ES",
    "organization": "mlth",
    "phone": "wdyqg",
    "address": "zh",
    "address_2": "w",
    "city": "exrgmfjr",
    "state": "lwodj",
    "country": "yo",
    "zip": "nboaw",
    "billing_address": "rrgeolmghzkwxegtmdjxy",
    "billing_address_2": "jmsdgthrljitvrwihvkslm",
    "billing_city": "cqetixxhnadqsuzizauvrj",
    "billing_state": "uhpojhrpwxuunribgm",
    "billing_country": "hd",
    "billing_zip": "gmvhbwfqoezpykwbqcyamac",
    "tax_id": "delectus",
    "components": [
        {
            "component_id": 31,
            "allocated_quantity": 38
        }
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "organisation_id": 20658,
        "subscribable_product_id": 14,
        "status": "active",
        "auto_renew": false,
        "selected_stairstep": null,
        "maxio_subscription_id": 561845,
        "expired_at": null,
        "self_upgrade_disabled_until": null,
        "created_at": "2026-08-14T14:44:53.000000Z",
        "updated_at": "2026-09-11T02:30:13.000000Z",
        "deleted_at": null,
        "current_period": {
            "id": 1,
            "organisation_product_subscription_id": 1,
            "starts_at": "2026-08-14T11:58:59.000000Z",
            "ends_at": "2027-08-14T11:58:59.000000Z",
            "role": "signup",
            "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
            "maxio_payment_id": "7197580",
            "payment_status": "paid",
            "invoice_created_at": "2026-08-14T11:59:00.000000Z",
            "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
            "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
            "created_at": "2026-08-14T14:44:53.000000Z",
            "updated_at": "2026-08-14T14:44:53.000000Z"
        },
        "periods": [
            {
                "id": 1,
                "organisation_product_subscription_id": 1,
                "starts_at": "2026-08-14T11:58:59.000000Z",
                "ends_at": "2027-08-14T11:58:59.000000Z",
                "role": "signup",
                "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                "maxio_payment_id": "7197580",
                "payment_status": "paid",
                "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                "created_at": "2026-08-14T14:44:53.000000Z",
                "updated_at": "2026-08-14T14:44:53.000000Z"
            }
        ],
        "invoices": [],
        "usage": []
    }
}
 

Example response (400):


Organisation has no Maxio customer ID
 

Example response (422):


Self-upgrade temporarily disabled until a given date; or component is not a stairstep of this subscription's product; or only upgrades allowed (no downgrade); or three_d_secure_required | billing_error
 

Example response (500):


Maxio preview or allocation failed
 

Request      

PUT api/organisations/{organisation_id}/subscriptions/{id}

PATCH api/organisations/{organisation_id}/subscriptions/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the subscription. Example: 1

Body Parameters

is_testing   boolean     

When true, returns a prorated upgrade preview without applying the change. When false, applies the stairstep upgrade (payment/customer data required). Example: false

chargify_token   string  optional    

Chargify.js token for the payment method. Required when applying with collection_method=automatic and no payment_profile_id is sent. Must not be greater than 255 characters. Example: sjfohuuqqqwmlosm

collection_method   string     

Collection method. Use "automatic" for immediate charge with payment details, "remittance" for invoice. Same as create. Example: remittance

Must be one of:
  • automatic
  • remittance
payment_profile_id   integer  optional    

Existing payment profile ID to use for the upgrade charge. Alternative to chargify_token when applying. Must be at least 1. Example: 67

payment_type   string     

Payment type: credit_card or bank_transfer. Same as create. Example: bank_transfer

Must be one of:
  • credit_card
  • bank_transfer
first_name   string     

Must not be greater than 255 characters. Example: skddezvkbfawwpinitcpa

last_name   string     

Must not be greater than 255 characters. Example: w

billing_first_name   string     

Must not be greater than 255 characters. Example: hsrqdjvgbbznbjzdfml

billing_last_name   string     

Must not be greater than 255 characters. Example: cgpjdhlmtzgnqv

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: rosanna.ankunding@example.org

locale   string  optional    

Locale (e.g. en, de). Optional, defaults to en. Must not be greater than 10 characters. Example: gl_ES

organization   string     

Must not be greater than 255 characters. Example: mlth

phone   string     

Must be at least 8 characters. Must not be greater than 16 characters. Example: wdyqg

address   string     

Must not be greater than 255 characters. Example: zh

address_2   string  optional    

Must not be greater than 255 characters. Example: w

city   string     

Must not be greater than 255 characters. Example: exrgmfjr

state   string     

Must not be greater than 255 characters. Example: lwodj

country   string     

The country of the organisation. Must be a valid ISO 3166-1 alpha-2 code. Must be 2 characters. Example: yo

zip   string     

Must not be greater than 255 characters. Example: nboaw

billing_address   string     

Must not be greater than 255 characters. Example: rrgeolmghzkwxegtmdjxy

billing_address_2   string  optional    

Must not be greater than 255 characters. Example: jmsdgthrljitvrwihvkslm

billing_city   string     

Must not be greater than 255 characters. Example: cqetixxhnadqsuzizauvrj

billing_state   string     

Must not be greater than 255 characters. Example: uhpojhrpwxuunribgm

billing_country   string     

The country of the billing address. Must be a valid ISO 3166-1 alpha-2 code. Must be 2 characters. Example: hd

billing_zip   string     

Must not be greater than 255 characters. Example: gmvhbwfqoezpykwbqcyamac

tax_id   string  optional    

Optional VAT or tax registration number. Sent to Maxio as vat_number for tax calculation. Do not include the ISO 3166-1 alpha-2 country prefix (e.g. use "123456789" for a German number, not "DE123456789"). When provided: 2–50 characters, must start with a letter or digit, and may contain only letters, digits, dots (.), and hyphens (-). Example: delectus

components   object     

Exactly one component (stairstep) to upgrade. Only upgrades are allowed; downgrades are rejected. Must contain 1 items.

0   object  optional    
component_id   integer     

Must be at least 1. Example: 31

allocated_quantity   integer     

Must be at least 1. Example: 38

Renew subscription (billing / payment data only).

requires authentication

Stripe SCA/3DS (post-auth): payment-profile create or direct renewal payment may return Maxio 422 with action_link. Mapped to HTTP 422 with code=three_d_secure_required (same shape as subscription create).

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/1/renew" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_testing\": false,
    \"chargify_token\": \"iljjywqtgejzwmwhbjiurcn\",
    \"collection_method\": \"remittance\",
    \"payment_profile_id\": 13,
    \"payment_type\": \"credit_card\",
    \"first_name\": \"lfupvwionnnzwbwnfebdjhuk\",
    \"last_name\": \"h\",
    \"billing_first_name\": \"uqhlyomqfianls\",
    \"billing_last_name\": \"psylnay\",
    \"email\": \"stephan72@example.com\",
    \"locale\": \"ar_EG\",
    \"organization\": \"deijrfm\",
    \"phone\": \"hckfcbgr\",
    \"address\": \"lisqovmhrmtymjgo\",
    \"address_2\": \"hyjxiinjbi\",
    \"city\": \"trswrfc\",
    \"state\": \"xmfbeookc\",
    \"country\": \"nj\",
    \"zip\": \"cllkgsuiicalqdje\",
    \"billing_address\": \"fygifltbvhpqtz\",
    \"billing_address_2\": \"orjlmydwfjrrsjppxcnw\",
    \"billing_city\": \"xbwkfjsttfetyifuj\",
    \"billing_state\": \"dwuvusandwusehm\",
    \"billing_country\": \"lb\",
    \"billing_zip\": \"sbcgxbev\",
    \"tax_id\": \"est\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/1/renew"
);

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

let body = {
    "is_testing": false,
    "chargify_token": "iljjywqtgejzwmwhbjiurcn",
    "collection_method": "remittance",
    "payment_profile_id": 13,
    "payment_type": "credit_card",
    "first_name": "lfupvwionnnzwbwnfebdjhuk",
    "last_name": "h",
    "billing_first_name": "uqhlyomqfianls",
    "billing_last_name": "psylnay",
    "email": "stephan72@example.com",
    "locale": "ar_EG",
    "organization": "deijrfm",
    "phone": "hckfcbgr",
    "address": "lisqovmhrmtymjgo",
    "address_2": "hyjxiinjbi",
    "city": "trswrfc",
    "state": "xmfbeookc",
    "country": "nj",
    "zip": "cllkgsuiicalqdje",
    "billing_address": "fygifltbvhpqtz",
    "billing_address_2": "orjlmydwfjrrsjppxcnw",
    "billing_city": "xbwkfjsttfetyifuj",
    "billing_state": "dwuvusandwusehm",
    "billing_country": "lb",
    "billing_zip": "sbcgxbev",
    "tax_id": "est"
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "organisation_id": 20658,
        "subscribable_product_id": 14,
        "status": "active",
        "auto_renew": false,
        "selected_stairstep": null,
        "maxio_subscription_id": 561845,
        "expired_at": null,
        "self_upgrade_disabled_until": null,
        "created_at": "2026-08-14T14:44:53.000000Z",
        "updated_at": "2026-09-11T02:30:13.000000Z",
        "deleted_at": null,
        "current_period": {
            "id": 1,
            "organisation_product_subscription_id": 1,
            "starts_at": "2026-08-14T11:58:59.000000Z",
            "ends_at": "2027-08-14T11:58:59.000000Z",
            "role": "signup",
            "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
            "maxio_payment_id": "7197580",
            "payment_status": "paid",
            "invoice_created_at": "2026-08-14T11:59:00.000000Z",
            "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
            "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
            "created_at": "2026-08-14T14:44:53.000000Z",
            "updated_at": "2026-08-14T14:44:53.000000Z"
        },
        "periods": [
            {
                "id": 1,
                "organisation_product_subscription_id": 1,
                "starts_at": "2026-08-14T11:58:59.000000Z",
                "ends_at": "2027-08-14T11:58:59.000000Z",
                "role": "signup",
                "maxio_invoice_uid": "inv_c7zn4pxmxpwwz",
                "maxio_payment_id": "7197580",
                "payment_status": "paid",
                "invoice_created_at": "2026-08-14T11:59:00.000000Z",
                "invoice_paid_at": "2026-08-14T00:00:00.000000Z",
                "invoice_due_date_at": "2026-08-14T00:00:00.000000Z",
                "created_at": "2026-08-14T14:44:53.000000Z",
                "updated_at": "2026-08-14T14:44:53.000000Z"
            }
        ],
        "invoices": [],
        "usage": []
    }
}
 

Example response (422):


three_d_secure_required | billing_error
 

Example response (502):


Could not issue the renewal invoice in the billing system
 

Request      

POST api/organisations/{organisation_id}/subscriptions/{subscription_id}/renew

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

subscription_id   integer     

The ID of the subscription. Example: 1

Body Parameters

is_testing   boolean     

When true, validates payload and returns renewal preview only. When false, applies renewal (clears delayed cancel in Maxio and re-syncs). Example: false

chargify_token   string  optional    

The chargify token generated with Chargify.js. Must not be greater than 255 characters. Example: iljjywqtgejzwmwhbjiurcn

collection_method   string     

The collection method. Can be "automatic" or "remittance" (invoice-based). Example: remittance

Must be one of:
  • automatic
  • remittance
payment_profile_id   integer  optional    

Must be at least 1. Example: 13

payment_type   string     

Example: credit_card

Must be one of:
  • credit_card
  • bank_transfer
first_name   string     

Must not be greater than 255 characters. Example: lfupvwionnnzwbwnfebdjhuk

last_name   string     

Must not be greater than 255 characters. Example: h

billing_first_name   string     

Must not be greater than 255 characters. Example: uqhlyomqfianls

billing_last_name   string     

Must not be greater than 255 characters. Example: psylnay

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: stephan72@example.com

locale   string  optional    

Must not be greater than 10 characters. Example: ar_EG

organization   string     

Must not be greater than 255 characters. Example: deijrfm

phone   string     

Must be at least 8 characters. Must not be greater than 16 characters. Example: hckfcbgr

address   string     

Must not be greater than 255 characters. Example: lisqovmhrmtymjgo

address_2   string  optional    

Must not be greater than 255 characters. Example: hyjxiinjbi

city   string     

Must not be greater than 255 characters. Example: trswrfc

state   string     

Must not be greater than 255 characters. Example: xmfbeookc

country   string     

Organisation country (ISO 3166-1 alpha-2). Must be 2 characters. Example: nj

zip   string     

Must not be greater than 255 characters. Example: cllkgsuiicalqdje

billing_address   string     

Must not be greater than 255 characters. Example: fygifltbvhpqtz

billing_address_2   string  optional    

Must not be greater than 255 characters. Example: orjlmydwfjrrsjppxcnw

billing_city   string     

Must not be greater than 255 characters. Example: xbwkfjsttfetyifuj

billing_state   string     

Must not be greater than 255 characters. Example: dwuvusandwusehm

billing_country   string     

Billing country (ISO 3166-1 alpha-2). Must be 2 characters. Example: lb

billing_zip   string     

Must not be greater than 255 characters. Example: sbcgxbev

tax_id   string  optional    

Optional VAT or tax registration number. Sent to Maxio as vat_number for tax calculation. Do not include the ISO 3166-1 alpha-2 country prefix (e.g. use "123456789" for a German number, not "DE123456789"). When provided: 2–50 characters, must start with a letter or digit, and may contain only letters, digits, dots (.), and hyphens (-). Example: est

Types

Index

Get a paginated list of organisation types. Calling this unauthenticated will only return selectable types.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation-types?per_page=11&sort=name&page=1&search=sint" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation-types"
);

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

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


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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "ZDHC Internal",
            "display_name": "ZDHC Internal",
            "description": null,
            "selectable": 0,
            "created_at": "2026-08-11T13:39:51.000000Z",
            "updated_at": "2026-09-21T18:31:33.000000Z"
        },
        {
            "id": 1,
            "name": "ZDHC Internal",
            "display_name": "ZDHC Internal",
            "description": null,
            "selectable": 0,
            "created_at": "2026-08-11T13:39:51.000000Z",
            "updated_at": "2026-09-21T18:31:33.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "50",
        "to": 2
    }
}
 

Request      

GET api/organisation-types

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

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

Store

requires authentication

Create a new organisation type.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/organisation-types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"npexzswqhnzil\",
    \"display_name\": \"mesrzrotlm\",
    \"description\": \"Laboriosam quia a eum est.\",
    \"selectable\": true
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/organisation-types"
);

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

let body = {
    "name": "npexzswqhnzil",
    "display_name": "mesrzrotlm",
    "description": "Laboriosam quia a eum est.",
    "selectable": true
};

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

Example response (200, success):


{
    "message": "Organisation type created successfully."
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

POST api/organisations/{organisation_id}/organisation-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: npexzswqhnzil

display_name   string     

Must not be greater than 255 characters. Example: mesrzrotlm

description   string  optional    

Must not be greater than 65535 characters. Example: Laboriosam quia a eum est.

selectable   boolean     

Example: true

Update

requires authentication

Update an organisation type.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/organisation-types/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"judslaxjapp\",
    \"display_name\": \"hhpkcwxgzaub\",
    \"description\": \"Et et earum doloribus explicabo.\",
    \"selectable\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/organisation-types/1"
);

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

let body = {
    "name": "judslaxjapp",
    "display_name": "hhpkcwxgzaub",
    "description": "Et et earum doloribus explicabo.",
    "selectable": false
};

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

Example response (200, success):


{
    "message": "Organisation type updated successfully."
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

PUT api/organisations/{organisation_id}/organisation-types/{id}

PATCH api/organisations/{organisation_id}/organisation-types/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the organisation type. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: judslaxjapp

display_name   string     

Must not be greater than 255 characters. Example: hhpkcwxgzaub

description   string  optional    

Must not be greater than 65535 characters. Example: Et et earum doloribus explicabo.

selectable   boolean     

Example: false

Destroy

requires authentication

Delete an organisation type.

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/organisation-types/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/organisations/1/organisation-types/1"
);

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


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

Example response (200, success):


{
    "message": "Organisation type deleted successfully."
}
 

Example response (422, Type in Use):


{
    "message": "Cannot delete organisation type as it is in use."
}
 

Request      

DELETE api/organisations/{organisation_id}/organisation-types/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the organisation type. Example: 1

Users

Index

requires authentication

Get users for an organisation.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users?per_page=3&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/organisations/1/users"
);

const params = {
    "per_page": "3",
    "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,
            "organisation_id": 12083,
            "user_id": 49,
            "invited_by": null,
            "role_id": 4,
            "last_authorization": null,
            "invitation_sent_at": null,
            "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
            "created_at": "2026-08-11T13:39:38.000000Z",
            "updated_at": "2026-08-11T13:39:38.000000Z",
            "deleted_at": null,
            "user": {
                "id": 49,
                "first_name": "Truong",
                "last_name": "Cao",
                "email": "truong@truongphatchemicals.com.vn",
                "email_verified_at": "2017-01-18T06:36:40.000000Z",
                "phone": null,
                "location": "VN",
                "created_at": "2017-01-18T06:36:40.000000Z",
                "updated_at": "2017-01-18T06:36:40.000000Z",
                "deleted_at": null,
                "profile_picture_url": null
            },
            "role": {
                "id": 4,
                "parent_id": 3,
                "name": "ORGANISATION_ADMIN"
            }
        },
        {
            "id": 1,
            "organisation_id": 12083,
            "user_id": 49,
            "invited_by": null,
            "role_id": 4,
            "last_authorization": null,
            "invitation_sent_at": null,
            "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
            "created_at": "2026-08-11T13:39:38.000000Z",
            "updated_at": "2026-08-11T13:39:38.000000Z",
            "deleted_at": null,
            "user": {
                "id": 49,
                "first_name": "Truong",
                "last_name": "Cao",
                "email": "truong@truongphatchemicals.com.vn",
                "email_verified_at": "2017-01-18T06:36:40.000000Z",
                "phone": null,
                "location": "VN",
                "created_at": "2017-01-18T06:36:40.000000Z",
                "updated_at": "2017-01-18T06:36:40.000000Z",
                "deleted_at": null,
                "profile_picture_url": null
            },
            "role": {
                "id": 4,
                "parent_id": 3,
                "name": "ORGANISATION_ADMIN"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Show

requires authentication

Show an organisation user

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users/8/getOrganisationUser" \
    --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/organisations/1/users/8/getOrganisationUser"
);

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,
        "organisation_id": 12083,
        "user_id": 49,
        "invited_by": null,
        "role_id": 4,
        "last_authorization": null,
        "invitation_sent_at": null,
        "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
        "created_at": "2026-08-11T13:39:38.000000Z",
        "updated_at": "2026-08-11T13:39:38.000000Z",
        "deleted_at": null,
        "role": {
            "id": 4,
            "parent_id": 3,
            "name": "ORGANISATION_ADMIN"
        }
    }
}
 

Request      

GET api/organisations/{organisation_id}/users/{user_id}/getOrganisationUser

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

user_id   integer     

The ID of the user. Example: 8

Invite

requires authentication

Invite users to an organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/invite" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"emails\": [
        \"user@example.com\"
    ],
    \"role_id\": 16
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/invite"
);

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

let body = {
    "emails": [
        "user@example.com"
    ],
    "role_id": 16
};

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisations/{organisation_id}/invite

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

emails   string[]     

Email addresses to invite.

role_id   integer  optional    

optional Organisation role to assign. Defaults to Organisation Member. Example: 16

Resend invitation

requires authentication

Notify a user that has already been invited again.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users/8/resend-invitation" \
    --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/organisations/1/users/8/resend-invitation"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisations/{organisation_id}/users/{organisationUser_id}/resend-invitation

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

organisationUser_id   integer     

The ID of the organisationUser. Example: 8

Change role

requires authentication

Change the role of a user in an organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users/8/role/change" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"role_id\": 14
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users/8/role/change"
);

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

let body = {
    "role_id": 14
};

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisations/{organisation_id}/users/{organisationUser_id}/role/change

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

organisationUser_id   integer     

The ID of the organisationUser. Example: 8

Body Parameters

role_id   integer     

The ID of the role to change the user to. Example: 14

Detach

requires authentication

Detach a user from an organisation.

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users/8/detach" \
    --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/organisations/1/users/8/detach"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

DELETE api/organisations/{organisation_id}/users/{organisationUser_id}/detach

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

organisationUser_id   integer     

The ID of the organisationUser. Example: 8

Supplier Profile

Show

requires authentication

Get the supplier profile

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/supplier-profile/show" \
    --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/organisations/1/supplier-profile/show"
);

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": 207,
        "organisation_id": 21844,
        "facility_type_id": 216,
        "discharge_volume": null,
        "discharge_points_count": null,
        "sludge_generation": 0,
        "created_at": "2026-09-21T18:31:44.000000Z",
        "updated_at": "2026-09-21T18:31:44.000000Z",
        "attributes": []
    }
}
 

Request      

GET api/organisations/{organisation_id}/supplier-profile/show

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Update

requires authentication

Update the supplier profile for the organisation

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/supplier-profile/update?facility_type_id=laudantium&attributes[]=6053&discharge_volume=7&discharge_points_count=2&sludge_generation=" \
    --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/organisations/1/supplier-profile/update"
);

const params = {
    "facility_type_id": "laudantium",
    "attributes[0]": "6053",
    "discharge_volume": "7",
    "discharge_points_count": "2",
    "sludge_generation": "0",
};
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: "PUT",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "OK"
}
 

Request      

PUT api/organisations/{organisation_id}/supplier-profile/update

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

facility_type_id   string     

The id of an existing record in the supplier_facility_types table. Example: laudantium

attributes   string[]  optional    
Must be one of:
  • 1
  • 18
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 529
  • 546
  • 608
  • 609
  • 610
  • 611
  • 612
  • 613
  • 642
  • 643
  • 644
  • 645
  • 646
  • 647
  • 648
  • 649
  • 650
  • 651
  • 652
  • 653
  • 654
  • 655
  • 656
  • 657
  • 705
  • 706
  • 707
  • 708
  • 709
  • 710
  • 711
  • 712
  • 713
  • 714
  • 715
  • 716
  • 717
  • 718
  • 719
  • 720
  • 721
  • 722
  • 723
  • 724
  • 725
  • 726
  • 727
  • 728
  • 729
  • 730
  • 731
  • 732
  • 733
  • 734
  • 735
  • 736
  • 737
  • 738
  • 739
  • 740
  • 741
  • 742
  • 743
  • 744
  • 745
  • 746
  • 747
  • 748
  • 749
  • 750
  • 767
  • 829
  • 830
  • 831
  • 832
  • 833
  • 834
  • 863
  • 864
  • 865
  • 866
  • 867
  • 868
  • 869
  • 870
  • 871
  • 872
  • 873
  • 874
  • 875
  • 876
  • 877
  • 878
  • 926
  • 927
  • 928
  • 929
  • 930
  • 931
  • 932
  • 933
  • 934
  • 935
  • 936
  • 937
  • 938
  • 939
  • 940
  • 941
  • 942
  • 943
  • 944
  • 945
  • 946
  • 947
  • 948
  • 949
  • 950
  • 951
  • 952
  • 953
  • 954
  • 955
  • 956
  • 957
  • 958
  • 959
  • 960
  • 961
  • 962
  • 963
  • 964
  • 965
  • 966
  • 967
  • 968
  • 969
  • 970
  • 971
  • 988
  • 1050
  • 1051
  • 1052
  • 1053
  • 1054
  • 1055
  • 1084
  • 1085
  • 1086
  • 1087
  • 1088
  • 1089
  • 1090
  • 1091
  • 1092
  • 1093
  • 1094
  • 1095
  • 1096
  • 1097
  • 1098
  • 1099
  • 1147
  • 1148
  • 1149
  • 1150
  • 1151
  • 1152
  • 1153
  • 1154
  • 1155
  • 1156
  • 1157
  • 1158
  • 1159
  • 1160
  • 1161
  • 1162
  • 1163
  • 1164
  • 1165
  • 1166
  • 1167
  • 1168
  • 1169
  • 1170
  • 1171
  • 1172
  • 1173
  • 1174
  • 1175
  • 1176
  • 1177
  • 1178
  • 1179
  • 1180
  • 1181
  • 1182
  • 1183
  • 1184
  • 1185
  • 1186
  • 1187
  • 1188
  • 1189
  • 1190
  • 1191
  • 1192
  • 1209
  • 1271
  • 1272
  • 1273
  • 1274
  • 1275
  • 1276
  • 1305
  • 1306
  • 1307
  • 1308
  • 1309
  • 1310
  • 1311
  • 1312
  • 1313
  • 1314
  • 1315
  • 1316
  • 1317
  • 1318
  • 1319
  • 1320
  • 1368
  • 1369
  • 1370
  • 1371
  • 1372
  • 1373
  • 1374
  • 1375
  • 1376
  • 1377
  • 1378
  • 1379
  • 1380
  • 1381
  • 1382
  • 1383
  • 1384
  • 1385
  • 1386
  • 1387
  • 1388
  • 1389
  • 1390
  • 1391
  • 1392
  • 1393
  • 1394
  • 1395
  • 1396
  • 1397
  • 1398
  • 1399
  • 1400
  • 1401
  • 1402
  • 1403
  • 1404
  • 1405
  • 1406
  • 1407
  • 1408
  • 1409
  • 1410
  • 1411
  • 1412
  • 1413
  • 1430
  • 1492
  • 1493
  • 1494
  • 1495
  • 1496
  • 1497
  • 1526
  • 1527
  • 1528
  • 1529
  • 1530
  • 1531
  • 1532
  • 1533
  • 1534
  • 1535
  • 1536
  • 1537
  • 1538
  • 1539
  • 1540
  • 1541
  • 1589
  • 1590
  • 1591
  • 1592
  • 1593
  • 1594
  • 1595
  • 1596
  • 1597
  • 1598
  • 1599
  • 1600
  • 1601
  • 1602
  • 1603
  • 1604
  • 1605
  • 1606
  • 1607
  • 1608
  • 1609
  • 1610
  • 1611
  • 1612
  • 1613
  • 1614
  • 1615
  • 1616
  • 1617
  • 1618
  • 1619
  • 1620
  • 1621
  • 1622
  • 1623
  • 1624
  • 1625
  • 1626
  • 1627
  • 1628
  • 1629
  • 1630
  • 1631
  • 1632
  • 1633
  • 1634
  • 1651
  • 1713
  • 1714
  • 1715
  • 1716
  • 1717
  • 1718
  • 1747
  • 1748
  • 1749
  • 1750
  • 1751
  • 1752
  • 1753
  • 1754
  • 1755
  • 1756
  • 1757
  • 1758
  • 1759
  • 1760
  • 1761
  • 1762
  • 1810
  • 1811
  • 1812
  • 1813
  • 1814
  • 1815
  • 1816
  • 1817
  • 1818
  • 1819
  • 1820
  • 1821
  • 1822
  • 1823
  • 1824
  • 1825
  • 1826
  • 1827
  • 1828
  • 1829
  • 1830
  • 1831
  • 1832
  • 1833
  • 1834
  • 1835
  • 1836
  • 1837
  • 1838
  • 1839
  • 1840
  • 1841
  • 1842
  • 1843
  • 1844
  • 1845
  • 1846
  • 1847
  • 1848
  • 1849
  • 1850
  • 1851
  • 1852
  • 1853
  • 1854
  • 1855
  • 1872
  • 1934
  • 1935
  • 1936
  • 1937
  • 1938
  • 1939
  • 1968
  • 1969
  • 1970
  • 1971
  • 1972
  • 1973
  • 1974
  • 1975
  • 1976
  • 1977
  • 1978
  • 1979
  • 1980
  • 1981
  • 1982
  • 1983
  • 2031
  • 2032
  • 2033
  • 2034
  • 2035
  • 2036
  • 2037
  • 2038
  • 2039
  • 2040
  • 2041
  • 2042
  • 2043
  • 2044
  • 2045
  • 2046
  • 2047
  • 2048
  • 2049
  • 2050
  • 2051
  • 2052
  • 2053
  • 2054
  • 2055
  • 2056
  • 2057
  • 2058
  • 2059
  • 2060
  • 2061
  • 2062
  • 2063
  • 2064
  • 2065
  • 2066
  • 2067
  • 2068
  • 2069
  • 2070
  • 2071
  • 2072
  • 2073
  • 2074
  • 2075
  • 2076
  • 2093
  • 2155
  • 2156
  • 2157
  • 2158
  • 2159
  • 2160
  • 2189
  • 2190
  • 2191
  • 2192
  • 2193
  • 2194
  • 2195
  • 2196
  • 2197
  • 2198
  • 2199
  • 2200
  • 2201
  • 2202
  • 2203
  • 2204
  • 2252
  • 2253
  • 2254
  • 2255
  • 2256
  • 2257
  • 2258
  • 2259
  • 2260
  • 2261
  • 2262
  • 2263
  • 2264
  • 2265
  • 2266
  • 2267
  • 2268
  • 2269
  • 2270
  • 2271
  • 2272
  • 2273
  • 2274
  • 2275
  • 2276
  • 2277
  • 2278
  • 2279
  • 2280
  • 2281
  • 2282
  • 2283
  • 2284
  • 2285
  • 2286
  • 2287
  • 2288
  • 2289
  • 2290
  • 2291
  • 2292
  • 2293
  • 2294
  • 2295
  • 2296
  • 2297
  • 2314
  • 2376
  • 2377
  • 2378
  • 2379
  • 2380
  • 2381
  • 2410
  • 2411
  • 2412
  • 2413
  • 2414
  • 2415
  • 2416
  • 2417
  • 2418
  • 2419
  • 2420
  • 2421
  • 2422
  • 2423
  • 2424
  • 2425
  • 2473
  • 2474
  • 2475
  • 2476
  • 2477
  • 2478
  • 2479
  • 2480
  • 2481
  • 2482
  • 2483
  • 2484
  • 2485
  • 2486
  • 2487
  • 2488
  • 2489
  • 2490
  • 2491
  • 2492
  • 2493
  • 2494
  • 2495
  • 2496
  • 2497
  • 2498
  • 2499
  • 2500
  • 2501
  • 2502
  • 2503
  • 2504
  • 2505
  • 2506
  • 2507
  • 2508
  • 2509
  • 2510
  • 2511
  • 2512
  • 2513
  • 2514
  • 2515
  • 2516
  • 2517
  • 2518
  • 2535
  • 2597
  • 2598
  • 2599
  • 2600
  • 2601
  • 2602
  • 2631
  • 2632
  • 2633
  • 2634
  • 2635
  • 2636
  • 2637
  • 2638
  • 2639
  • 2640
  • 2641
  • 2642
  • 2643
  • 2644
  • 2645
  • 2646
  • 2694
  • 2695
  • 2696
  • 2697
  • 2698
  • 2699
  • 2700
  • 2701
  • 2702
  • 2703
  • 2704
  • 2705
  • 2706
  • 2707
  • 2708
  • 2709
  • 2710
  • 2711
  • 2712
  • 2713
  • 2714
  • 2715
  • 2716
  • 2717
  • 2718
  • 2719
  • 2720
  • 2721
  • 2722
  • 2723
  • 2724
  • 2725
  • 2726
  • 2727
  • 2728
  • 2729
  • 2730
  • 2731
  • 2732
  • 2733
  • 2734
  • 2735
  • 2736
  • 2737
  • 2738
  • 2739
  • 2756
  • 2818
  • 2819
  • 2820
  • 2821
  • 2822
  • 2823
  • 2852
  • 2853
  • 2854
  • 2855
  • 2856
  • 2857
  • 2858
  • 2859
  • 2860
  • 2861
  • 2862
  • 2863
  • 2864
  • 2865
  • 2866
  • 2867
  • 2915
  • 2916
  • 2917
  • 2918
  • 2919
  • 2920
  • 2921
  • 2922
  • 2923
  • 2924
  • 2925
  • 2926
  • 2927
  • 2928
  • 2929
  • 2930
  • 2931
  • 2932
  • 2933
  • 2934
  • 2935
  • 2936
  • 2937
  • 2938
  • 2939
  • 2940
  • 2941
  • 2942
  • 2943
  • 2944
  • 2945
  • 2946
  • 2947
  • 2948
  • 2949
  • 2950
  • 2951
  • 2952
  • 2953
  • 2954
  • 2955
  • 2956
  • 2957
  • 2958
  • 2959
  • 2960
  • 2977
  • 3039
  • 3040
  • 3041
  • 3042
  • 3043
  • 3044
  • 3073
  • 3074
  • 3075
  • 3076
  • 3077
  • 3078
  • 3079
  • 3080
  • 3081
  • 3082
  • 3083
  • 3084
  • 3085
  • 3086
  • 3087
  • 3088
  • 3136
  • 3137
  • 3138
  • 3139
  • 3140
  • 3141
  • 3142
  • 3143
  • 3144
  • 3145
  • 3146
  • 3147
  • 3148
  • 3149
  • 3150
  • 3151
  • 3152
  • 3153
  • 3154
  • 3155
  • 3156
  • 3157
  • 3158
  • 3159
  • 3160
  • 3161
  • 3162
  • 3163
  • 3164
  • 3165
  • 3166
  • 3167
  • 3168
  • 3169
  • 3170
  • 3171
  • 3172
  • 3173
  • 3174
  • 3175
  • 3176
  • 3177
  • 3178
  • 3179
  • 3180
  • 3181
  • 3198
  • 3260
  • 3261
  • 3262
  • 3263
  • 3264
  • 3265
  • 3294
  • 3295
  • 3296
  • 3297
  • 3298
  • 3299
  • 3300
  • 3301
  • 3302
  • 3303
  • 3304
  • 3305
  • 3306
  • 3307
  • 3308
  • 3309
  • 3357
  • 3358
  • 3359
  • 3360
  • 3361
  • 3362
  • 3363
  • 3364
  • 3365
  • 3366
  • 3367
  • 3368
  • 3369
  • 3370
  • 3371
  • 3372
  • 3373
  • 3374
  • 3375
  • 3376
  • 3377
  • 3378
  • 3379
  • 3380
  • 3381
  • 3382
  • 3383
  • 3384
  • 3385
  • 3386
  • 3387
  • 3388
  • 3389
  • 3390
  • 3391
  • 3392
  • 3393
  • 3394
  • 3395
  • 3396
  • 3397
  • 3398
  • 3399
  • 3400
  • 3401
  • 3402
  • 3419
  • 3481
  • 3482
  • 3483
  • 3484
  • 3485
  • 3486
  • 3515
  • 3516
  • 3517
  • 3518
  • 3519
  • 3520
  • 3521
  • 3522
  • 3523
  • 3524
  • 3525
  • 3526
  • 3527
  • 3528
  • 3529
  • 3530
  • 3578
  • 3579
  • 3580
  • 3581
  • 3582
  • 3583
  • 3584
  • 3585
  • 3586
  • 3587
  • 3588
  • 3589
  • 3590
  • 3591
  • 3592
  • 3593
  • 3594
  • 3595
  • 3596
  • 3597
  • 3598
  • 3599
  • 3600
  • 3601
  • 3602
  • 3603
  • 3604
  • 3605
  • 3606
  • 3607
  • 3608
  • 3609
  • 3610
  • 3611
  • 3612
  • 3613
  • 3614
  • 3615
  • 3616
  • 3617
  • 3618
  • 3619
  • 3620
  • 3621
  • 3622
  • 3623
  • 3640
  • 3702
  • 3703
  • 3704
  • 3705
  • 3706
  • 3707
  • 3736
  • 3737
  • 3738
  • 3739
  • 3740
  • 3741
  • 3742
  • 3743
  • 3744
  • 3745
  • 3746
  • 3747
  • 3748
  • 3749
  • 3750
  • 3751
  • 3799
  • 3800
  • 3801
  • 3802
  • 3803
  • 3804
  • 3805
  • 3806
  • 3807
  • 3808
  • 3809
  • 3810
  • 3811
  • 3812
  • 3813
  • 3814
  • 3815
  • 3816
  • 3817
  • 3818
  • 3819
  • 3820
  • 3821
  • 3822
  • 3823
  • 3824
  • 3825
  • 3826
  • 3827
  • 3828
  • 3829
  • 3830
  • 3831
  • 3832
  • 3833
  • 3834
  • 3835
  • 3836
  • 3837
  • 3838
  • 3839
  • 3840
  • 3841
  • 3842
  • 3843
  • 3844
  • 3861
  • 3923
  • 3924
  • 3925
  • 3926
  • 3927
  • 3928
  • 3957
  • 3958
  • 3959
  • 3960
  • 3961
  • 3962
  • 3963
  • 3964
  • 3965
  • 3966
  • 3967
  • 3968
  • 3969
  • 3970
  • 3971
  • 3972
  • 4020
  • 4021
  • 4022
  • 4023
  • 4024
  • 4025
  • 4026
  • 4027
  • 4028
  • 4029
  • 4030
  • 4031
  • 4032
  • 4033
  • 4034
  • 4035
  • 4036
  • 4037
  • 4038
  • 4039
  • 4040
  • 4041
  • 4042
  • 4043
  • 4044
  • 4045
  • 4046
  • 4047
  • 4048
  • 4049
  • 4050
  • 4051
  • 4052
  • 4053
  • 4054
  • 4055
  • 4056
  • 4057
  • 4058
  • 4059
  • 4060
  • 4061
  • 4062
  • 4063
  • 4064
  • 4065
  • 4082
  • 4144
  • 4145
  • 4146
  • 4147
  • 4148
  • 4149
  • 4178
  • 4179
  • 4180
  • 4181
  • 4182
  • 4183
  • 4184
  • 4185
  • 4186
  • 4187
  • 4188
  • 4189
  • 4190
  • 4191
  • 4192
  • 4193
  • 4241
  • 4242
  • 4243
  • 4244
  • 4245
  • 4246
  • 4247
  • 4248
  • 4249
  • 4250
  • 4251
  • 4252
  • 4253
  • 4254
  • 4255
  • 4256
  • 4257
  • 4258
  • 4259
  • 4260
  • 4261
  • 4262
  • 4263
  • 4264
  • 4265
  • 4266
  • 4267
  • 4268
  • 4269
  • 4270
  • 4271
  • 4272
  • 4273
  • 4274
  • 4275
  • 4276
  • 4277
  • 4278
  • 4279
  • 4280
  • 4281
  • 4282
  • 4283
  • 4284
  • 4285
  • 4286
  • 4303
  • 4365
  • 4366
  • 4367
  • 4368
  • 4369
  • 4370
  • 4399
  • 4400
  • 4401
  • 4402
  • 4403
  • 4404
  • 4405
  • 4406
  • 4407
  • 4408
  • 4409
  • 4410
  • 4411
  • 4412
  • 4413
  • 4414
  • 4462
  • 4463
  • 4464
  • 4465
  • 4466
  • 4467
  • 4468
  • 4469
  • 4470
  • 4471
  • 4472
  • 4473
  • 4474
  • 4475
  • 4476
  • 4477
  • 4478
  • 4479
  • 4480
  • 4481
  • 4482
  • 4483
  • 4484
  • 4485
  • 4486
  • 4487
  • 4488
  • 4489
  • 4490
  • 4491
  • 4492
  • 4493
  • 4494
  • 4495
  • 4496
  • 4497
  • 4498
  • 4499
  • 4500
  • 4501
  • 4502
  • 4503
  • 4504
  • 4505
  • 4506
  • 4507
  • 4524
  • 4586
  • 4587
  • 4588
  • 4589
  • 4590
  • 4591
  • 4620
  • 4621
  • 4622
  • 4623
  • 4624
  • 4625
  • 4626
  • 4627
  • 4628
  • 4629
  • 4630
  • 4631
  • 4632
  • 4633
  • 4634
  • 4635
  • 4683
  • 4684
  • 4685
  • 4686
  • 4687
  • 4688
  • 4689
  • 4690
  • 4691
  • 4692
  • 4693
  • 4694
  • 4695
  • 4696
  • 4697
  • 4698
  • 4699
  • 4700
  • 4701
  • 4702
  • 4703
  • 4704
  • 4705
  • 4706
  • 4707
  • 4708
  • 4709
  • 4710
  • 4711
  • 4712
  • 4713
  • 4714
  • 4715
  • 4716
  • 4717
  • 4718
  • 4719
  • 4720
  • 4721
  • 4722
  • 4723
  • 4724
  • 4725
  • 4726
  • 4727
  • 4728
  • 4745
  • 4807
  • 4808
  • 4809
  • 4810
  • 4811
  • 4812
  • 4841
  • 4842
  • 4843
  • 4844
  • 4845
  • 4846
  • 4847
  • 4848
  • 4849
  • 4850
  • 4851
  • 4852
  • 4853
  • 4854
  • 4855
  • 4856
  • 4904
  • 4905
  • 4906
  • 4907
  • 4908
  • 4909
  • 4910
  • 4911
  • 4912
  • 4913
  • 4914
  • 4915
  • 4916
  • 4917
  • 4918
  • 4919
  • 4920
  • 4921
  • 4922
  • 4923
  • 4924
  • 4925
  • 4926
  • 4927
  • 4928
  • 4929
  • 4930
  • 4931
  • 4932
  • 4933
  • 4934
  • 4935
  • 4936
  • 4937
  • 4938
  • 4939
  • 4940
  • 4941
  • 4942
  • 4943
  • 4944
  • 4945
  • 4946
  • 4947
  • 4948
  • 4949
  • 4966
  • 5028
  • 5029
  • 5030
  • 5031
  • 5032
  • 5033
  • 5062
  • 5063
  • 5064
  • 5065
  • 5066
  • 5067
  • 5068
  • 5069
  • 5070
  • 5071
  • 5072
  • 5073
  • 5074
  • 5075
  • 5076
  • 5077
  • 5125
  • 5126
  • 5127
  • 5128
  • 5129
  • 5130
  • 5131
  • 5132
  • 5133
  • 5134
  • 5135
  • 5136
  • 5137
  • 5138
  • 5139
  • 5140
  • 5141
  • 5142
  • 5143
  • 5144
  • 5145
  • 5146
  • 5147
  • 5148
  • 5149
  • 5150
  • 5151
  • 5152
  • 5153
  • 5154
  • 5155
  • 5156
  • 5157
  • 5158
  • 5159
  • 5160
  • 5161
  • 5162
  • 5163
  • 5164
  • 5165
  • 5166
  • 5167
  • 5168
  • 5169
  • 5170
  • 5187
  • 5249
  • 5250
  • 5251
  • 5252
  • 5253
  • 5254
  • 5283
  • 5284
  • 5285
  • 5286
  • 5287
  • 5288
  • 5289
  • 5290
  • 5291
  • 5292
  • 5293
  • 5294
  • 5295
  • 5296
  • 5297
  • 5298
  • 5346
  • 5347
  • 5348
  • 5349
  • 5350
  • 5351
  • 5352
  • 5353
  • 5354
  • 5355
  • 5356
  • 5357
  • 5358
  • 5359
  • 5360
  • 5361
  • 5362
  • 5363
  • 5364
  • 5365
  • 5366
  • 5367
  • 5368
  • 5369
  • 5370
  • 5371
  • 5372
  • 5373
  • 5374
  • 5375
  • 5376
  • 5377
  • 5378
  • 5379
  • 5380
  • 5381
  • 5382
  • 5383
  • 5384
  • 5385
  • 5386
  • 5387
  • 5388
  • 5389
  • 5390
  • 5391
  • 5408
  • 5470
  • 5471
  • 5472
  • 5473
  • 5474
  • 5475
  • 5504
  • 5505
  • 5506
  • 5507
  • 5508
  • 5509
  • 5510
  • 5511
  • 5512
  • 5513
  • 5514
  • 5515
  • 5516
  • 5517
  • 5518
  • 5519
  • 5567
  • 5568
  • 5569
  • 5570
  • 5571
  • 5572
  • 5573
  • 5574
  • 5575
  • 5576
  • 5577
  • 5578
  • 5579
  • 5580
  • 5581
  • 5582
  • 5583
  • 5584
  • 5585
  • 5586
  • 5587
  • 5588
  • 5589
  • 5590
  • 5591
  • 5592
  • 5593
  • 5594
  • 5595
  • 5596
  • 5597
  • 5598
  • 5599
  • 5600
  • 5601
  • 5602
  • 5603
  • 5604
  • 5605
  • 5606
  • 5607
  • 5608
  • 5609
  • 5610
  • 5611
  • 5612
  • 5629
  • 5691
  • 5692
  • 5693
  • 5694
  • 5695
  • 5696
  • 5725
  • 5726
  • 5727
  • 5728
  • 5729
  • 5730
  • 5731
  • 5732
  • 5733
  • 5734
  • 5735
  • 5736
  • 5737
  • 5738
  • 5739
  • 5740
  • 5788
  • 5789
  • 5790
  • 5791
  • 5792
  • 5793
  • 5794
  • 5795
  • 5796
  • 5797
  • 5798
  • 5799
  • 5800
  • 5801
  • 5802
  • 5803
  • 5804
  • 5805
  • 5806
  • 5807
  • 5808
  • 5809
  • 5810
  • 5811
  • 5812
  • 5813
  • 5814
  • 5815
  • 5816
  • 5817
  • 5818
  • 5819
  • 5820
  • 5821
  • 5822
  • 5823
  • 5824
  • 5825
  • 5826
  • 5827
  • 5828
  • 5829
  • 5830
  • 5831
  • 5832
  • 5833
  • 5850
  • 5912
  • 5913
  • 5914
  • 5915
  • 5916
  • 5917
  • 5946
  • 5947
  • 5948
  • 5949
  • 5950
  • 5951
  • 5952
  • 5953
  • 5954
  • 5955
  • 5956
  • 5957
  • 5958
  • 5959
  • 5960
  • 5961
  • 6009
  • 6010
  • 6011
  • 6012
  • 6013
  • 6014
  • 6015
  • 6016
  • 6017
  • 6018
  • 6019
  • 6020
  • 6021
  • 6022
  • 6023
  • 6024
  • 6025
  • 6026
  • 6027
  • 6028
  • 6029
  • 6030
  • 6031
  • 6032
  • 6033
  • 6034
  • 6035
  • 6036
  • 6037
  • 6038
  • 6039
  • 6040
  • 6041
  • 6042
  • 6043
  • 6044
  • 6045
  • 6046
  • 6047
  • 6048
  • 6049
  • 6050
  • 6051
  • 6052
  • 6053
  • 6054
  • 6071
  • 6133
  • 6134
  • 6135
  • 6136
  • 6137
  • 6138
  • 6167
  • 6168
  • 6169
  • 6170
  • 6171
  • 6172
  • 6173
  • 6174
  • 6175
  • 6176
  • 6177
  • 6178
  • 6179
  • 6180
  • 6181
  • 6182
  • 6230
  • 6231
  • 6232
  • 6233
  • 6234
  • 6235
  • 6236
  • 6237
  • 6238
  • 6239
  • 6240
  • 6241
  • 6242
  • 6243
  • 6244
  • 6245
  • 6246
  • 6247
  • 6248
  • 6249
  • 6250
  • 6251
  • 6252
  • 6253
  • 6254
  • 6255
  • 6256
  • 6257
  • 6258
  • 6259
  • 6260
  • 6261
  • 6262
  • 6263
  • 6264
  • 6265
  • 6266
  • 6267
  • 6268
  • 6269
  • 6270
  • 6271
  • 6272
  • 6273
  • 6274
  • 6275
  • 6292
  • 6354
  • 6355
  • 6356
  • 6357
  • 6358
  • 6359
  • 6388
  • 6389
  • 6390
  • 6391
  • 6392
  • 6393
  • 6394
  • 6395
  • 6396
  • 6397
  • 6398
  • 6399
  • 6400
  • 6401
  • 6402
  • 6403
  • 6451
  • 6452
  • 6453
  • 6454
  • 6455
  • 6456
  • 6457
  • 6458
  • 6459
  • 6460
  • 6461
  • 6462
  • 6463
  • 6464
  • 6465
  • 6466
  • 6467
  • 6468
  • 6469
  • 6470
  • 6471
  • 6472
  • 6473
  • 6474
  • 6475
  • 6476
  • 6477
  • 6478
  • 6479
  • 6480
  • 6481
  • 6482
  • 6483
  • 6484
  • 6485
  • 6486
  • 6487
  • 6488
  • 6489
  • 6490
  • 6491
  • 6492
  • 6493
  • 6494
  • 6495
  • 6496
  • 6513
  • 6575
  • 6576
  • 6577
  • 6578
  • 6579
  • 6580
  • 6609
  • 6610
  • 6611
  • 6612
  • 6613
  • 6614
  • 6615
  • 6616
  • 6617
  • 6618
  • 6619
  • 6620
  • 6621
  • 6622
  • 6623
  • 6624
  • 6672
  • 6673
  • 6674
  • 6675
  • 6676
  • 6677
  • 6678
  • 6679
  • 6680
  • 6681
  • 6682
  • 6683
  • 6684
  • 6685
  • 6686
  • 6687
  • 6688
  • 6689
  • 6690
  • 6691
  • 6692
  • 6693
  • 6694
  • 6695
  • 6696
  • 6697
  • 6698
  • 6699
  • 6700
  • 6701
  • 6702
  • 6703
  • 6704
  • 6705
  • 6706
  • 6707
  • 6708
  • 6709
  • 6710
  • 6711
  • 6712
  • 6713
  • 6714
  • 6715
  • 6716
  • 6717
  • 6734
  • 6796
  • 6797
  • 6798
  • 6799
  • 6800
  • 6801
  • 6830
  • 6831
  • 6832
  • 6833
  • 6834
  • 6835
  • 6836
  • 6837
  • 6838
  • 6839
  • 6840
  • 6841
  • 6842
  • 6843
  • 6844
  • 6845
  • 6893
  • 6894
  • 6895
  • 6896
  • 6897
  • 6898
  • 6899
  • 6900
  • 6901
  • 6902
  • 6903
  • 6904
  • 6905
  • 6906
  • 6907
  • 6908
  • 6909
  • 6910
  • 6911
  • 6912
  • 6913
  • 6914
  • 6915
  • 6916
  • 6917
  • 6918
  • 6919
  • 6920
  • 6921
  • 6922
  • 6923
  • 6924
  • 6925
  • 6926
  • 6927
  • 6928
  • 6929
  • 6930
  • 6931
  • 6932
  • 6933
  • 6934
  • 6935
  • 6936
  • 6937
  • 6938
  • 6955
  • 7017
  • 7018
  • 7019
  • 7020
  • 7021
  • 7022
  • 7051
  • 7052
  • 7053
  • 7054
  • 7055
  • 7056
  • 7057
  • 7058
  • 7059
  • 7060
  • 7061
  • 7062
  • 7063
  • 7064
  • 7065
  • 7066
  • 7114
  • 7115
  • 7116
  • 7117
  • 7118
  • 7119
  • 7120
  • 7121
  • 7122
  • 7123
  • 7124
  • 7125
  • 7126
  • 7127
  • 7128
  • 7129
  • 7130
  • 7131
  • 7132
  • 7133
  • 7134
  • 7135
  • 7136
  • 7137
  • 7138
  • 7139
  • 7140
  • 7141
  • 7142
  • 7143
  • 7144
  • 7145
  • 7146
  • 7147
  • 7148
  • 7149
  • 7150
  • 7151
  • 7152
  • 7153
  • 7154
  • 7155
  • 7156
  • 7157
  • 7158
discharge_volume   number  optional    

Must not be greater than 2147483647. Example: 7

discharge_points_count   number  optional    

Must not be greater than 3. Example: 2

sludge_generation   boolean  optional    

Example: false

Facility types

requires authentication

Get the facility types

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/supplier-profile/facility-types" \
    --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/organisations/supplier-profile/facility-types"
);

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,
        "name": "Accessories and Trims",
        "description": "Manufacture and processing of materials that are attached to the body of the garments for functional purpose."
    }
}
 

Request      

GET api/organisations/supplier-profile/facility-types

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Attribute groups

requires authentication

Get attributes suitable for the facility type

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/supplier-profile/attribute-groups" \
    --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/organisations/supplier-profile/attribute-groups"
);

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,
            "name": "Materials",
            "profile_type": "supplier_profile",
            "service_id": null,
            "single_select": 0,
            "type": null,
            "required": null,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Cotton",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        1,
                        2,
                        3
                    ]
                },
                {
                    "id": 2,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Bast fibres and Bamboo",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 3,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 4,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 5,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 6,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 7,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 8,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 9,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 10,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leaf fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 11,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 12,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 13,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 14,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 15,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 16,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 17,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 18,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Kapok",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        1,
                        2,
                        3
                    ]
                },
                {
                    "id": 19,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Animal",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 20,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Wool",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 21,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Alpaca",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 22,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Angora",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 23,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Camel",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 24,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Cashmere",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 25,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Guanaco",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 26,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Lama",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 27,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Mohair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 28,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicuna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 29,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Yak",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 30,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Horse hair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 31,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicugna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 32,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Silk",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 33,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "MMCF",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 34,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Acetate (Diacetate, Triacetate)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 35,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Cupro",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 36,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Lyocell",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 37,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Modal",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 38,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Viscose",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 39,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Synthetics",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 40,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Acrylic",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 41,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Elastane (Spandex) ",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 42,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyamide (Nylon)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 43,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyester",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 44,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 45,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene terephthalate (PET)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 46,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polylactic acid (PLA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 47,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polypropylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 48,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Secondary Raw Materials",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 49,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 48,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 50,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Finished Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        2
                    ]
                },
                {
                    "id": 51,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wood",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        4
                    ]
                },
                {
                    "id": 52,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Agricultural waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        4
                    ]
                },
                {
                    "id": 53,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Textile waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        4
                    ]
                },
                {
                    "id": 54,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 55,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 56,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 57,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 58,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Recycled Fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        9
                    ]
                },
                {
                    "id": 59,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 58,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        9
                    ]
                },
                {
                    "id": 60,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fabrics",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 61,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 62,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Ethylene vinyl acetate (EVA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        6,
                        8
                    ]
                },
                {
                    "id": 63,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyurethane (PU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        6,
                        8
                    ]
                },
                {
                    "id": 64,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyvinyl chloride (PVC)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        6,
                        8
                    ]
                },
                {
                    "id": 65,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic polyurethane (TPU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 66,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic elastomers (TPE)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 67,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Acrylonitrile butadiene styrene (ABS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 68,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Neoprene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 69,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Styrene ethylene butylene styrene (SEBS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 70,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fresh hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 71,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Brined hides/Skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 72,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet or dry-salted hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 73,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Limed splits",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 74,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Pickled hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 75,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet blue hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 76,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet white/wet green hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 77,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Crust hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 78,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (tanned)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 79,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (crust)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                }
            ]
        },
        {
            "id": 1,
            "name": "Materials",
            "profile_type": "supplier_profile",
            "service_id": null,
            "single_select": 0,
            "type": null,
            "required": null,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Cotton",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        1,
                        2,
                        3
                    ]
                },
                {
                    "id": 2,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Bast fibres and Bamboo",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 3,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 4,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 5,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 6,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 7,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 8,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 9,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 10,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leaf fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 11,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 12,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 13,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 14,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 15,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 16,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 17,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 18,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Kapok",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        1,
                        2,
                        3
                    ]
                },
                {
                    "id": 19,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Animal",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 20,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Wool",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 21,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Alpaca",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 22,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Angora",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 23,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Camel",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 24,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Cashmere",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 25,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Guanaco",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 26,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Lama",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 27,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Mohair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 28,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicuna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 29,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Yak",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 30,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Horse hair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 31,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicugna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 32,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Silk",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 33,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "MMCF",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 34,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Acetate (Diacetate, Triacetate)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 35,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Cupro",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 36,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Lyocell",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 37,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Modal",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 38,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Viscose",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 39,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Synthetics",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 40,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Acrylic",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 41,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Elastane (Spandex) ",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 42,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyamide (Nylon)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 43,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyester",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 44,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 45,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene terephthalate (PET)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 46,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polylactic acid (PLA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 47,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polypropylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 48,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Secondary Raw Materials",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 49,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 48,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        3
                    ]
                },
                {
                    "id": 50,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Finished Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        2
                    ]
                },
                {
                    "id": 51,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wood",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        4
                    ]
                },
                {
                    "id": 52,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Agricultural waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        4
                    ]
                },
                {
                    "id": 53,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Textile waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        4
                    ]
                },
                {
                    "id": 54,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 55,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 56,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 57,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        7
                    ]
                },
                {
                    "id": 58,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Recycled Fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        9
                    ]
                },
                {
                    "id": 59,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 58,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        9
                    ]
                },
                {
                    "id": 60,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fabrics",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 61,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 62,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Ethylene vinyl acetate (EVA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        6,
                        8
                    ]
                },
                {
                    "id": 63,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyurethane (PU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        6,
                        8
                    ]
                },
                {
                    "id": 64,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyvinyl chloride (PVC)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        6,
                        8
                    ]
                },
                {
                    "id": 65,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic polyurethane (TPU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 66,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic elastomers (TPE)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 67,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Acrylonitrile butadiene styrene (ABS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 68,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Neoprene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 69,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Styrene ethylene butylene styrene (SEBS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        8
                    ]
                },
                {
                    "id": 70,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fresh hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 71,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Brined hides/Skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 72,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet or dry-salted hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 73,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Limed splits",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 74,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Pickled hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 75,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet blue hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 76,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet white/wet green hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 77,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Crust hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 78,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (tanned)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                },
                {
                    "id": 79,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (crust)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null,
                    "facility_types": [
                        5
                    ]
                }
            ]
        }
    ]
}
 

Request      

GET api/organisations/supplier-profile/attribute-groups

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Vendor reports

Index

requires authentication

List of vendor reports created for organisations of type brand

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/vendor-reports?per_page=5&page=1&filter%5Blevel%5D=level_1&filter%5Bperiod%5D=quarter&filter%5Bstatus%5D=cupiditate&filter%5Bfor_organisation_id%5D=10&filter%5Brequested_at%5D=%3C%3D+2026-10-03+18%3A31%3A45&filter%5Bcompleted_at%5D=%3C%3D+2026-09-27+18%3A31%3A45&filter%5Bcreated_at%5D=%3D+2026-09-25+18%3A31%3A45&filter%5Bupdated_at%5D=%3C%3D+2026-09-30+18%3A31%3A45&sort=id&column=id" \
    --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/organisations/1/vendor-reports"
);

const params = {
    "per_page": "5",
    "page": "1",
    "filter[level]": "level_1",
    "filter[period]": "quarter",
    "filter[status]": "cupiditate",
    "filter[for_organisation_id]": "10",
    "filter[requested_at]": "<= 2026-10-03 18:31:45",
    "filter[completed_at]": "<= 2026-09-27 18:31:45",
    "filter[created_at]": "= 2026-09-25 18:31:45",
    "filter[updated_at]": "<= 2026-09-30 18:31:45",
    "sort": "id",
    "column": "id",
};
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": 59,
            "organisation_id": 21845,
            "for_organisation_id": 21846,
            "level": "level_3",
            "status": "pending",
            "period": "year",
            "requested_at": "2026-09-21T18:31:45.000000Z",
            "completed_at": null,
            "created_at": "2026-09-21T18:31:45.000000Z",
            "updated_at": "2026-09-21T18:31:45.000000Z",
            "deleted_at": null,
            "organisation": {
                "id": 21845,
                "reference_id": "01-QK3DXA9WM4H6-I",
                "type_id": 2,
                "name": "Williamson-Braun",
                "address_1": "848 Alessia Path Suite 867",
                "address_2": "Suite 349",
                "city": "Karineville",
                "state": "Idaho",
                "location": "TZ",
                "zip": "13475-3444",
                "phone": "+18476977763",
                "email": "amani53@skiles.com",
                "website": "https://ondricka.com/et-in-sint-aspernatur-ea.html",
                "avatar_url": null,
                "location_name": "Tanzania"
            },
            "for_organisation": {
                "id": 21846,
                "reference_id": "01-NQG6ZTRSGGPY-L",
                "type_id": 2,
                "name": "Rowe PLC",
                "address_1": "396 Considine Manor",
                "address_2": "Suite 792",
                "city": "West Olaf",
                "state": "Texas",
                "location": "AF",
                "zip": "58438",
                "phone": "+16262499182",
                "email": "barton.lesly@carroll.net",
                "website": "http://gleichner.org/",
                "avatar_url": null,
                "location_name": "Afghanistan"
            }
        },
        {
            "id": 59,
            "organisation_id": 21845,
            "for_organisation_id": 21846,
            "level": "level_3",
            "status": "pending",
            "period": "year",
            "requested_at": "2026-09-21T18:31:45.000000Z",
            "completed_at": null,
            "created_at": "2026-09-21T18:31:45.000000Z",
            "updated_at": "2026-09-21T18:31:45.000000Z",
            "deleted_at": null,
            "organisation": {
                "id": 21845,
                "reference_id": "01-QK3DXA9WM4H6-I",
                "type_id": 2,
                "name": "Williamson-Braun",
                "address_1": "848 Alessia Path Suite 867",
                "address_2": "Suite 349",
                "city": "Karineville",
                "state": "Idaho",
                "location": "TZ",
                "zip": "13475-3444",
                "phone": "+18476977763",
                "email": "amani53@skiles.com",
                "website": "https://ondricka.com/et-in-sint-aspernatur-ea.html",
                "avatar_url": null,
                "location_name": "Tanzania"
            },
            "for_organisation": {
                "id": 21846,
                "reference_id": "01-NQG6ZTRSGGPY-L",
                "type_id": 2,
                "name": "Rowe PLC",
                "address_1": "396 Considine Manor",
                "address_2": "Suite 792",
                "city": "West Olaf",
                "state": "Texas",
                "location": "AF",
                "zip": "58438",
                "phone": "+16262499182",
                "email": "barton.lesly@carroll.net",
                "website": "http://gleichner.org/",
                "avatar_url": null,
                "location_name": "Afghanistan"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 100,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisations/{organisation_id}/vendor-reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

filter[level]   string  optional    

Filter column level by any accepted value. Report depth / disclosure level. Example: level_1

Must be one of:
  • level_1
  • level_2
  • level_3
filter[period]   string  optional    

Filter column period by any accepted value. Covered time window for the report. Example: quarter

Must be one of:
  • quarter
  • half_year
  • year
filter[status]   string  optional    

Filter column status by any accepted value. Workflow status (comma-separated for multiple values). Example: cupiditate

filter[for_organisation_id]   integer  optional    

Filter column for_organisation_id by any accepted value. Target organisation id (comma-separated for multiple values). Example: 10

filter[requested_at]   datetime  optional    

Filter column requested_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-03 18:31:45

filter[completed_at]   datetime  optional    

Filter column completed_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-09-27 18:31:45

filter[created_at]   datetime  optional    

Filter column created_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-09-25 18:31:45

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-09-30 18:31:45

sort   string  optional    

sort by any accepted column: id, level, status, period, for_organisation_id, requested_at, completed_at, created_at, updated_at. prefix a "-" before the column name to sort in descending order Example: id

column   string  optional    

get a distinct list of filterable values for any of the columns: id, organisation_id, for_organisation_id, level, status, period, requested_at, completed_at, created_at, updated_at. Example: id

Store

requires authentication

Queue or persist a new vendor report

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/vendor-reports" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"for_organisation_id\": 1,
    \"level\": \"level_3\",
    \"period\": \"year\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/vendor-reports"
);

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

let body = {
    "for_organisation_id": 1,
    "level": "level_3",
    "period": "year"
};

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

Example response (200):


{
    "id": 60,
    "organisation_id": 21847,
    "for_organisation_id": 21848,
    "level": "level_1",
    "status": "pending",
    "period": "half_year",
    "requested_at": "2026-09-21T18:31:45.000000Z",
    "completed_at": null,
    "created_at": "2026-09-21T18:31:45.000000Z",
    "updated_at": "2026-09-21T18:31:45.000000Z",
    "deleted_at": null,
    "organisation": {
        "id": 21847,
        "reference_id": "01-V39JY8DRB7DY-Q",
        "type_id": 2,
        "name": "Murazik, Eichmann and Oberbrunner",
        "address_1": "1426 Hudson Views",
        "address_2": "Apt. 016",
        "city": "Aglaemouth",
        "state": "Nevada",
        "location": "MD",
        "zip": "78507-9445",
        "phone": "+15159329601",
        "email": "jheller@casper.net",
        "website": "http://huels.com/",
        "avatar_url": null,
        "location_name": "Moldova"
    },
    "for_organisation": {
        "id": 21848,
        "reference_id": "01-PCP6K4N9NB9K-P",
        "type_id": 2,
        "name": "Beahan, Kirlin and Batz",
        "address_1": "380 Princess Forest Apt. 743",
        "address_2": "Suite 801",
        "city": "Leanneland",
        "state": "Michigan",
        "location": "SG",
        "zip": "85077",
        "phone": "+16692672161",
        "email": "frederick14@sipes.net",
        "website": "http://www.gottlieb.com/vitae-et-at-iusto-qui-vel-alias-id",
        "avatar_url": null,
        "location_name": "Singapore"
    }
}
 

Request      

POST api/organisations/{organisation_id}/vendor-reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

for_organisation_id   integer     

Numeric identifier of the target organisation the vendor report is about (the “report subject” organisation).

Format and presence

  • Required. Must be a positive integer.
  • Must reference an existing row in the organisations table (id).

Organisation type

  • The target organisation must be a Brand (its organisation type must match the Brand type). Requests for non-brand organisations are rejected.

Relationship to the for_organisation (from the URL {organisation})

  • For report level 1 (level_1), only the rules above apply: a valid Brand id is sufficient.
  • For report level 2 (level_2) or level 3 (level_3), additional rules apply:
    • There must be an organisation connection between your organisation and the for_organisation.
    • On that connection, there must be at least one connection association owned by your organisation whose type is suppliers to brand—i.e. the connection must be set up so that suppliers are associated for reporting in that context. If the organisations are connected but that association is missing, the request fails.

Choose the for_organisation’s primary key id as returned by organisation APIs, not a reference code, unless your client maps codes to ids beforehand. The id of an existing record in the organisations table. Example: 1

level   string     

Example: level_3

Must be one of:
  • level_1
  • level_2
  • level_3
period   string     

Example: year

Must be one of:
  • quarter
  • half_year
  • year

Destroy

requires authentication

Delete a vendor report

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/vendor-reports/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/organisations/1/vendor-reports/4"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

DELETE api/organisations/{organisation_id}/vendor-reports/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

id   integer     

The ID of the vendor report. Example: 4

vendor_report   integer     

Vendor report id. Example: 20

Download

requires authentication

Download the Vendor to Zero management summary PDF for a report. Level 3 appends the list of suppliers as additional pages in the same PDF.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/vendor-reports/20/download" \
    --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/organisations/1/vendor-reports/20/download"
);

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


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

Example response (200):


content of the pdf
 

Example response (200):


content of the pdf
 

Request      

GET api/organisations/{organisation_id}/vendor-reports/{vendor_report_id}/download

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

vendor_report_id   integer     

The ID of the vendor report. Example: 20

vendor_report   integer     

Vendor report id. Example: 13

QR Platform/V1

Formulators

List chemical formulators including contacts

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/qr-platform/v1/formulators" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"updated_since\": \"2026-09-21T18:31:42\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/qr-platform/v1/formulators"
);

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

let body = {
    "updated_since": "2026-09-21T18:31:42"
};

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

Example response (200):


Success.
 

Example response (401):


Unauthorized
 

Request      

GET api/qr-platform/v1/formulators

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

updated_since   string  optional    

Must be a valid date. Example: 2026-09-21T18:31:42

Products

List chemical products updated since timestamp

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/qr-platform/v1/products" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"updated_since\": \"2026-09-21T18:31:42\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/qr-platform/v1/products"
);

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

let body = {
    "updated_since": "2026-09-21T18:31:42"
};

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

Example response (200):


Success.
 

Example response (401):


Unauthorized
 

Example response (422):


Validation error
 

Request      

GET api/qr-platform/v1/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

updated_since   string     

Must be a valid date. Example: 2026-09-21T18:31:42

Show a single chemical product

requires authentication

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

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


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

Example response (200):


Product found
 

Example response (401):


Unauthorized
 

Example response (404):


Product not found
 

Request      

GET api/qr-platform/v1/products/{product_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

product_reference_id   string     

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

List Gateway PID to Sandbox reference ID mappings

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/qr-platform/v1/product-id-mappings?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/qr-platform/v1/product-id-mappings"
);

const params = {
    "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):


Success.
 

Example response (401):


Unauthorized
 

Request      

GET api/qr-platform/v1/product-id-mappings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Must be at least 1. Must not be greater than 500. Example: 3

Reference ID Generator

Generate

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/generate-reference-id" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"table_name\": \"et\",
    \"count\": 41
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/generate-reference-id"
);

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

let body = {
    "table_name": "et",
    "count": 41
};

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

Example response (200, successful):


{
    "message": "Reference ID generated successfully.",
    "data": {
        "reference_id": "1234567890"
    }
}
 

Request      

POST api/generate-reference-id

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

table_name   string     

Example: et

count   integer     

Must be at least 1. Example: 41

Reporting

Chemical Inventory

Download chemical inventory CSV for a given supplier

requires authentication

Download a supplier's chemical inventory as CSV.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/reports/chemical/chemical-inventory-supplier-csv/et" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inventory_ids\": [
        \"quos\"
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports/chemical/chemical-inventory-supplier-csv/et"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "inventory_ids": [
        "quos"
    ]
};

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

Example response (200):


file
 

Request      

POST api/reports/chemical/chemical-inventory-supplier-csv/{supplier_reference_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplier_reference_id   string     

The ID of the supplier reference. Example: et

Body Parameters

inventory_ids   string[]     

The reference_id of an existing record in the supplier_chemical_inventories table.

InCheck Chemical Inventory

Download CI

requires authentication

Download a Chemical Inventory (CI) PDF for a connected supplier inventory. Currently returns a placeholder empty PDF.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/reports/chemical/chemical-inventory/repellendus/incheck-ci-report-pdf" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports/chemical/chemical-inventory/repellendus/incheck-ci-report-pdf"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200):


content of the pdf
 

Example response (200):


content of the pdf
 

Request      

GET api/reports/chemical/chemical-inventory/{chemical_inventory_id}/incheck-ci-report-pdf

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

chemical_inventory_id   string     

The ID of the chemical inventory. Example: repellendus

chemical_inventory   integer     

Supplier chemical inventory id. Example: 20

Index

requires authentication

List all readable reports

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/reports?per_page=17&filter%5Borganisation_reference_id%5D=rerum&filter%5Borganisation_name%5D=et&filter%5Breport_type%5D=est&filter%5Breport_date%5D=est&sort=report_verified_at&search=iste&column=organisation_name&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports"
);

const params = {
    "per_page": "17",
    "filter[organisation_reference_id]": "rerum",
    "filter[organisation_name]": "et",
    "filter[report_type]": "est",
    "filter[report_date]": "est",
    "sort": "report_verified_at",
    "search": "iste",
    "column": "organisation_name",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200, Paginated list of chemical inventories, passed Clearstream reports, and (for vendors) completed Vendor to Zero reports.):


{
    "current_page": 1,
    "data": [
        {
            "organisation_reference_id": "ORG-7K3M9P2Q",
            "organisation_name": "Acme Textiles GmbH",
            "report_id": 42,
            "report_reference_id": "INV-4N8X2W6R",
            "report_status": "published",
            "report_verified_at": "2026-03-01T00:00:00.000000Z",
            "report_type": "incheck",
            "has_rca_cap": false,
            "has_incheck_ci": true,
            "has_list_of_suppliers": false,
            "legacy_clearstream_downloadable": false
        },
        {
            "organisation_reference_id": "ORG-7K3M9P2Q",
            "organisation_name": "Acme Textiles GmbH",
            "report_id": 87,
            "report_reference_id": "CSR-9B2F5H1T",
            "report_status": "PASSED",
            "report_verified_at": "2026-01-22T14:05:00.000000Z",
            "report_type": "clearstream",
            "has_rca_cap": true,
            "has_incheck_ci": false,
            "has_list_of_suppliers": false,
            "legacy_clearstream_downloadable": true
        },
        {
            "organisation_reference_id": "BRD-4P8K2M1N",
            "organisation_name": "Demo Brand",
            "report_id": 15,
            "report_reference_id": "15",
            "report_status": "completed",
            "report_verified_at": "2026-02-28T12:00:00.000000Z",
            "report_type": "vendor_to_zero",
            "has_rca_cap": false,
            "has_incheck_ci": false,
            "has_list_of_suppliers": true,
            "legacy_clearstream_downloadable": false
        }
    ],
    "first_page_url": "https://example.com/api/reports?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://example.com/api/reports?page=1",
    "links": [
        {
            "url": null,
            "label": "&laquo; Previous",
            "active": false
        },
        {
            "url": "https://example.com/api/reports?page=1",
            "label": "1",
            "active": true
        },
        {
            "url": null,
            "label": "Next &raquo;",
            "active": false
        }
    ],
    "next_page_url": null,
    "path": "https://example.com/api/reports",
    "per_page": 50,
    "prev_page_url": null,
    "to": 3,
    "total": 3
}
 

Request      

GET api/reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

filter[organisation_reference_id]   string  optional    

Filter column organisation_reference_id by any accepted value. Matches part of the value. Example: rerum

filter[organisation_name]   string  optional    

Filter column organisation_name by any accepted value. Matches part of the value. Example: et

filter[report_type]   string  optional    

Filter column report_type by any accepted value. Matches part of the value. Example: est

filter[report_date]   string  optional    

Filter column report_date by any accepted value. Filter by one or more YYYY-MM months, separated by commas. Example: est

sort   string  optional    

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

search   string  optional    

Search in all of these columns: reports.organisation_name, reports.organisation_reference_id, reports.report_type. Filter type: like. Example: iste

column   string  optional    

get a distinct list of filterable values for any of the columns: organisation_name, organisation_reference_id, report_type, report_verified_at. Example: organisation_name

page   integer  optional    

the page number to show. Example: 1

Bulk download

requires authentication

Download a ZIP of selected Data Hub report PDFs and/or CSVs. CSV-supported types are aggregated into one file per type; PDFs are included individually. Vendor to Zero Level 3 includes the list of suppliers as additional pages in the same PDF.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/reports/download" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"pdf\": {
        \"vendor_to_zero\": [
            15
        ],
        \"clearstream_rca\": [
            87
        ],
        \"incheck_ci\": [
            42
        ]
    },
    \"csv\": {
        \"incheck\": [
            42,
            43
        ],
        \"incheck_ci\": [
            42
        ],
        \"clearstream\": [
            87,
            88
        ]
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports/download"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "pdf": {
        "vendor_to_zero": [
            15
        ],
        "clearstream_rca": [
            87
        ],
        "incheck_ci": [
            42
        ]
    },
    "csv": {
        "incheck": [
            42,
            43
        ],
        "incheck_ci": [
            42
        ],
        "clearstream": [
            87,
            88
        ]
    }
};

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

Example response (200, ZIP archive containing the requested report files.):



 

Request      

POST api/reports/download

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

pdf   object  optional    

Map of report type to numeric report ids for PDF generation.

csv   object  optional    

Map of report type to numeric report ids for CSV generation.

Download legacy Clearstream PDF

requires authentication

Download the stored Clearstream PDF for a migrated (legacy) wastewater report.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/reports/clearstream/1/download" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports/clearstream/1/download"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200, Legacy Clearstream PDF file.):



 

Request      

GET api/reports/clearstream/{report_id}/download

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

report_id   integer     

The ID of the report. Example: 1

Solution Providers/V1

Inventories

Bulk create inventories and products

requires authentication

Each product must be either a catalogue product (product_reference_id) or a custom product (product_name plus formulator_name). Provide exactly one identifier: omit or send null for the unused field. Sending both product_reference_id and product_name with values returns 422.

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

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

let body = {
    "inventories": [
        {
            "supplier_reference_id": "01-864QWGFWAZ92-B",
            "period": "2025-10",
            "type": "usage",
            "products": [
                {
                    "product_reference_id": "20-48RCXCRHNWZF-P",
                    "product_name": "Custom Chemical X",
                    "formulator_name": "Local Supplier Co.",
                    "weight": 12.5
                }
            ]
        }
    ]
};

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

Example response (207):


Batch processed. Check each result individually.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

inventories   object[]     

Array of inventories to create.

supplier_reference_id   string     

The reference_id of an existing supplier organisation. The reference_id of an existing record in the organisations table. Example: 01-864QWGFWAZ92-B

period   string     

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

type   string     

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

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

Array of products for this inventory. Can be empty. Each product must be either a catalogue product (product_reference_id) or a custom product (product_name). Do not send both with a value.

product_reference_id   string  optional    

Catalogue product reference ID. Provide this or product_name, never both. Omit or send null for custom products. Sending a value together with product_name returns 422. This field is required when inventories..products..product_name is not present. The reference_id of an existing record in the chemical_products table. Example: 20-48RCXCRHNWZF-P

product_name   string  optional    

Custom product name. Provide this or product_reference_id, never both. Required when product_reference_id is omitted or null. Sending a value together with product_reference_id returns 422. This field is required when inventories..products..product_reference_id is not present. Must not be greater than 255 characters. Example: Custom Chemical X

formulator_name   string     

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

weight   number     

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

List chemical inventories for linked suppliers

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories?per_page=4&filter%5Binventory_reference_id%5D=40-8KL3K6X4S2HP-G&filter%5Bsupplier_reference_id%5D=01-7TWCWMABQVWD-L&filter%5Baid%5D=ut&filter%5Bperiod%5D=2025-10&filter%5Bstatus%5D=draft&filter%5Blegacy_inventory_id%5D=9VBAHVMO-05182022&sort=period&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filter\": {
        \"inventory_reference_id\": \"at\",
        \"supplier_reference_id\": \"dolore\",
        \"aid\": \"eaque\",
        \"period\": \"2026-09\",
        \"legacy_inventory_id\": \"qSuY0ljX-66341623\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/inventories"
);

const params = {
    "per_page": "4",
    "filter[inventory_reference_id]": "40-8KL3K6X4S2HP-G",
    "filter[supplier_reference_id]": "01-7TWCWMABQVWD-L",
    "filter[aid]": "ut",
    "filter[period]": "2025-10",
    "filter[status]": "draft",
    "filter[legacy_inventory_id]": "9VBAHVMO-05182022",
    "sort": "period",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "filter": {
        "inventory_reference_id": "at",
        "supplier_reference_id": "dolore",
        "aid": "eaque",
        "period": "2026-09",
        "legacy_inventory_id": "qSuY0ljX-66341623"
    }
};

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

Example response (200):


{
    "data": [
        {
            "inventory_reference_id": "40-S3LUQH22P8V9-U",
            "supplier_reference_id": "01-ZSKPRKTAML77-W",
            "aid": "AA1122334455",
            "legacy_inventory_id": "9VBAHVMO-05182022",
            "supplier_name": "Combined Fabrics Ltd",
            "period": "2025-10",
            "type": "usage",
            "status": "published",
            "incheck_report_available": true,
            "submitted_at": "2025-11-15T00:00:00.000000Z",
            "published_at": "2025-12-10T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2025-11-01T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        },
        {
            "inventory_reference_id": "40-E9VKUMJPZ3ZB-P",
            "supplier_reference_id": "01-4KA9YHHBSAL7-K",
            "aid": "AA1122334455",
            "legacy_inventory_id": "9VBAHVMO-05182022",
            "supplier_name": "Combined Fabrics Ltd",
            "period": "2025-10",
            "type": "usage",
            "status": "published",
            "incheck_report_available": true,
            "submitted_at": "2025-11-15T00:00:00.000000Z",
            "published_at": "2025-12-10T00:00:00.000000Z",
            "declined_at": null,
            "declined_reason": null,
            "declined_additional_info": null,
            "created_at": "2025-11-01T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/inventories

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

filter[inventory_reference_id]   inventory_reference_id  optional    

Filter column inventory_reference_id by any accepted value. Matches part of the value. Example: 40-8KL3K6X4S2HP-G

filter[supplier_reference_id]   organisation_reference_id  optional    

Filter column supplier_reference_id by any accepted value. Matches part of the value. Example: 01-7TWCWMABQVWD-L

filter[aid]   string  optional    

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

filter[period]   string  optional    

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

filter[status]   string  optional    

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

Must be one of:
  • draft
  • submitted
  • declined
  • published
filter[legacy_inventory_id]   string  optional    

Filter column legacy_inventory_id by any accepted value. The legacy InCheck external ID of the inventory Example: 9VBAHVMO-05182022

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Body Parameters

filter   object  optional    
inventory_reference_id   string  optional    

Example: at

supplier_reference_id   string  optional    

Example: dolore

aid   string  optional    

Example: eaque

period   string  optional    

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

status   string  optional    
legacy_inventory_id   string  optional    

Must match the regex /^[A-Za-z0-9]{8}-[0-9]{8}$/. Example: qSuY0ljX-66341623

Store a chemical inventory for a linked supplier

requires authentication

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

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

let body = {
    "supplier_reference_id": "01-Q6GU9D4H3APE-W",
    "period": "2025-10",
    "type": "usage"
};

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

Example response (200):


{
    "data": {
        "inventory_reference_id": "40-6G7B8JXRT4FV-G",
        "supplier_reference_id": "01-CY3Q9DBTFXW6-Y",
        "period": "2025-10",
        "type": "usage",
        "status": "draft",
        "created_at": "2026-05-29T10:00:00.000000Z",
        "updated_at": "2026-05-29T10:00:00.000000Z"
    }
}
 

Example response (201):


Inventory created in draft status
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Supplier not found or not connected
 

Example response (409):


{
    "error": {
        "code": "INVENTORY_ALREADY_EXISTS",
        "message": "An inventory already exists for this supplier and period."
    }
}
 

Example response (422):


Validation error
 

Request      

POST api/solution-providers/v1/inventories

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

supplier_reference_id   string     

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

period   string     

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

type   string     

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

Must be one of:
  • usage
  • delivery
  • unspecified

Update a chemical inventory

requires authentication

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

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

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

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

Example response (200):


{
    "data": {
        "inventory_reference_id": "40-8MH8PPNND98K-O",
        "supplier_reference_id": "01-2E9WASKP4LD3-G",
        "period": "2025-10",
        "type": "usage",
        "status": "draft",
        "created_at": "2026-05-29T10:00:00.000000Z",
        "updated_at": "2026-05-29T10:00:00.000000Z"
    }
}
 

Example response (200):


Updated
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or not owned by SP
 

Example response (409):


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

Example response (422):


Validation error
 

Request      

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

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: cumque

Body Parameters

period   string     

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

type   string     

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

Must be one of:
  • usage
  • delivery
  • unspecified

Submit a chemical inventory for verification

requires authentication

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

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


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

Example response (200):


{
    "data": {
        "inventory_reference_id": "40-HPV8DYDUMQUU-W",
        "supplier_reference_id": "01-S3L4RAZP94RE-C",
        "period": "2025-10",
        "type": "usage",
        "status": "draft",
        "created_at": "2026-05-29T10:00:00.000000Z",
        "updated_at": "2026-05-29T10:00:00.000000Z"
    }
}
 

Example response (200):


Submitted successfully
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or not owned by this SP
 

Example response (422):


Inventory is not in draft status
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: veniam

Destroy

requires authentication

Destroy a chemical inventory

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

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


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

Example response (204):

Empty response
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found.
 

Example response (409):


Only draft inventories can be deleted.
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: et

Inventory Products

List inventory products

requires authentication

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

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

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

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

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

Example response (200):


{
    "data": [
        {
            "inventory_product_id": 209254,
            "product_reference_id": "20-7XGXA74Z4GVT-E",
            "pid": "P738WC76",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "formulator_name": "Super Glanz spa Unipersonale",
            "weight": 41.5,
            "inventory_product_kind": "published",
            "mrslState": {
                "product_name": "APPRETTO ACR/EF [P738WC76]",
                "mrsl_status": "active",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null,
                "ctz_status": null,
                "valid_until": "2026-12-31T00:00:00.000000Z",
                "expired_at": null,
                "created_at": "2025-11-01T00:00:00.000000Z",
                "updated_at": "2025-12-10T00:00:00.000000Z"
            },
            "organisation_reference_id": "01-7QKNFBYR9HMZ-R",
            "original_product": {
                "reference_id": "1234567890",
                "name": "APPRETTO ACR/EF [P738WC76]",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null
            }
        },
        {
            "inventory_product_id": 209254,
            "product_reference_id": "20-HEF6SAUQALFP-F",
            "pid": "P738WC76",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "formulator_name": "Super Glanz spa Unipersonale",
            "weight": 41.5,
            "inventory_product_kind": "published",
            "mrslState": {
                "product_name": "APPRETTO ACR/EF [P738WC76]",
                "mrsl_status": "active",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null,
                "ctz_status": null,
                "valid_until": "2026-12-31T00:00:00.000000Z",
                "expired_at": null,
                "created_at": "2025-11-01T00:00:00.000000Z",
                "updated_at": "2025-12-10T00:00:00.000000Z"
            },
            "organisation_reference_id": "01-7QKNFBYR9HMZ-R",
            "original_product": {
                "reference_id": "1234567890",
                "name": "APPRETTO ACR/EF [P738WC76]",
                "conformance_level_name": "Level 1",
                "ctz_level_name": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or not owned by this SP
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

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

Query Parameters

per_page   integer  optional    

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

search   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Body Parameters

search   string  optional    

Must be at least 3 characters. Example: ecfnnhzudhkxsioaxijivwsfdwfsqmruhefvfdondrqwslfwwkxtstpp

Store an inventory product

requires authentication

The product must be either a catalogue product (product_reference_id) or a custom product (product_name plus formulator_name). Provide exactly one identifier: omit or send null for the unused field. Sending both product_reference_id and product_name with values returns 422.

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

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

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

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

Example response (200):


{
    "data": {
        "inventory_product_id": 209254,
        "product_reference_id": "20-TWUBSHKWHB44-M",
        "pid": "P738WC76",
        "product_name": "APPRETTO ACR/EF [P738WC76]",
        "formulator_name": "Super Glanz spa Unipersonale",
        "weight": 41.5,
        "inventory_product_kind": "published",
        "mrslState": {
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "mrsl_status": "active",
            "conformance_level_name": "Level 1",
            "ctz_level_name": null,
            "ctz_status": null,
            "valid_until": "2026-12-31T00:00:00.000000Z",
            "expired_at": null,
            "created_at": "2025-11-01T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        },
        "organisation_reference_id": "01-7QKNFBYR9HMZ-R",
        "original_product": {
            "reference_id": "1234567890",
            "name": "APPRETTO ACR/EF [P738WC76]",
            "conformance_level_name": "Level 1",
            "ctz_level_name": null
        }
    }
}
 

Example response (201):


Product line added
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory not found or catalogue product not found/published
 

Example response (404):


Inventory not found or catalogue product not found/not bindable
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

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

Body Parameters

product_reference_id   string  optional    

Catalogue product reference ID. Provide this or product_name, never both. Omit or send null for custom products. Sending a value together with product_name returns 422. This field is required when product_name is not present. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-89UNJ4QE3J36-A

product_name   string  optional    

Custom product name. Provide this or product_reference_id, never both. Required when product_reference_id is omitted or null. Sending a value together with product_reference_id returns 422. This field is required when product_reference_id is not present. Must not be greater than 255 characters. Example: Custom Chemical X

formulator_name   string     

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

weight   number     

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

Update an inventory product

requires authentication

The product must be either a catalogue product (product_reference_id) or a custom product (product_name plus formulator_name). Provide exactly one identifier: omit or send null for the unused field. Sending both product_reference_id and product_name with values returns 422.

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

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

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

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

Example response (200):


{
    "data": {
        "inventory_product_id": 209254,
        "product_reference_id": "20-BQXHRTQKUC7Z-C",
        "pid": "P738WC76",
        "product_name": "APPRETTO ACR/EF [P738WC76]",
        "formulator_name": "Super Glanz spa Unipersonale",
        "weight": 41.5,
        "inventory_product_kind": "published",
        "mrslState": {
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "mrsl_status": "active",
            "conformance_level_name": "Level 1",
            "ctz_level_name": null,
            "ctz_status": null,
            "valid_until": "2026-12-31T00:00:00.000000Z",
            "expired_at": null,
            "created_at": "2025-11-01T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        },
        "organisation_reference_id": "01-7QKNFBYR9HMZ-R",
        "original_product": {
            "reference_id": "1234567890",
            "name": "APPRETTO ACR/EF [P738WC76]",
            "conformance_level_name": "Level 1",
            "ctz_level_name": null
        }
    }
}
 

Example response (200):


Updated
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory or product line not found / not owned by SP
 

Example response (404):


Inventory or product line not found / catalogue product not bindable
 

Example response (422):


Validation error
 

Request      

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

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

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

inventory_product_id   string     

The ID of the inventory product. Example: aut

Body Parameters

product_reference_id   string  optional    

Catalogue product reference ID. Provide this or product_name, never both. Omit or send null for custom products. Sending a value together with product_name returns 422. This field is required when product_name is not present. Must match the regex /^20-[2346789ABCDEFGHJKLMNPQRSTUVWXYZ]{8,}-[ABCDEFGHIJKLMNOPQRSTUVWXYZ]$/. Example: 20-HSYLGHUMHT8M-I

product_name   string  optional    

Custom product name. Provide this or product_reference_id, never both. Required when product_reference_id is omitted or null. Sending a value together with product_reference_id returns 422. This field is required when product_reference_id is not present. Must not be greater than 255 characters. Example: Custom Chemical X

formulator_name   string     

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

weight   number     

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

Delete an inventory product

requires authentication

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

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


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

Example response (204):

Empty response
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Inventory or product line not found / not owned by SP
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

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

inventory_product_id   string     

The ID of the inventory product. Example: veritatis

Products

List published chemical products

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/products?per_page=18&page=1&search=deleniti&filter%5Bformulator_name%5D=consequatur&filter%5Bconformance_level%5D=quasi&filter%5Bpid%5D=P214AG76%2C447684&filter%5Bproduct_reference_id%5D=20-NRXNDKWHCUTY-Z%2C20-7JCR87NDJTY8-C&filter%5Bmrsl_version%5D=quas" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"search\": \"bpumixnbjcyazzzrjtburouje\",
    \"per_page\": 9,
    \"filter\": {
        \"formulator_name\": \"aut\",
        \"pid\": [
            \"5Qm\"
        ],
        \"product_reference_id\": [
            \"sed\"
        ],
        \"mrsl_version\": \"mollitia\",
        \"conformance_level\": \"est\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/products"
);

const params = {
    "per_page": "18",
    "page": "1",
    "search": "deleniti",
    "filter[formulator_name]": "consequatur",
    "filter[conformance_level]": "quasi",
    "filter[pid]": "P214AG76,447684",
    "filter[product_reference_id]": "20-NRXNDKWHCUTY-Z,20-7JCR87NDJTY8-C",
    "filter[mrsl_version]": "quas",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "search": "bpumixnbjcyazzzrjtburouje",
    "per_page": 9,
    "filter": {
        "formulator_name": "aut",
        "pid": [
            "5Qm"
        ],
        "product_reference_id": [
            "sed"
        ],
        "mrsl_version": "mollitia",
        "conformance_level": "est"
    }
};

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

Example response (200):


{
    "data": [
        {
            "product_reference_id": "20-S86XZL2M3PZB-F",
            "pid": "PID1234567890",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "local_language_names": [
                "P738WC76"
            ],
            "formulator_reference_id": "01-T2MEYYYVKNY3-S",
            "formulator_name": "Super Glanz spa Unipersonale",
            "conformance_level_name": "Level 3",
            "ctz_level_name": null,
            "mrsl_version_name": "3.1"
        },
        {
            "product_reference_id": "20-VC89JMMNHCE8-A",
            "pid": "PID1234567890",
            "product_name": "APPRETTO ACR/EF [P738WC76]",
            "local_language_names": [
                "P738WC76"
            ],
            "formulator_reference_id": "01-T8ZDHWKYRDKF-A",
            "formulator_name": "Super Glanz spa Unipersonale",
            "conformance_level_name": "Level 3",
            "ctz_level_name": null,
            "mrsl_version_name": "3.1"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (422):


Validation error
 

Request      

GET api/solution-providers/v1/products

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

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

filter[formulator_name]   string  optional    

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

filter[conformance_level]   string  optional    

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

filter[pid]   string  optional    

Filter column pid by any accepted value. The PID of the product. Comma-separated, max 250 unique values. Example: P214AG76,447684

filter[product_reference_id]   string  optional    

Filter column product_reference_id by any accepted value. The reference ID of the product. Comma-separated, max 250 unique values. Example: 20-NRXNDKWHCUTY-Z,20-7JCR87NDJTY8-C

filter[mrsl_version]   string  optional    

Filter column mrsl_version by any accepted value. Filter by MRSL version of the current max certification Example: quas

Body Parameters

search   string  optional    

Must be at least 3 characters. Example: bpumixnbjcyazzzrjtburouje

per_page   integer  optional    

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

filter   object  optional    
formulator_name   string  optional    

Example: aut

pid   string[]     

Must match the regex /^[A-Za-z0-9][A-Za-z0-9_-]*$/.

product_reference_id   string[]     
mrsl_version   string  optional    

Example: mollitia

conformance_level   string  optional    

Example: est

Show a published chemical product

requires authentication

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

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


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

Example response (200):


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

Example response (200):


Product found and published
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


User does not have required permission.
 

Example response (404):


Product not found or not published
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

product_identifer   string     

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

Inventory

Connected Suppliers

requires authentication

Show all eligable suppliers for a given Solution Provider

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/connected-suppliers?per_page=16&filter%5Bsupplier_reference_id%5D=01-734CRMF7NQMA-J&filter%5Bhas_active_subscription%5D=&filter%5Baid%5D=atque&search=officiis&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filter\": {
        \"supplier_reference_id\": \"est\",
        \"has_active_subscription\": true,
        \"aid\": \"cum\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/connected-suppliers"
);

const params = {
    "per_page": "16",
    "filter[supplier_reference_id]": "01-734CRMF7NQMA-J",
    "filter[has_active_subscription]": "0",
    "filter[aid]": "atque",
    "search": "officiis",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "filter": {
        "supplier_reference_id": "est",
        "has_active_subscription": true,
        "aid": "cum"
    }
};

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

Example response (200):


{
    "data": {
        "supplier_reference_id": "01-7TXNQR4L9PFH-I",
        "aid": "A356IB10",
        "supplier_name": "Ping Yang Pengye Shoes Com Ltd",
        "location": "CN",
        "location_name": "China",
        "current_subscription": {
            "product_name": "InCheck",
            "start_date": "2026-08-22T18:31:42.419252Z",
            "end_date": "2026-10-21T18:31:42.419326Z"
        }
    }
}
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

filter[supplier_reference_id]   organisation_reference_id  optional    

Filter column supplier_reference_id by any accepted value. The reference ID of the supplier Example: 01-734CRMF7NQMA-J

filter[has_active_subscription]   boolean  optional    

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

filter[aid]   string  optional    

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

search   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Body Parameters

filter   object  optional    
supplier_reference_id   string  optional    

Example: est

has_active_subscription   boolean  optional    

Example: true

aid   string  optional    

Example: cum

InCheck

Formulators

requires authentication

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

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

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

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

let body = {
    "search": "otienxqlbinwajfscwgntzvlpqjnue",
    "per_page": 20,
    "has_gateway_products": true,
    "filter": {
        "country": "a"
    }
};

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

Example response (200):


{
    "data": [
        {
            "formulator_reference_id": "01-9ZACHNBAFERC-Q",
            "legacy_aid": "A12345678",
            "name": "ACME Chemical Company",
            "country": "Germany",
            "has_gateway_products": true,
            "product_count": 42,
            "last_updated_at": "2026-06-20T09:15:00+00:00"
        },
        {
            "formulator_reference_id": "01-CW38X74FC2H7-J",
            "legacy_aid": "A12345678",
            "name": "ACME Chemical Company",
            "country": "Germany",
            "has_gateway_products": true,
            "product_count": 42,
            "last_updated_at": "2026-06-20T09:15:00+00:00"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

search   string  optional    

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

filter[country]   string  optional    

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

has_gateway_products   boolean  optional    

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

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Body Parameters

search   string     

Must be at least 3 characters. Example: otienxqlbinwajfscwgntzvlpqjnue

per_page   integer  optional    

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

has_gateway_products   boolean  optional    

Example: true

filter   object  optional    
country   string  optional    

Example: a

Organisation Connections

requires authentication

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

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

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

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

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

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

Example response (200):


{
    "data": {
        "id": 1,
        "accepted_at": "2026-06-01T10:00:00+00:00",
        "organisation": {
            "organisation_reference_id": "01-BNQ9VAYBRVLQ-E",
            "legacy_aid": "A12345678",
            "name": "Example Organisation Ltd",
            "type": "Supplier",
            "location": {
                "country": "Netherlands",
                "state_province": "",
                "city": "Amsterdam"
            }
        },
        "connected_organisation": {
            "organisation_reference_id": "01-4JBSQ8KCSSVY-K",
            "legacy_aid": "A12345678",
            "name": "Example Organisation Ltd",
            "type": "Supplier",
            "location": {
                "country": "Netherlands",
                "state_province": "",
                "city": "Amsterdam"
            }
        }
    }
}
 

Example response (200):


{
    "data": [
        {
            "id": 1,
            "accepted_at": "2026-06-01T10:00:00+00:00",
            "organisation": {
                "organisation_reference_id": "01-4SLSZNPJ3HDZ-R",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            },
            "connected_organisation": {
                "organisation_reference_id": "01-4W3VK3VRZL3A-X",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            }
        },
        {
            "id": 1,
            "accepted_at": "2026-06-01T10:00:00+00:00",
            "organisation": {
                "organisation_reference_id": "01-PL4PLF43YG9V-I",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            },
            "connected_organisation": {
                "organisation_reference_id": "01-TWL9MLMZY4XG-F",
                "legacy_aid": "A12345678",
                "name": "Example Organisation Ltd",
                "type": "Supplier",
                "location": {
                    "country": "Netherlands",
                    "state_province": "",
                    "city": "Amsterdam"
                }
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


You do not have access to this organisation.
 

Example response (404):


Organisation not found
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

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

Query Parameters

per_page   integer  optional    

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

filter[connected_organisation_reference_id]   organisation_reference_id  optional    

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

filter[connected_organisation_type]   string  optional    

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

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

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

page   integer  optional    

the page number to show. Example: 1

Body Parameters

organisation_reference_id   string     

Example: ipsam

Organisation Users

requires authentication

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

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

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

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

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

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

Example response (200):


{
    "data": {
        "user_reference_id": "02-2KBRN2BHGGUZ-D",
        "email": "admin@example-supplier.com",
        "name": "Example User"
    }
}
 

Example response (200):


{
    "data": [
        {
            "user_reference_id": "02-T2YM3XVZKW7G-Q",
            "email": "admin@example-supplier.com",
            "name": "Example User"
        },
        {
            "user_reference_id": "02-R2SXKPXMM3QU-U",
            "email": "admin@example-supplier.com",
            "name": "Example User"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (401):


Token not found
 

Example response (403):


Authenticated Organisation is not one of types Performance InCheck Provider
 

Example response (403):


You do not have access to this organisation.
 

Example response (404):


Organisation not found
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_reference_id   string     

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

Query Parameters

per_page   integer  optional    

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

filter[email]   email  optional    

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

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Body Parameters

organisation_reference_id   string     

Example: modi

Subscriptions

Show

requires authentication

Show the subscription for a supplier

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

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


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

Example response (200):


{
    "data": {
        "supplier_reference_id": "01-7TXNQR4L9PFH-I",
        "aid": "A356IB10",
        "current_subscription": {
            "product_name": "InCheck",
            "start_date": "2026-08-22T18:31:42.437238Z",
            "end_date": "2026-10-21T18:31:42.437310Z"
        }
    }
}
 

Example response (401):


Token not found
 

Example response (403):


You are not of the given types: Supplier
 

Example response (403):


The authenticated organisation is not a Performance InCheck Provider.
 

Example response (404):


Supplier not found or not connected to this Solution Provider.
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplier_reference_id   string     

The ID of the supplier reference. Example: ut

Store

requires authentication

Create a new subscription for a supplier

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

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


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

Example response (201):


{
    "data": {
        "supplier_reference_id": "01-7TXNQR4L9PFH-I",
        "aid": "A356IB10",
        "current_subscription": {
            "product_name": "InCheck",
            "start_date": "2026-08-22T18:31:42.440693Z",
            "end_date": "2026-10-21T18:31:42.440741Z"
        }
    }
}
 

Example response (401):


Token not found
 

Example response (403):


You are not of the given types: Supplier
 

Example response (403):


The authenticated organisation is not a Performance InCheck Provider.
 

Example response (404):


Supplier not found or not connected to this Solution Provider.
 

Example response (409):


Supplier already has an active subscription
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplier_reference_id   string     

The ID of the supplier reference. Example: quis

InCheck Reports

List InCheck reports for linked suppliers

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/reports?per_page=7&filter%5Bsupplier_reference_id%5D=01-P6EQ3LMJMRY4-G&filter%5Baid%5D=sint&filter%5Bstatus%5D=started&filter%5Bperiod%5D=2025-10&filter%5Blegacy_inventory_id%5D=9VBAHVMO-05182022&sort=-period&page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"filter\": {
        \"supplier_reference_id\": \"ea\",
        \"aid\": \"magnam\",
        \"period\": \"2026-09\",
        \"legacy_inventory_id\": \"6p4Z7PbD-21011154\"
    }
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/solution-providers/v1/incheck/reports"
);

const params = {
    "per_page": "7",
    "filter[supplier_reference_id]": "01-P6EQ3LMJMRY4-G",
    "filter[aid]": "sint",
    "filter[status]": "started",
    "filter[period]": "2025-10",
    "filter[legacy_inventory_id]": "9VBAHVMO-05182022",
    "sort": "-period",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "filter": {
        "supplier_reference_id": "ea",
        "aid": "magnam",
        "period": "2026-09",
        "legacy_inventory_id": "6p4Z7PbD-21011154"
    }
};

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

Example response (200):


{
    "data": [
        {
            "report_reference_id": "48-SJMKZPPE3J78-G",
            "supplier_reference_id": "01-2AL7VRC48ZVG-F",
            "aid": "AA1122334455",
            "supplier_name": "Hangzhou Mini digital technology Co., Ltd.",
            "period": "2025-10",
            "inventory_type": "usage",
            "inventory_reference_id": "40-F6XCHRU6DADT-E",
            "legacy_inventory_id": "9VBAHVMO-05182022",
            "status": "verified",
            "created_at": "2025-11-12T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        },
        {
            "report_reference_id": "48-ZCV8976RN7R9-S",
            "supplier_reference_id": "01-L67NMHBZRAXX-L",
            "aid": "AA1122334455",
            "supplier_name": "Hangzhou Mini digital technology Co., Ltd.",
            "period": "2025-10",
            "inventory_type": "usage",
            "inventory_reference_id": "40-HSDQX64Y7HVG-Z",
            "legacy_inventory_id": "9VBAHVMO-05182022",
            "status": "verified",
            "created_at": "2025-11-12T00:00:00.000000Z",
            "updated_at": "2025-12-10T00:00:00.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Example response (200):


Success.
 

Example response (422):


Validation error
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

filter[supplier_reference_id]   organisation_reference_id  optional    

Filter column supplier_reference_id by any accepted value. Matches part of the value. Example: 01-P6EQ3LMJMRY4-G

filter[aid]   string  optional    

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

filter[status]   string  optional    

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

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

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

filter[legacy_inventory_id]   string  optional    

Filter column legacy_inventory_id by any accepted value. The legacy InCheck external ID of the inventory Example: 9VBAHVMO-05182022

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Body Parameters

filter   object  optional    
supplier_reference_id   string  optional    

Example: ea

aid   string  optional    

Example: magnam

status   string  optional    
period   string  optional    

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

legacy_inventory_id   string  optional    

Must match the regex /^[A-Za-z0-9]{8}-[0-9]{8}$/. Example: 6p4Z7PbD-21011154

sort   string  optional    

InCheck Report PDF

Show InCheck report PDF

requires authentication

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

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

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


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

Example response (200):


content of the pdf
 

Example response (401):


Token not found
 

Example response (403):


You are not authorized to access this inventory.
 

Example response (404):


Inventory not found or not owned by SP
 

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

inventory_reference_id   string     

The ID of the inventory reference. Example: reprehenderit

inventory   string     

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

System

Logs

Channel Settings

requires authentication

Get all logging channel settings.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/logs/settings" \
    --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/system/logs/settings"
);

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):


{
    "channel1": {
        "fields": [
            "context->ip",
            "context->action_type",
            "context->user_id",
        ],
        "filters": [
            {
                "type": "exact",
                "column": "context->ip",
                "field": {
                    "name": "textfield",
                },
            },
        ],
        "sorts": [
            "context->ip",
            "context->action_type",
            "context->user_id",
        ]
    }
}
 

Request      

GET api/system/logs/settings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Channel

requires authentication

See all logs for a channel

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/logs/channel/eos?archived=&per_page=50&sort=%60sort%3D-created_at%60" \
    --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/system/logs/channel/eos"
);

const params = {
    "archived": "0",
    "per_page": "50",
    "sort": "`sort=-created_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,
            "channel": "user",
            "level": "INFO",
            "message": "[created] App\\Models\\User",
            "context": {
                "ip": "127.0.0.1",
                "auth_id": null,
                "changes": {
                    "id": 33047,
                    "ulid": "01kzrgt9m67mqqhva0at3gn395",
                    "email": "gerlach.imani@example.org",
                    "phone": "+12567409057",
                    "locale": "es_CL",
                    "role_id": 2,
                    "password": "$2y$12$rQGC2FgCztJM4S74QhgE/uxMouPZeIiz76ecdQSpDtePQdsiwcgWm",
                    "last_name": "Koepp",
                    "first_name": "Malvina",
                    "reference_id": "02-4TGMVY8MTKE8-Y"
                },
                "context": null,
                "user_id": 33047,
                "endpoint": "console",
                "auth_mail": null,
                "action_type": "created"
            },
            "created_at": "2026-08-11 13:39:58",
            "deleted_at": null
        },
        {
            "id": 1,
            "channel": "user",
            "level": "INFO",
            "message": "[created] App\\Models\\User",
            "context": {
                "ip": "127.0.0.1",
                "auth_id": null,
                "changes": {
                    "id": 33047,
                    "ulid": "01kzrgt9m67mqqhva0at3gn395",
                    "email": "gerlach.imani@example.org",
                    "phone": "+12567409057",
                    "locale": "es_CL",
                    "role_id": 2,
                    "password": "$2y$12$rQGC2FgCztJM4S74QhgE/uxMouPZeIiz76ecdQSpDtePQdsiwcgWm",
                    "last_name": "Koepp",
                    "first_name": "Malvina",
                    "reference_id": "02-4TGMVY8MTKE8-Y"
                },
                "context": null,
                "user_id": 33047,
                "endpoint": "console",
                "auth_mail": null,
                "action_type": "created"
            },
            "created_at": "2026-08-11 13:39:58",
            "deleted_at": null
        }
    ]
}
 

Request      

GET api/system/logs/channel/{channel}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

channel   string     

The channel. Example: eos

Query Parameters

archived   boolean  optional    

Whether to list only archived channels. Example: false

per_page   integer  optional    

Number of channels per page. Example: 50

sort   string  optional    

Sort by any configured sort value. Example: sort=-created_at

Export

requires authentication

Export to CSV

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/logs/channel/molestiae/export" \
    --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/system/logs/channel/molestiae/export"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/system/logs/channel/{channel}/export

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

channel   string     

The channel. Example: molestiae

Archive

requires authentication

Archive logs (soft delete)

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/logs/channel/porro/archive" \
    --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/system/logs/channel/porro/archive"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/system/logs/channel/{channel}/archive

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

channel   string     

The channel. Example: porro

Delete Archived

requires authentication

Delete archived logs (force delete)

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/system/logs/channel/dolorem/delete-archived" \
    --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/system/logs/channel/dolorem/delete-archived"
);

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


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

Request      

DELETE api/system/logs/channel/{channel}/delete-archived

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

channel   string     

The channel. Example: dolorem

Blade Preview

Preview

requires authentication

Preview any View. Supports php commands and defaults to strings. Only available when debug enabled.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/system/organisation/1/blade/preview/nemo" \
    --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/system/organisation/1/blade/preview/nemo"
);

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


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

Request      

POST api/system/organisation/{organisation_id}/blade/preview/{view}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

view   string     

Example: nemo

Sync Lab Users

Webhook

requires authentication

Webhook to handle syncing lab users.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/system/sync-lab-users" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"api_key\": \"voluptatem\",
    \"data\": []
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/system/sync-lab-users"
);

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

let body = {
    "api_key": "voluptatem",
    "data": []
};

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

Example response (200):


{
    "message": "not handled"
}
 

Example response (200):


{}
 

Request      

POST api/system/sync-lab-users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

api_key   string     

Example: voluptatem

data   object     

Mail

Preview

requires authentication

Preview any mailable, supplied with any query parameter arguments for that mailable.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/organisation/1/mail/preview/quis" \
    --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/system/organisation/1/mail/preview/quis"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/system/organisation/{organisation_id}/mail/preview/{mailableClass}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

mailableClass   string     

Example: quis

Terms and Service

Active Terms and Service Document

requires authentication

Get current active ToC Document.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/terms-and-service/active?per_page=6&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/system/terms-and-service/active"
);

const params = {
    "per_page": "6",
    "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,
        "related_type": "App\\Models\\Organisation",
        "document_title": "TaS Example.pdf",
        "created_at": "2026-08-11T13:39:51.000000Z",
        "updated_at": "2026-08-11T13:39:51.000000Z",
        "public_file_url": "https://staging-api.vm400.consulting1x1.info/storage/terms-and-service/TaS%20Example.pdf"
    }
}
 

Request      

GET api/system/terms-and-service/active

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Active Terms and Conditions

requires authentication

Get current active ToC Document.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/terms-and-conditions/active?per_page=3&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/system/terms-and-conditions/active"
);

const params = {
    "per_page": "3",
    "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,
        "related_type": "App\\Models\\Organisation",
        "document_title": "TaS Example.pdf",
        "created_at": "2026-08-11T13:39:51.000000Z",
        "updated_at": "2026-08-11T13:39:51.000000Z",
        "public_file_url": "https://staging-api.vm400.consulting1x1.info/storage/terms-and-service/TaS%20Example.pdf"
    }
}
 

Request      

GET api/system/terms-and-conditions/active

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Store

requires authentication

Store a new terms and service document.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/system/organisation/1/terms-and-service" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "document=@/tmp/phpgcjfJP" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/system/organisation/1/terms-and-service"
);

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

const body = new FormData();
body.append('document', document.querySelector('input[name="document"]').files[0]);

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/system/organisation/{organisation_id}/terms-and-service

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Body Parameters

document   file     

Must be a file. Example: /tmp/phpgcjfJP

Store

requires authentication

Store a new terms and conditions document.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/system/user/8/terms-and-conditions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "document=@/tmp/phpPgcLOP" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/system/user/8/terms-and-conditions"
);

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

const body = new FormData();
body.append('document', document.querySelector('input[name="document"]').files[0]);

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/system/user/{user_id}/terms-and-conditions

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Body Parameters

document   file     

Must be a file. Example: /tmp/phpPgcLOP

Terms and Service

Accept

accept a TaS document for an organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/terms-and-service/accept/1/1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/terms-and-service/accept/1/1"
);

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


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

Example response (200):


Terms and dervice document accepted
 

Request      

POST api/terms-and-service/accept/{organisation_id}/{document_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

document_id   integer     

The ID of the document. Example: 1

Accept Terms and Conditions

accept a TaC document for a user.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/terms-and-conditions/accept/8/1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/terms-and-conditions/accept/8/1"
);

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


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

Example response (200):


Terms and conditions document accepted
 

Request      

POST api/terms-and-conditions/accept/{user_id}/{document_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

document_id   integer     

The ID of the document. Example: 1

Users

Notifications

Index

requires authentication

List all notifications for a user.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications?page=1&per_page=1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"read\": true,
    \"unread\": true
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications"
);

const params = {
    "page": "1",
    "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",
};

let body = {
    "read": true,
    "unread": true
};

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "user_id": 10874,
            "type": "product_updates",
            "message": "Formulator 1 has assigned 1 product(s) to your organisation for certification review.",
            "url": "https://staging.vm400.consulting1x1.info/organisations/21287/products/approvals",
            "read_at": null,
            "created_at": "2026-08-13T07:57:43.000000Z",
            "updated_at": "2026-08-13T07:57:43.000000Z"
        },
        {
            "id": 1,
            "user_id": 10874,
            "type": "product_updates",
            "message": "Formulator 1 has assigned 1 product(s) to your organisation for certification review.",
            "url": "https://staging.vm400.consulting1x1.info/organisations/21287/products/approvals",
            "read_at": null,
            "created_at": "2026-08-13T07:57:43.000000Z",
            "updated_at": "2026-08-13T07:57:43.000000Z"
        }
    ]
}
 

Request      

GET api/users/{user_id}/notifications

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Query Parameters

page   integer  optional    

the page number to show. Example: 1

per_page   integer  optional    

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

Body Parameters

read   boolean  optional    

Example: true

unread   boolean  optional    

Example: true

Count unread

requires authentication

Get the amount of unread notifications for a user

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications/count" \
    --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/users/8/notifications/count"
);

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: {
     count: 1
 }
}
 

Request      

GET api/users/{user_id}/notifications/count

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Mark as read

requires authentication

Mark a single or all notifications as read for a user.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications/mark-as-read/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/users/8/notifications/mark-as-read/1"
);

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


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

Example response (200):


{
 message: "Notification(s) marked as read"
}
 

Request      

POST api/users/{user_id}/notifications/mark-as-read/{notification?}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

notification   integer  optional    

Example: 1

Mark as unread

requires authentication

Mark a notification as unread for a user.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications/mark-as-unread/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/users/8/notifications/mark-as-unread/1"
);

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


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

Example response (200):


{
 message: "Notification marked as unread"
}
 

Request      

POST api/users/{user_id}/notifications/mark-as-unread/{notification_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

notification_id   integer     

The ID of the notification. Example: 1

Show Notification Settings

requires authentication

Show notification settings for a user.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications/settings" \
    --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/users/8/notifications/settings"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/users/{user_id}/notifications/settings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Update Notification Settings

requires authentication

Update notification settings for a user.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications/settings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"product_updates\": false,
    \"organisation_updates\": false,
    \"weekly_notification_digest\": true,
    \"marketing_updates\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/users/8/notifications/settings"
);

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

let body = {
    "product_updates": false,
    "organisation_updates": false,
    "weekly_notification_digest": true,
    "marketing_updates": false
};

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

Request      

PUT api/users/{user_id}/notifications/settings

PATCH api/users/{user_id}/notifications/settings

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Body Parameters

product_updates   boolean     

Example: false

organisation_updates   boolean     

Example: false

weekly_notification_digest   boolean     

Example: true

marketing_updates   boolean     

Example: false

Show

requires authentication

Get the properties of a user.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/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/users/8"
);

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,
        "reference_id": "02-TUGF4Z9EK73J-X",
        "ulid": "01KZRGSQK6BTS67WZBMKRCX7TK",
        "pdc_id": null,
        "role_id": 2,
        "first_name": "Amy",
        "last_name": "Huang",
        "email": "amyhuang@ecic.com.tw",
        "email_verified_at": "2017-06-17T04:45:09.000000Z",
        "phone": "+886910807779",
        "location": "TW",
        "locale": "en-US",
        "created_at": "2017-06-17T04:45:09.000000Z",
        "updated_at": "2017-06-17T04:45:09.000000Z",
        "deleted_at": null,
        "last_active_at": null,
        "profile_reviewed_at": null,
        "status": "active",
        "profile_picture_url": null,
        "location_name": "Taiwan"
    }
}
 

Request      

GET api/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the user. Example: 8

user   integer  optional    

The ID of the user. Example: 1

Update

requires authentication

Update a user.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/users/8" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"xejc\",
    \"last_name\": \"juqanvjyapmwesfbxzivtw\",
    \"email\": \"alda85@example.net\",
    \"phone\": \"+1234567890\",
    \"password\": \">u\'uU6\\\"I^>{.4\",
    \"location\": \"US\",
    \"locale\": \"zu_ZA\",
    \"profile_picture\": \"uoslkinzkbto\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/users/8"
);

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

let body = {
    "first_name": "xejc",
    "last_name": "juqanvjyapmwesfbxzivtw",
    "email": "alda85@example.net",
    "phone": "+1234567890",
    "password": ">u'uU6\"I^>{.4",
    "location": "US",
    "locale": "zu_ZA",
    "profile_picture": "uoslkinzkbto"
};

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

Example response (200, successful):


{
    "message": "User updated successfully",
    "email_verification_required": false,
    "password_sent": false,
    "new_avatar_url": "https://example.com/avatar.jpg"
}
 

Example response (422, Validation Error):


{
    "message": "[error message from the first field failing validation]",
    "errors": {
        "[field_name]": [
            "[any validator message failing]"
        ]
    }
}
 

Request      

PUT api/users/{id}

PATCH api/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the user. Example: 8

Body Parameters

first_name   string     

Must be at least 2 characters. Must not be greater than 50 characters. Example: xejc

last_name   string     

Must be at least 2 characters. Must not be greater than 50 characters. Example: juqanvjyapmwesfbxzivtw

email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: alda85@example.net

phone   string  optional    

The user's phone number. Must be at least 8 characters. Must not be greater than 16 characters. Example: +1234567890

password   string  optional     {.4" data-component="body">

Must not be greater than 255 characters. Example: >u'uU6"I^>{.4

password_confirmation   string  optional    

The value and password must match.

location   string  optional    

The user's location. Must not be greater than 255 characters. Example: US

locale   string  optional    

Must not be greater than 12 characters. Example: zu_ZA

profile_picture   string  optional    

Must not be greater than 2048 characters. Example: uoslkinzkbto

Destroy

requires authentication

Delete a user

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/users/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/users/8"
);

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


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

Example response (200, successful):


{
    "message": "User deleted successfully"
}
 

Request      

DELETE api/users/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the user. Example: 8

IsRegistered

requires authentication

Checks if user is registered

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/8/is-registered" \
    --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/users/8/is-registered"
);

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, successful):


{
    "message": "User is not yet registered"
}
 

Example response (500, unsuccessful):


{
    "message": "User is already registered"
}
 

Request      

GET api/users/{user_id}/is-registered

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Organisations

requires authentication

Get the organisations for a specific user or the authenticated user.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/8/organisations?pending=&non_accepted=&only_trashed=1&priority=11&per_page=3&sort=reference_id&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/users/8/organisations"
);

const params = {
    "pending": "0",
    "non_accepted": "0",
    "only_trashed": "1",
    "priority": "11",
    "per_page": "3",
    "sort": "reference_id",
    "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,
            "maxio_customer_id": 418364,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "pdc_id": null,
            "gateway_aid": "A356IB10",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
            "address_2": null,
            "city": "Wenzhou",
            "state": "Zhejiang",
            "location": "CN",
            "zip": "",
            "phone": "",
            "email": "pengye@126.com",
            "contact_first_name": "JIAN",
            "contact_last_name": "Le",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "China",
            "type": {
                "id": 2,
                "name": "Supplier",
                "display_name": "Supplier",
                "description": null,
                "selectable": 1,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-09-21T18:31:33.000000Z"
            },
            "organisation_users": [
                {
                    "id": 860,
                    "organisation_id": 1,
                    "user_id": 10054,
                    "invited_by": null,
                    "role_id": 4,
                    "last_authorization": null,
                    "invitation_sent_at": null,
                    "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
                    "created_at": "2026-08-11T13:39:38.000000Z",
                    "updated_at": "2026-08-11T13:39:38.000000Z",
                    "deleted_at": null,
                    "role": {
                        "id": 4,
                        "parent_id": 3,
                        "name": "ORGANISATION_ADMIN"
                    },
                    "organisation": {
                        "id": 1,
                        "maxio_customer_id": 418364,
                        "reference_id": "01-7TXNQR4L9PFH-I",
                        "pdc_id": null,
                        "gateway_aid": "A356IB10",
                        "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
                        "type_id": 2,
                        "status": "approved",
                        "is_test": false,
                        "name": "Ping Yang Pengye Shoes Com Ltd",
                        "legal_name": "Ping Yang Pengye Shoes Com Ltd",
                        "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
                        "address_2": null,
                        "city": "Wenzhou",
                        "state": "Zhejiang",
                        "location": "CN",
                        "zip": "",
                        "phone": "",
                        "email": "pengye@126.com",
                        "contact_first_name": "JIAN",
                        "contact_last_name": "Le",
                        "billing_contact_email": null,
                        "billing_contact_first_name": null,
                        "billing_contact_last_name": null,
                        "billing_contact_phone": null,
                        "business_registration_document_extension": null,
                        "business_registration_document_name": null,
                        "safety_data_sheet_name": null,
                        "website": null,
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": null,
                        "registration_mail_sent_at": null,
                        "created_at": "2021-11-04T12:19:55.000000Z",
                        "updated_at": "2026-08-11T15:37:26.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": null,
                        "profile_reviewed_by_user_id": null,
                        "location_name": "China"
                    }
                }
            ]
        },
        {
            "id": 1,
            "maxio_customer_id": 418364,
            "reference_id": "01-7TXNQR4L9PFH-I",
            "pdc_id": null,
            "gateway_aid": "A356IB10",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "type_id": 2,
            "status": "approved",
            "is_test": false,
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
            "address_2": null,
            "city": "Wenzhou",
            "state": "Zhejiang",
            "location": "CN",
            "zip": "",
            "phone": "",
            "email": "pengye@126.com",
            "contact_first_name": "JIAN",
            "contact_last_name": "Le",
            "billing_contact_email": null,
            "billing_contact_first_name": null,
            "billing_contact_last_name": null,
            "billing_contact_phone": null,
            "business_registration_document_extension": null,
            "business_registration_document_name": null,
            "safety_data_sheet_name": null,
            "website": null,
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": null,
            "profile_reviewed_by_user_id": null,
            "location_name": "China",
            "type": {
                "id": 2,
                "name": "Supplier",
                "display_name": "Supplier",
                "description": null,
                "selectable": 1,
                "created_at": "2026-08-11T13:39:51.000000Z",
                "updated_at": "2026-09-21T18:31:33.000000Z"
            },
            "organisation_users": [
                {
                    "id": 860,
                    "organisation_id": 1,
                    "user_id": 10054,
                    "invited_by": null,
                    "role_id": 4,
                    "last_authorization": null,
                    "invitation_sent_at": null,
                    "invitation_accepted_at": "2026-08-11T13:39:38.000000Z",
                    "created_at": "2026-08-11T13:39:38.000000Z",
                    "updated_at": "2026-08-11T13:39:38.000000Z",
                    "deleted_at": null,
                    "role": {
                        "id": 4,
                        "parent_id": 3,
                        "name": "ORGANISATION_ADMIN"
                    },
                    "organisation": {
                        "id": 1,
                        "maxio_customer_id": 418364,
                        "reference_id": "01-7TXNQR4L9PFH-I",
                        "pdc_id": null,
                        "gateway_aid": "A356IB10",
                        "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
                        "type_id": 2,
                        "status": "approved",
                        "is_test": false,
                        "name": "Ping Yang Pengye Shoes Com Ltd",
                        "legal_name": "Ping Yang Pengye Shoes Com Ltd",
                        "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
                        "address_2": null,
                        "city": "Wenzhou",
                        "state": "Zhejiang",
                        "location": "CN",
                        "zip": "",
                        "phone": "",
                        "email": "pengye@126.com",
                        "contact_first_name": "JIAN",
                        "contact_last_name": "Le",
                        "billing_contact_email": null,
                        "billing_contact_first_name": null,
                        "billing_contact_last_name": null,
                        "billing_contact_phone": null,
                        "business_registration_document_extension": null,
                        "business_registration_document_name": null,
                        "safety_data_sheet_name": null,
                        "website": null,
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": null,
                        "registration_mail_sent_at": null,
                        "created_at": "2021-11-04T12:19:55.000000Z",
                        "updated_at": "2026-08-11T15:37:26.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": null,
                        "profile_reviewed_by_user_id": null,
                        "location_name": "China"
                    }
                }
            ]
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "50",
        "to": 2
    }
}
 

Request      

GET api/users/{user_id}/organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

Query Parameters

pending   boolean  optional    

Include organisations that have pending invitations. Defaults to true. Example: false

non_accepted   boolean  optional    

Include organisations that have not been accepted. Defaults to true. Example: false

only_trashed   boolean  optional    

Example: true

priority   integer  optional    

Sort by ID by priority. Example: 11

per_page   integer  optional    

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

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Accept Invitation

requires authentication

Accept an invitation to join an organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/users/8/accept-invitation/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/users/8/accept-invitation/1"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/users/{user_id}/accept-invitation/{organisationUser_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

organisationUser_id   integer     

The ID of the organisationUser. Example: 1

Reject Invitation

requires authentication

Reject an invitation to join an organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/users/8/reject-invitation/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/users/8/reject-invitation/1"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/users/{user_id}/reject-invitation/{organisationUser_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   integer     

The ID of the user. Example: 8

organisationUser_id   integer     

The ID of the organisationUser. Example: 1

Wastewater

Clearstream Report

Show

requires authentication

get the clearstream report as a pdf

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/clearstream-report" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/clearstream-report"
);

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


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

Example response (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/{report_id}/clearstream-report

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Show CSV

requires authentication

Get the clearstream report as a csv

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/reports/wastewater/clearstream-report-csv" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reports\": [
        \"doloribus\"
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/reports/wastewater/clearstream-report-csv"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "reports": [
        "doloribus"
    ]
};

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

Request      

POST api/reports/wastewater/clearstream-report-csv

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

reports   string[]     

Facility information

Show attribute groups

requires authentication

Get a list of attribute groups related to report profiles

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/attribute-groups" \
    --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/organisation/1/wastewater/reporting/attribute-groups"
);

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,
            "name": "Materials",
            "profile_type": "supplier_profile",
            "service_id": null,
            "single_select": 0,
            "type": null,
            "required": null,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Cotton",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 2,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Bast fibres and Bamboo",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 3,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 4,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 5,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 6,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 7,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 8,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 9,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 10,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leaf fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 11,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 12,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 13,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 14,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 15,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 16,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 17,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 18,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Kapok",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 19,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Animal",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 20,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Wool",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 21,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Alpaca",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 22,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Angora",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 23,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Camel",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 24,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Cashmere",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 25,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Guanaco",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 26,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Lama",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 27,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Mohair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 28,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicuna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 29,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Yak",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 30,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Horse hair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 31,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicugna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 32,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Silk",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 33,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "MMCF",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 34,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Acetate (Diacetate, Triacetate)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 35,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Cupro",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 36,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Lyocell",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 37,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Modal",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 38,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Viscose",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 39,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Synthetics",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 40,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Acrylic",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 41,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Elastane (Spandex) ",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 42,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyamide (Nylon)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 43,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyester",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 44,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 45,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene terephthalate (PET)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 46,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polylactic acid (PLA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 47,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polypropylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 48,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Secondary Raw Materials",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 49,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 48,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 50,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Finished Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 51,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wood",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 52,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Agricultural waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 53,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Textile waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 54,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 55,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 56,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 57,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 58,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Recycled Fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 59,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 58,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 60,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fabrics",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 61,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 62,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Ethylene vinyl acetate (EVA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 63,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyurethane (PU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 64,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyvinyl chloride (PVC)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 65,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic polyurethane (TPU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 66,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic elastomers (TPE)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 67,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Acrylonitrile butadiene styrene (ABS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 68,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Neoprene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 69,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Styrene ethylene butylene styrene (SEBS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 70,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fresh hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 71,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Brined hides/Skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 72,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet or dry-salted hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 73,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Limed splits",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 74,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Pickled hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 75,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet blue hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 76,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet white/wet green hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 77,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Crust hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 78,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (tanned)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 79,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (crust)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                }
            ]
        },
        {
            "id": 1,
            "name": "Materials",
            "profile_type": "supplier_profile",
            "service_id": null,
            "single_select": 0,
            "type": null,
            "required": null,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Cotton",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 2,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Bast fibres and Bamboo",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 3,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 4,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 5,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 6,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 7,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 8,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 9,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 2,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 10,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leaf fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 11,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Bamboo",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 12,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Flax (Linen)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 13,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Hemp",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 14,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Jute",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 15,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Nettle",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 16,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Ramie",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 17,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 10,
                    "short": null,
                    "name": "Banana",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 18,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Kapok",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 19,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Animal",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 20,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Wool",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 21,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Alpaca",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 22,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Angora",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 23,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Camel",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 24,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Cashmere",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 25,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Guanaco",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 26,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Lama",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 27,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Mohair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 28,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicuna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 29,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Yak",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 30,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Horse hair",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 31,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Vicugna",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 32,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 19,
                    "short": null,
                    "name": "Silk",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 33,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "MMCF",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 34,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Acetate (Diacetate, Triacetate)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 35,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Cupro",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 36,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Lyocell",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 37,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Modal",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 38,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 33,
                    "short": null,
                    "name": "Viscose",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 39,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Synthetics",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 40,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Acrylic",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 41,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Elastane (Spandex) ",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 42,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyamide (Nylon)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 43,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyester",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 44,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 45,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polyethylene terephthalate (PET)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 46,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polylactic acid (PLA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 47,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 39,
                    "short": null,
                    "name": "Polypropylene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 48,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Secondary Raw Materials",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 49,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 48,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 50,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Finished Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 51,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wood",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 52,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Agricultural waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 53,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Textile waste",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 54,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 55,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Goose feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 56,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck down",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 57,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Duck feather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 58,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Recycled Fibres",
                    "selectable": 0,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 59,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": 58,
                    "short": null,
                    "name": "Recycled (any of the above)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 60,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fabrics",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 61,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Leather",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 62,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Ethylene vinyl acetate (EVA)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 63,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyurethane (PU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 64,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Polyvinyl chloride (PVC)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 65,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic polyurethane (TPU)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 66,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Thermoplastic elastomers (TPE)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 67,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Acrylonitrile butadiene styrene (ABS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 68,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Neoprene",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 69,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Styrene ethylene butylene styrene (SEBS)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 70,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Fresh hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 71,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Brined hides/Skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 72,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet or dry-salted hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 73,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Limed splits",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 74,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Pickled hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 75,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet blue hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 76,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wet white/wet green hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 77,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Crust hides/skins",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 78,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (tanned)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                },
                {
                    "id": 79,
                    "external_id": null,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Splits (crust)",
                    "selectable": 1,
                    "order": null,
                    "industry_type_id": null
                }
            ]
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/attribute-groups

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Show

requires authentication

Get information for the owned facility for the given report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/facility-information" \
    --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/organisation/1/wastewater/reporting/1/facility-information"
);

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,
        "report_id": 1,
        "version_id": 73,
        "avg_daily_industrial_wastewater_volume": null,
        "requires_testing": 1,
        "completed_at": "2022-09-29 00:00:00",
        "created_at": "2026-08-11T13:58:23.000000Z",
        "updated_at": "2026-08-11T13:58:23.000000Z",
        "attributes": [
            {
                "id": 499,
                "external_id": 1,
                "group_id": 20,
                "parent_id": null,
                "short": null,
                "name": "Direct",
                "selectable": 1,
                "order": null,
                "industry_type_id": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 499
                }
            },
            {
                "id": 508,
                "external_id": 1,
                "group_id": 23,
                "parent_id": null,
                "short": null,
                "name": "A: On-site or off-site incineration at >1000°C",
                "selectable": 1,
                "order": null,
                "industry_type_id": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 508
                }
            },
            {
                "id": 462,
                "external_id": 2,
                "group_id": 18,
                "parent_id": null,
                "short": null,
                "name": "Leather",
                "selectable": 1,
                "order": null,
                "industry_type_id": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 462
                }
            },
            {
                "id": 516,
                "external_id": 1,
                "group_id": 24,
                "parent_id": null,
                "short": null,
                "name": "Viscose Staple Fibre (VSF)/ VSF & Modal",
                "selectable": 1,
                "order": null,
                "industry_type_id": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 516
                }
            },
            {
                "id": 507,
                "external_id": 1,
                "group_id": 22,
                "parent_id": null,
                "short": null,
                "name": "Yes",
                "selectable": 1,
                "order": null,
                "industry_type_id": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 507
                }
            },
            {
                "id": 504,
                "external_id": 0,
                "group_id": 21,
                "parent_id": null,
                "short": null,
                "name": "less than 15m³ per day",
                "selectable": 1,
                "order": null,
                "industry_type_id": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 504
                }
            },
            {
                "id": 465,
                "external_id": 1,
                "group_id": 19,
                "parent_id": null,
                "short": null,
                "name": "Textile Accessories and Trims Assembler",
                "selectable": 1,
                "order": null,
                "industry_type_id": 1,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 465
                }
            },
            {
                "id": 477,
                "external_id": 13,
                "group_id": 19,
                "parent_id": null,
                "short": null,
                "name": "Vertically integrated Mill",
                "selectable": 1,
                "order": null,
                "industry_type_id": 1,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 477
                }
            }
        ]
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/{report_id}/facility-information

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Store

requires authentication

Get facility information

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/facility-information" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"complete\": true,
    \"avg_daily_industrial_wastewater_volume\": 7,
    \"guideline_version\": 524,
    \"industry_type\": 463,
    \"facility_type\": [],
    \"discharge_type\": 499,
    \"above_15m\": 504,
    \"has_sludge\": 506,
    \"disposal_pathway\": 513,
    \"fiber_type\": 517
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/facility-information"
);

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

let body = {
    "complete": true,
    "avg_daily_industrial_wastewater_volume": 7,
    "guideline_version": 524,
    "industry_type": 463,
    "facility_type": [],
    "discharge_type": 499,
    "above_15m": 504,
    "has_sludge": 506,
    "disposal_pathway": 513,
    "fiber_type": 517
};

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/{report_id}/facility-information

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Body Parameters

complete   boolean  optional    

Example: true

avg_daily_industrial_wastewater_volume   number     

Must be at least 0. Must not be greater than 99999999.9999. Example: 7

guideline_version   integer     

Example: 524

Must be one of:
  • 443
  • 523
  • 524
industry_type   integer     

Example: 463

Must be one of:
  • 461
  • 462
  • 463
  • 464
facility_type   object     
Must be one of:
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
discharge_type   integer     

Example: 499

Must be one of:
  • 499
  • 500
  • 501
  • 502
  • 503
above_15m   integer     

Example: 504

Must be one of:
  • 504
  • 505
has_sludge   integer     

Example: 506

Must be one of:
  • 506
  • 507
disposal_pathway   integer  optional    

Example: 513

Must be one of:
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
fiber_type   integer  optional    

Example: 517

Must be one of:
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522

Update facility information (Laboratory)

requires authentication

Allows a laboratory to edit facility information before accepting the laboratory request. After the request is accepted, facility information can no longer be changed.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/facility-information" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"complete\": false,
    \"avg_daily_industrial_wastewater_volume\": 20,
    \"guideline_version\": 443,
    \"industry_type\": 463,
    \"facility_type\": [],
    \"discharge_type\": 499,
    \"above_15m\": 504,
    \"has_sludge\": 507,
    \"disposal_pathway\": 511,
    \"fiber_type\": 519
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/facility-information"
);

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

let body = {
    "complete": false,
    "avg_daily_industrial_wastewater_volume": 20,
    "guideline_version": 443,
    "industry_type": 463,
    "facility_type": [],
    "discharge_type": 499,
    "above_15m": 504,
    "has_sludge": 507,
    "disposal_pathway": 511,
    "fiber_type": 519
};

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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/facility-information

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Body Parameters

complete   boolean  optional    

Example: false

avg_daily_industrial_wastewater_volume   number     

Must be at least 0. Must not be greater than 99999999.9999. Example: 20

guideline_version   integer     

Example: 443

Must be one of:
  • 443
  • 523
  • 524
industry_type   integer     

Example: 463

Must be one of:
  • 461
  • 462
  • 463
  • 464
facility_type   object     
Must be one of:
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
discharge_type   integer     

Example: 499

Must be one of:
  • 499
  • 500
  • 501
  • 502
  • 503
above_15m   integer     

Example: 504

Must be one of:
  • 504
  • 505
has_sludge   integer     

Example: 507

Must be one of:
  • 506
  • 507
disposal_pathway   integer  optional    

Example: 511

Must be one of:
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
fiber_type   integer  optional    

Example: 519

Must be one of:
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522

Clearstream Requests

Index

requires authentication

Get assigned laboratory clearstream requests.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests?per_page=13&filter%5Bstatus%5D=NEW&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/organisation/1/wastewater/reporting/laboratory-requests"
);

const params = {
    "per_page": "13",
    "filter[status]": "NEW",
    "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,
            "report_id": 1,
            "laboratory_id": 1042,
            "reporting_cycle": "2022-2",
            "location": "BD",
            "status": "CLOSED",
            "upload_method": "manual",
            "sampling_completed_at": "2022-09-29T00:00:00.000000Z",
            "testing_started_at": "2022-10-13 11:42:54",
            "testing_completed_at": "2022-10-13T11:45:27.000000Z",
            "closed_at": null,
            "accepted_at": "2022-10-13 11:42:54",
            "rejected_at": null,
            "accepted_by_supplier_at": "2022-10-13 11:45:27",
            "rejected_by_supplier_at": null,
            "rejection_reason": null,
            "rejection_reason_by_supplier": null,
            "supplier_rejection_additional_info": null,
            "created_at": "2026-08-11T13:58:23.000000Z",
            "updated_at": "2026-08-11T13:58:23.000000Z"
        },
        {
            "id": 1,
            "report_id": 1,
            "laboratory_id": 1042,
            "reporting_cycle": "2022-2",
            "location": "BD",
            "status": "CLOSED",
            "upload_method": "manual",
            "sampling_completed_at": "2022-09-29T00:00:00.000000Z",
            "testing_started_at": "2022-10-13 11:42:54",
            "testing_completed_at": "2022-10-13T11:45:27.000000Z",
            "closed_at": null,
            "accepted_at": "2022-10-13 11:42:54",
            "rejected_at": null,
            "accepted_by_supplier_at": "2022-10-13 11:45:27",
            "rejected_by_supplier_at": null,
            "rejection_reason": null,
            "rejection_reason_by_supplier": null,
            "supplier_rejection_additional_info": null,
            "created_at": "2026-08-11T13:58:23.000000Z",
            "updated_at": "2026-08-11T13:58:23.000000Z"
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "path": "/",
        "per_page": "100",
        "to": 2
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

Number of items to show per page. Defaults to 100 Example: 13

filter[status]   string  optional    

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

Must be one of:
  • NEW
  • SAMPLING
  • TESTING
  • REPORTING
  • REJECTED
  • REVIEW
  • CLOSED
filter[report.reference_id]   string  optional    

Filter column report.reference_id by any accepted value. Filter by wastewater report reference ID. Example: cupiditate

filter[organisation.reference_id]   organisation_reference_id  optional    

Filter column organisation.reference_id by any accepted value. Filter by the report supplier organisation reference ID. Example: 01-H8CR4V8JKAHD-I

filter[organisation.name]   string  optional    

Filter column organisation.name by any accepted value. Filter by the report supplier organisation name. Example: ipsam

page   integer  optional    

the page number to show. Example: 1

Show

requires authentication

Get details for a specific laboratory clearstream request.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/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/organisation/1/wastewater/reporting/laboratory-requests/1"
);

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,
        "report_id": 1,
        "laboratory_id": 1042,
        "reporting_cycle": "2022-2",
        "location": "BD",
        "status": "CLOSED",
        "upload_method": "manual",
        "sampling_completed_at": "2022-09-29T00:00:00.000000Z",
        "testing_started_at": "2022-10-13 11:42:54",
        "testing_completed_at": "2022-10-13T11:45:27.000000Z",
        "closed_at": null,
        "accepted_at": "2022-10-13 11:42:54",
        "rejected_at": null,
        "accepted_by_supplier_at": "2022-10-13 11:45:27",
        "rejected_by_supplier_at": null,
        "rejection_reason": null,
        "rejection_reason_by_supplier": null,
        "supplier_rejection_additional_info": null,
        "created_at": "2026-08-11T13:58:23.000000Z",
        "updated_at": "2026-08-11T13:58:23.000000Z",
        "report": {
            "id": 1,
            "reference_id": "60-BX4M3Q2DMW9B-F",
            "legacy_clearstream_report_id": "TR543HN21",
            "uuid": "a27a2fb8-0a90-4d32-be3b-27980dbad3b6",
            "organisation_id": 13995,
            "status": "PASSED",
            "created_at": "2022-10-13T11:42:54.000000Z",
            "updated_at": "2022-10-13T11:45:27.000000Z",
            "archived_at": null,
            "last_viewed_at": "2026-08-11 13:58:23",
            "payment_completed_at": null,
            "completed_at": "2026-08-11T13:58:22.000000Z",
            "legacy_clearstream_downloadable": true,
            "organisation": {
                "id": 13995,
                "maxio_customer_id": 444700,
                "reference_id": "01-RYBEJB9RM9S3-O",
                "pdc_id": null,
                "gateway_aid": "A325IM69",
                "uuid": "171c6288-e7b7-433e-9a23-ed61bb083781",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Zaber & Zubair Fabrics Limited.",
                "legal_name": "Zaber & Zubair Fabrics Limited.",
                "address_1": "Pagar, Tongi, Gazipur.",
                "address_2": null,
                "city": "Gazipur",
                "state": "Dhaka",
                "location": "BD",
                "zip": "1710",
                "phone": "+8802 9801012,",
                "email": "sustainability@znzfab.com",
                "contact_first_name": "Md Zakir",
                "contact_last_name": "Hossen",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://www.znzfab.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2018-02-08T02:19:43.000000Z",
                "updated_at": "2026-08-11T15:37:44.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Bangladesh"
            },
            "profile": {
                "id": 1,
                "report_id": 1,
                "version_id": 73,
                "avg_daily_industrial_wastewater_volume": null,
                "requires_testing": 1,
                "completed_at": "2022-09-29 00:00:00",
                "created_at": "2026-08-11T13:58:23.000000Z",
                "updated_at": "2026-08-11T13:58:23.000000Z",
                "attributes": [
                    {
                        "id": 499,
                        "external_id": 1,
                        "group_id": 20,
                        "parent_id": null,
                        "short": null,
                        "name": "Direct",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 499
                        },
                        "group": {
                            "id": 20,
                            "name": "discharge_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 508,
                        "external_id": 1,
                        "group_id": 23,
                        "parent_id": null,
                        "short": null,
                        "name": "A: On-site or off-site incineration at >1000°C",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 508
                        },
                        "group": {
                            "id": 23,
                            "name": "disposal_pathway",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 0,
                            "items_type": null
                        }
                    },
                    {
                        "id": 462,
                        "external_id": 2,
                        "group_id": 18,
                        "parent_id": null,
                        "short": null,
                        "name": "Leather",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 462
                        },
                        "group": {
                            "id": 18,
                            "name": "industry_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 516,
                        "external_id": 1,
                        "group_id": 24,
                        "parent_id": null,
                        "short": null,
                        "name": "Viscose Staple Fibre (VSF)/ VSF & Modal",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 516
                        },
                        "group": {
                            "id": 24,
                            "name": "fiber_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 0,
                            "items_type": null
                        }
                    },
                    {
                        "id": 507,
                        "external_id": 1,
                        "group_id": 22,
                        "parent_id": null,
                        "short": null,
                        "name": "Yes",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 507
                        },
                        "group": {
                            "id": 22,
                            "name": "has_sludge",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 504,
                        "external_id": 0,
                        "group_id": 21,
                        "parent_id": null,
                        "short": null,
                        "name": "less than 15m³ per day",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 504
                        },
                        "group": {
                            "id": 21,
                            "name": "above_15m",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 465,
                        "external_id": 1,
                        "group_id": 19,
                        "parent_id": null,
                        "short": null,
                        "name": "Textile Accessories and Trims Assembler",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": 1,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 465
                        },
                        "group": {
                            "id": 19,
                            "name": "facility_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 0,
                            "type": "array",
                            "required": 1,
                            "items_type": "integer"
                        }
                    },
                    {
                        "id": 477,
                        "external_id": 13,
                        "group_id": 19,
                        "parent_id": null,
                        "short": null,
                        "name": "Vertically integrated Mill",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": 1,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 477
                        },
                        "group": {
                            "id": 19,
                            "name": "facility_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 0,
                            "type": "array",
                            "required": 1,
                            "items_type": "integer"
                        }
                    }
                ]
            }
        }
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Accept

requires authentication

Accept a laboratory clearstream request.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/accept" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/accept"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/accept

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Reject

requires authentication

Reject a laboratory clearstream request.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/reject?rejection_reason=quis" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/reject"
);

const params = {
    "rejection_reason": "quis",
};
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: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/reject

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Query Parameters

rejection_reason   string     

Example: quis

Store

requires authentication

Create a new laboratory clearstream request.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/laboratory-requests?laboratory_id=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/organisation/1/wastewater/reporting/1/laboratory-requests"
);

const params = {
    "laboratory_id": "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: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "OK"
}
 

Example response (200):


{
    "data": {
        "id": 1,
        "report_id": 1,
        "laboratory_id": 1042,
        "reporting_cycle": "2022-2",
        "location": "BD",
        "status": "CLOSED",
        "upload_method": "manual",
        "sampling_completed_at": "2022-09-29T00:00:00.000000Z",
        "testing_started_at": "2022-10-13 11:42:54",
        "testing_completed_at": "2022-10-13T11:45:27.000000Z",
        "closed_at": null,
        "accepted_at": "2022-10-13 11:42:54",
        "rejected_at": null,
        "accepted_by_supplier_at": "2022-10-13 11:45:27",
        "rejected_by_supplier_at": null,
        "rejection_reason": null,
        "rejection_reason_by_supplier": null,
        "supplier_rejection_additional_info": null,
        "created_at": "2026-08-11T13:58:23.000000Z",
        "updated_at": "2026-08-11T13:58:23.000000Z",
        "report": {
            "id": 1,
            "reference_id": "60-BX4M3Q2DMW9B-F",
            "legacy_clearstream_report_id": "TR543HN21",
            "uuid": "a27a2fb8-0a90-4d32-be3b-27980dbad3b6",
            "organisation_id": 13995,
            "status": "PASSED",
            "created_at": "2022-10-13T11:42:54.000000Z",
            "updated_at": "2022-10-13T11:45:27.000000Z",
            "archived_at": null,
            "last_viewed_at": "2026-08-11 13:58:23",
            "payment_completed_at": null,
            "completed_at": "2026-08-11T13:58:22.000000Z",
            "legacy_clearstream_downloadable": true,
            "organisation": {
                "id": 13995,
                "maxio_customer_id": 444700,
                "reference_id": "01-RYBEJB9RM9S3-O",
                "pdc_id": null,
                "gateway_aid": "A325IM69",
                "uuid": "171c6288-e7b7-433e-9a23-ed61bb083781",
                "type_id": 2,
                "status": "approved",
                "is_test": false,
                "name": "Zaber & Zubair Fabrics Limited.",
                "legal_name": "Zaber & Zubair Fabrics Limited.",
                "address_1": "Pagar, Tongi, Gazipur.",
                "address_2": null,
                "city": "Gazipur",
                "state": "Dhaka",
                "location": "BD",
                "zip": "1710",
                "phone": "+8802 9801012,",
                "email": "sustainability@znzfab.com",
                "contact_first_name": "Md Zakir",
                "contact_last_name": "Hossen",
                "billing_contact_email": null,
                "billing_contact_first_name": null,
                "billing_contact_last_name": null,
                "billing_contact_phone": null,
                "business_registration_document_extension": null,
                "business_registration_document_name": null,
                "safety_data_sheet_name": null,
                "website": "https://www.znzfab.com",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": null,
                "created_at": "2018-02-08T02:19:43.000000Z",
                "updated_at": "2026-08-11T15:37:44.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Bangladesh"
            },
            "profile": {
                "id": 1,
                "report_id": 1,
                "version_id": 73,
                "avg_daily_industrial_wastewater_volume": null,
                "requires_testing": 1,
                "completed_at": "2022-09-29 00:00:00",
                "created_at": "2026-08-11T13:58:23.000000Z",
                "updated_at": "2026-08-11T13:58:23.000000Z",
                "attributes": [
                    {
                        "id": 499,
                        "external_id": 1,
                        "group_id": 20,
                        "parent_id": null,
                        "short": null,
                        "name": "Direct",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 499
                        }
                    },
                    {
                        "id": 508,
                        "external_id": 1,
                        "group_id": 23,
                        "parent_id": null,
                        "short": null,
                        "name": "A: On-site or off-site incineration at >1000°C",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 508
                        }
                    },
                    {
                        "id": 462,
                        "external_id": 2,
                        "group_id": 18,
                        "parent_id": null,
                        "short": null,
                        "name": "Leather",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 462
                        }
                    },
                    {
                        "id": 516,
                        "external_id": 1,
                        "group_id": 24,
                        "parent_id": null,
                        "short": null,
                        "name": "Viscose Staple Fibre (VSF)/ VSF & Modal",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 516
                        }
                    },
                    {
                        "id": 507,
                        "external_id": 1,
                        "group_id": 22,
                        "parent_id": null,
                        "short": null,
                        "name": "Yes",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 507
                        }
                    },
                    {
                        "id": 504,
                        "external_id": 0,
                        "group_id": 21,
                        "parent_id": null,
                        "short": null,
                        "name": "less than 15m³ per day",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": null,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 504
                        }
                    },
                    {
                        "id": 465,
                        "external_id": 1,
                        "group_id": 19,
                        "parent_id": null,
                        "short": null,
                        "name": "Textile Accessories and Trims Assembler",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": 1,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 465
                        }
                    },
                    {
                        "id": 477,
                        "external_id": 13,
                        "group_id": 19,
                        "parent_id": null,
                        "short": null,
                        "name": "Vertically integrated Mill",
                        "selectable": 1,
                        "order": null,
                        "industry_type_id": 1,
                        "pivot": {
                            "profile_id": 1,
                            "attribute_id": 477
                        }
                    }
                ]
            }
        }
    }
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/{report_id}/laboratory-requests

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Query Parameters

laboratory_id   integer     

The id of an existing record in the organisations table. Example: 5

Choose Upload Method

requires authentication

Allows the user to choose the upload method for the laboratory request.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/choose-upload-method" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"manual\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/choose-upload-method"
);

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

let body = {
    "type": "manual"
};

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

Example response (200):


{
    "message": "Upload method successfully saved."
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/choose-upload-method

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Body Parameters

type   string     

Example: manual

Must be one of:
  • manual
  • api

Store test results

requires authentication

Store test results for a specific report

Example request:
curl --request PATCH \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/store-test-results" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parameters\": [
        {
            \"id\": 14,
            \"other_test_method\": \"lpxokn\",
            \"non_detected\": true
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/store-test-results"
);

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

let body = {
    "parameters": [
        {
            "id": 14,
            "other_test_method": "lpxokn",
            "non_detected": true
        }
    ]
};

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

Request      

PATCH api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/store-test-results

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Body Parameters

parameters   object[]  optional    
id   integer     

Example: 14

value   string  optional    
method   string  optional    
other_test_method   string  optional    

Must not be greater than 255 characters. Example: lpxokn

non_detected   boolean  optional    

Example: true

Bulk store test results from CSV

requires authentication

Upload a CSV of lab test results. Matched, valid rows are applied; unmatched or invalid rows are skipped for manual entry.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/bulk-store-test-results" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "csv=@/tmp/phpBnNeel" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/bulk-store-test-results"
);

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

const body = new FormData();
body.append('csv', document.querySelector('input[name="csv"]').files[0]);

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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/bulk-store-test-results

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Body Parameters

csv   file     

Delimited CSV file using ; as delimiter, maximum file size 20480 KB (20 MB), requiring headers: parameter_test_id, reported_value, method, non_detected. Extra columns are ignored. Must be a file. Must not be greater than 20480 kilobytes. Example: /tmp/phpBnNeel

rows   object     

Must have at least 1 items. Must not have more than 10000 items.

Prefill test results

requires authentication

Prefill test results for a specific report. Only available for envs with APP_DEBUG=true

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/prefill-test-results" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/prefill-test-results"
);

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


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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/prefill-test-results

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Accept By Supplier

requires authentication

Accept a finished laboratory clearstream request from the supplier side.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/accept-by-supplier" \
    --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/organisation/1/wastewater/reporting/laboratory-requests/1/accept-by-supplier"
);

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


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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/accept-by-supplier

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Reject By Supplier

requires authentication

Reject a finished laboratory clearstream request from the supplier side.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/reject-by-supplier?rejection_reason=missing_requirements&additional_details=lnknfcgv&return_to_reporting=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/organisation/1/wastewater/reporting/laboratory-requests/1/reject-by-supplier"
);

const params = {
    "rejection_reason": "missing_requirements",
    "additional_details": "lnknfcgv",
    "return_to_reporting": "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: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/reject-by-supplier

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Query Parameters

rejection_reason   string     

Example: missing_requirements

Must be one of:
  • values_are_incorrect
  • missing_requirements
  • testing_methodology_concerns
  • documentation_incomplete
  • laboratory_certification_issues
  • timeline_or_deadline_violations
  • other
additional_details   string  optional    

Must not be greater than 1000 characters. Example: lnknfcgv

return_to_reporting   boolean  optional    

Example: true

Reporting

Preview required tests

requires authentication

Get a summary of parameters for a specific report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/preview-required-tests" \
    --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/organisation/1/wastewater/reporting/1/preview-required-tests"
);

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": [
        {
            "matrix": null,
            "name": null,
            "name_or_parent": null
        },
        {
            "matrix": null,
            "name": null,
            "name_or_parent": null
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/{report_id}/preview-required-tests

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Get test results

requires authentication

Get a test result for a specific report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/labs/test-results/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/organisation/1/wastewater/reporting/labs/test-results/1"
);

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,
        "report_id": 1,
        "parameters_filled": "2022-09-29 00:00:00",
        "test_date": "2022-09-29 00:00:00",
        "last_viewed_at": null,
        "created_at": "2026-08-11T13:58:23.000000Z",
        "updated_at": "2026-08-11T13:58:23.000000Z"
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/labs/test-results/{report_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

parameter parents

requires authentication

Get parameter parents for a specific report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/labs/test-result-parameter-parents/1?per_page=9&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/organisation/1/wastewater/reporting/labs/test-result-parameter-parents/1"
);

const params = {
    "per_page": "9",
    "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,
            "guideline_id": 129,
            "test_result_id": 14477,
            "unit_id": 109,
            "method_id": null,
            "other_test_method": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": "0",
            "name": "1,2-benzenedicarboxylic acid, di-C7-11 branched and liearalkyl esters (DHNUP)",
            "matrix": "Untreated",
            "status": "passed",
            "cas_number": null,
            "alternative_value": null,
            "is_passing": 1,
            "mandatory": 0,
            "created_at": "2026-08-08T12:33:57.000000Z",
            "updated_at": "2026-08-08T12:38:36.000000Z",
            "parent_id": 3462408,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 1,
            "non_detected": 0
        },
        {
            "id": 1,
            "guideline_id": 129,
            "test_result_id": 14477,
            "unit_id": 109,
            "method_id": null,
            "other_test_method": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": "0",
            "name": "1,2-benzenedicarboxylic acid, di-C7-11 branched and liearalkyl esters (DHNUP)",
            "matrix": "Untreated",
            "status": "passed",
            "cas_number": null,
            "alternative_value": null,
            "is_passing": 1,
            "mandatory": 0,
            "created_at": "2026-08-08T12:33:57.000000Z",
            "updated_at": "2026-08-08T12:38:36.000000Z",
            "parent_id": 3462408,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 1,
            "non_detected": 0
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/labs/test-result-parameter-parents/{report_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Get test result parameters

requires authentication

Get test result parameters for a specific test result

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/labs/test-result-parameters/1?per_page=4&group=9&page=1&search=nemo&filter%5Bmatrix%5D=optio&filter%5Bparent_name%5D=inventore&filter%5Bonly_with_rca_cap%5D=saepe&column=matrix&sort=name" \
    --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/organisation/1/wastewater/reporting/labs/test-result-parameters/1"
);

const params = {
    "per_page": "4",
    "group": "9",
    "page": "1",
    "search": "nemo",
    "filter[matrix]": "optio",
    "filter[parent_name]": "inventore",
    "filter[only_with_rca_cap]": "saepe",
    "column": "matrix",
    "sort": "name",
};
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,
            "guideline_id": 129,
            "test_result_id": 14477,
            "unit_id": 109,
            "method_id": null,
            "other_test_method": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": "0",
            "name": "1,2-benzenedicarboxylic acid, di-C7-11 branched and liearalkyl esters (DHNUP)",
            "matrix": "Untreated",
            "status": "passed",
            "cas_number": null,
            "alternative_value": null,
            "is_passing": 1,
            "mandatory": 0,
            "created_at": "2026-08-08T12:33:57.000000Z",
            "updated_at": "2026-08-08T12:38:36.000000Z",
            "parent_id": 3462408,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 1,
            "non_detected": 0,
            "limits": [],
            "methods": [],
            "selected_method": null,
            "parent": {
                "id": 3462408,
                "guideline_id": 9200016,
                "test_result_id": 14477,
                "unit_id": null,
                "method_id": null,
                "other_test_method": null,
                "resulting_limit_id": null,
                "visibility": "always",
                "measured_value": null,
                "name": "Phthalates – including all other esters of ortho-phthalic acid",
                "matrix": "Untreated",
                "status": "passed",
                "cas_number": null,
                "alternative_value": null,
                "is_passing": 1,
                "mandatory": 0,
                "created_at": "2026-08-08T12:37:14.000000Z",
                "updated_at": "2026-08-08T12:37:14.000000Z",
                "parent_id": 3462407,
                "data_type": null,
                "value_type": null,
                "scoring_applicable": 0,
                "non_detected": 0
            },
            "rca": null,
            "unit": {
                "id": 109,
                "name": "µg/l"
            }
        },
        {
            "id": 1,
            "guideline_id": 129,
            "test_result_id": 14477,
            "unit_id": 109,
            "method_id": null,
            "other_test_method": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": "0",
            "name": "1,2-benzenedicarboxylic acid, di-C7-11 branched and liearalkyl esters (DHNUP)",
            "matrix": "Untreated",
            "status": "passed",
            "cas_number": null,
            "alternative_value": null,
            "is_passing": 1,
            "mandatory": 0,
            "created_at": "2026-08-08T12:33:57.000000Z",
            "updated_at": "2026-08-08T12:38:36.000000Z",
            "parent_id": 3462408,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 1,
            "non_detected": 0,
            "limits": [],
            "methods": [],
            "selected_method": null,
            "parent": {
                "id": 3462408,
                "guideline_id": 9200016,
                "test_result_id": 14477,
                "unit_id": null,
                "method_id": null,
                "other_test_method": null,
                "resulting_limit_id": null,
                "visibility": "always",
                "measured_value": null,
                "name": "Phthalates – including all other esters of ortho-phthalic acid",
                "matrix": "Untreated",
                "status": "passed",
                "cas_number": null,
                "alternative_value": null,
                "is_passing": 1,
                "mandatory": 0,
                "created_at": "2026-08-08T12:37:14.000000Z",
                "updated_at": "2026-08-08T12:37:14.000000Z",
                "parent_id": 3462407,
                "data_type": null,
                "value_type": null,
                "scoring_applicable": 0,
                "non_detected": 0
            },
            "rca": null,
            "unit": {
                "id": 109,
                "name": "µg/l"
            }
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/labs/test-result-parameters/{report_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Query Parameters

per_page   integer  optional    

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

group   integer  optional    

Example: 9

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: name, parent.name. Filter type: like. Example: nemo

filter[matrix]   string  optional    

Filter column matrix by any accepted value. Matches part of the value. Example: optio

filter[parent_name]   string  optional    

Filter column parent_name by any accepted value. Matches part of the value. Example: inventore

filter[selectedMethod.method]   string  optional    

Filter column selectedMethod.method by any accepted value. Matches part of the value. Example: sequi

filter[only_with_rca_cap]   string  optional    

Filter column only_with_rca_cap by any accepted value. Matches part of the value. Example: saepe

column   string  optional    

get a distinct list of filterable values for any of the columns: matrix. Example: matrix

sort   string  optional    

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

Export test result parameters

requires authentication

Exports the test result parameters CSV template / results for a specific report.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/labs/test-results/1/export" \
    --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/organisation/1/wastewater/reporting/labs/test-results/1/export"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/labs/test-results/{report_id}/export

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Index

requires authentication

Get all wastewater reports for an organisation

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reports?per_page=1&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/organisation/1/wastewater/reports"
);

const params = {
    "per_page": "1",
    "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,
            "reference_id": "60-BX4M3Q2DMW9B-F",
            "legacy_clearstream_report_id": "TR543HN21",
            "uuid": "a27a2fb8-0a90-4d32-be3b-27980dbad3b6",
            "organisation_id": 13995,
            "status": "PASSED",
            "created_at": "2022-10-13T11:42:54.000000Z",
            "updated_at": "2022-10-13T11:45:27.000000Z",
            "archived_at": null,
            "last_viewed_at": "2026-08-11 13:58:23",
            "payment_completed_at": null,
            "completed_at": "2026-08-11T13:58:22.000000Z",
            "legacy_clearstream_downloadable": true,
            "profile": {
                "id": 1,
                "report_id": 1,
                "version_id": 73,
                "avg_daily_industrial_wastewater_volume": null,
                "requires_testing": 1,
                "completed_at": "2022-09-29 00:00:00",
                "created_at": "2026-08-11T13:58:23.000000Z",
                "updated_at": "2026-08-11T13:58:23.000000Z"
            }
        },
        {
            "id": 1,
            "reference_id": "60-BX4M3Q2DMW9B-F",
            "legacy_clearstream_report_id": "TR543HN21",
            "uuid": "a27a2fb8-0a90-4d32-be3b-27980dbad3b6",
            "organisation_id": 13995,
            "status": "PASSED",
            "created_at": "2022-10-13T11:42:54.000000Z",
            "updated_at": "2022-10-13T11:45:27.000000Z",
            "archived_at": null,
            "last_viewed_at": "2026-08-11 13:58:23",
            "payment_completed_at": null,
            "completed_at": "2026-08-11T13:58:22.000000Z",
            "legacy_clearstream_downloadable": true,
            "profile": {
                "id": 1,
                "report_id": 1,
                "version_id": 73,
                "avg_daily_industrial_wastewater_volume": null,
                "requires_testing": 1,
                "completed_at": "2022-09-29 00:00:00",
                "created_at": "2026-08-11T13:58:23.000000Z",
                "updated_at": "2026-08-11T13:58:23.000000Z"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 50,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reports

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Query Parameters

per_page   integer  optional    

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

page   integer  optional    

the page number to show. Example: 1

Download legacy test report

requires authentication

Download the stored Clearstream test report PDF for a migrated (legacy) wastewater report.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reports/1/test-report" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reports/1/test-report"
);

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


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

Example response (200, Legacy Clearstream test report PDF file.):



 

Request      

GET api/organisation/{organisation_id}/wastewater/reports/{report_id}/test-report

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Reporting Progress

requires authentication

Get information on the progress of the currently running wastewater reporting.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/progress/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/organisation/1/wastewater/reporting/progress/1"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/progress/{report?}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report   integer  optional    

Example: 1

Start Reporting

requires authentication

Start the wastewater reporting process.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/start-reporting" \
    --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/organisation/1/wastewater/reporting/start-reporting"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Example response (400, Wastewater reporting has been started.):



 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/start-reporting

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Restart Cycle

requires authentication

Restart a cycle

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/restart-cycle" \
    --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/organisation/1/wastewater/reporting/restart-cycle"
);

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


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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/restart-cycle

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

Reporting Progress

requires authentication

Get information on the progress of the currently running wastewater reporting.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/complete-payment" \
    --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/organisation/1/wastewater/reporting/1/complete-payment"
);

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


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

Example response (200):


{
    "message": "OK"
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/{report_id}/complete-payment

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Details

requires authentication

Get details for report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/details/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/organisation/1/wastewater/reporting/details/1"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/details/{report_id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Sampling Information

Show

requires authentication

Show the sampling information.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/sampling-information/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/organisation/1/wastewater/reporting/laboratory-requests/1/sampling-information/1"
);

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,
        "lab_request_id": 1,
        "effluent_discharge_method_id": 499,
        "project_number": "LEGACY-18790",
        "wastewater_type": "Industrial Wastewater",
        "industrial_wastewater_volume_more_than_15qm": 0,
        "created_at": "2026-08-11T13:58:23.000000Z",
        "updated_at": "2026-08-11T13:58:23.000000Z"
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/sampling-information/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

id   integer     

The ID of the sampling information. Example: 1

Store

requires authentication

Store the sampling information.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/sampling-information" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "project_number=gbzeqjzinfpzkpibgp"\
    --form "effluent_discharge_method_id=eos"\
    --form "wastewater_type=Industrial Wastewater"\
    --form "industrial_wastewater_volume_more_than_15qm=1"\
    --form "sample_points[][name]=qui"\
    --form "sample_points[][latitude]=15"\
    --form "sample_points[][longitude]=14"\
    --form "sample_points[][type]=sludge"\
    --form "sample_points[][discharge_to_aquatic_bodies]=1"\
    --form "sample_points[][pre_treatments][]=nobis"\
    --form "sample_points[][temperature_safety_risk]=1"\
    --form "sample_points[][persistent_foam_safety_risk]=1"\
    --form "sample_points[][major_disposal_pathway]=Landfill with Significant Control Measures"\
    --form "sample_points[][disposal_pathway_percentage]=4"\
    --form "sample_points[][filename]=@/tmp/phpMMgBmA"     --form "sample_points[][temperature_safety_risk_file]=@/tmp/phpceNGmA"     --form "sample_points[][persistent_foam_safety_risk_file]=@/tmp/phpfdhImA" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/1/sampling-information"
);

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

const body = new FormData();
body.append('project_number', 'gbzeqjzinfpzkpibgp');
body.append('effluent_discharge_method_id', 'eos');
body.append('wastewater_type', 'Industrial Wastewater');
body.append('industrial_wastewater_volume_more_than_15qm', '1');
body.append('sample_points[][name]', 'qui');
body.append('sample_points[][latitude]', '15');
body.append('sample_points[][longitude]', '14');
body.append('sample_points[][type]', 'sludge');
body.append('sample_points[][discharge_to_aquatic_bodies]', '1');
body.append('sample_points[][pre_treatments][]', 'nobis');
body.append('sample_points[][temperature_safety_risk]', '1');
body.append('sample_points[][persistent_foam_safety_risk]', '1');
body.append('sample_points[][major_disposal_pathway]', 'Landfill with Significant Control Measures');
body.append('sample_points[][disposal_pathway_percentage]', '4');
body.append('sample_points[][filename]', document.querySelector('input[name="sample_points[][filename]"]').files[0]);
body.append('sample_points[][temperature_safety_risk_file]', document.querySelector('input[name="sample_points[][temperature_safety_risk_file]"]').files[0]);
body.append('sample_points[][persistent_foam_safety_risk_file]', document.querySelector('input[name="sample_points[][persistent_foam_safety_risk_file]"]').files[0]);

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

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/laboratory-requests/{clearstreamRequest_id}/sampling-information

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

clearstreamRequest_id   integer     

The ID of the clearstreamRequest. Example: 1

Body Parameters

project_number   string     

Must not be greater than 255 characters. Example: gbzeqjzinfpzkpibgp

effluent_discharge_method_id   string     

The id of an existing record in the supplier_attributes table. Example: eos

wastewater_type   string     

Example: Industrial Wastewater

Must be one of:
  • Industrial Wastewater
  • Industrial Wastewater mixed with Domestic Wastewater
industrial_wastewater_volume_more_than_15qm   boolean     

Example: true

sample_points   object[]  optional    
name   string  optional    

Example: qui

latitude   number     

Must be at least -90. Must not be greater than 90. Example: 15

longitude   number     

Must be at least -180. Must not be greater than 180. Example: 14

type   string     

Example: sludge

Must be one of:
  • untreated
  • effluent
  • sludge
discharge_to_aquatic_bodies   boolean  optional    

Example: true

pre_treatments   string[]  optional    
temperature_safety_risk   boolean  optional    

Example: true

persistent_foam_safety_risk   boolean  optional    

Example: true

major_disposal_pathway   string  optional    

Example: Landfill with Significant Control Measures

Must be one of:
  • Offsite Incineration at >1000°C
  • Landfill with Significant Control Measures
  • Building Products Processed at >1000°C
  • Landfill with Limited Control Measures
  • Offsite Incineration and Building Products Processed at <1000°C
  • Landfill with No Control Measures
  • Land Application
disposal_pathway_percentage   number  optional    

Must be at least 0. Must not be greater than 100. Example: 4

filename   file  optional    

Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpMMgBmA

temperature_safety_risk_file   file  optional    

Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpceNGmA

persistent_foam_safety_risk_file   file  optional    

Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpfdhImA

Documents

Certificate

requires authentication

Generate and download the clearstream certificate PDF of a wastewater report.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/wastewater/reports/1/documents/certificate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/wastewater/reports/1/documents/certificate"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200):


content of the certificate pdf
 

Request      

GET api/wastewater/reports/{report_id}/documents/certificate

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

report_id   integer     

The ID of the report. Example: 1

Clearstream Details

requires authentication

Generate and download the clearstream details PDF of a wastewater report.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/wastewater/reports/1/documents/clearstream-details" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/wastewater/reports/1/documents/clearstream-details"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200):


content of the clearstream details pdf
 

Request      

GET api/wastewater/reports/{report_id}/documents/clearstream-details

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

report_id   integer     

The ID of the report. Example: 1

RCA Evidence

requires authentication

Download the evidence file uploaded for a root cause analysis.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/wastewater/rca/23/documents/evidence" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Auth-Organisation-Id: 01-4SWZLM6LU9C-J" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/wastewater/rca/23/documents/evidence"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Auth-Organisation-Id": "01-4SWZLM6LU9C-J",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


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

Example response (200):


content of the evidence file
 

Request      

GET api/wastewater/rca/{rca_id}/documents/evidence

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Auth-Organisation-Id        

Example: 01-4SWZLM6LU9C-J

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

rca_id   integer     

The ID of the rca. Example: 23

Root Cause Analysis

Show

requires authentication

Show details about a given RCA record

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca/23" \
    --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/organisation/1/wastewater/reporting/1/rca/23"
);

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 (401):

Show headers
access-control-expose-headers: WWW-Authenticate
www-authenticate: Bearer realm="Token not found"
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Token not found",
    "exception": "App\\Exceptions\\TokenNotFoundException",
    "file": "/var/www/html/app/Http/Middleware/Authenticate.php",
    "line": 23,
    "trace": [
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 88,
            "function": "unauthenticated",
            "class": "App\\Http\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 62,
            "function": "authenticate",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 807,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 786,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 750,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 739,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 201,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 170,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 51,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 58,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/InvokeDeferredCallbacks.php",
            "line": 22,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 209,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\InvokeDeferredCallbacks",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 127,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 145,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 236,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 229,
            "function": "callLaravelRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 103,
            "function": "makeApiCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php",
            "line": 39,
            "function": "makeResponseCall",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 466,
            "function": "__invoke",
            "class": "Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 392,
            "function": "iterateThroughStrategies",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php",
            "line": 93,
            "function": "fetchResponses",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 186,
            "function": "processRoute",
            "class": "Knuckles\\Scribe\\Extracting\\Extractor",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Task.php",
            "line": 40,
            "function": "Knuckles\\Scribe\\GroupedEndpoints\\{closure}",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/View/Components/Factory.php",
            "line": 60,
            "function": "render",
            "class": "Illuminate\\Console\\View\\Components\\Task",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 183,
            "function": "__call",
            "class": "Illuminate\\Console\\View\\Components\\Factory",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 73,
            "function": "extractEndpointsInfoFromLaravelApp",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php",
            "line": 51,
            "function": "extractEndpointsInfoAndWriteToDisk",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php",
            "line": 55,
            "function": "get",
            "class": "Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 36,
            "function": "handle",
            "class": "Knuckles\\Scribe\\Commands\\GenerateDocumentation",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php",
            "line": 43,
            "function": "Illuminate\\Container\\{closure}",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 95,
            "function": "unwrapIfClosure",
            "class": "Illuminate\\Container\\Util",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php",
            "line": 35,
            "function": "callBoundMethod",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 696,
            "function": "call",
            "class": "Illuminate\\Container\\BoundMethod",
            "type": "::"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 213,
            "function": "call",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Command/Command.php",
            "line": 335,
            "function": "execute",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php",
            "line": 182,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Command\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 1103,
            "function": "run",
            "class": "Illuminate\\Console\\Command",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 356,
            "function": "doRunCommand",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/symfony/console/Application.php",
            "line": 195,
            "function": "doRun",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php",
            "line": 198,
            "function": "run",
            "class": "Symfony\\Component\\Console\\Application",
            "type": "->"
        },
        {
            "file": "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 1235,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Console\\Kernel",
            "type": "->"
        },
        {
            "file": "/var/www/html/artisan",
            "line": 13,
            "function": "handleCommand",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/{report_id}/rca/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

id   integer     

The ID of the rca. Example: 23

Create

requires authentication

Create a new Wastewater Root Cause Analysis record.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "parameter_id=7"\
    --form "is_resolved="\
    --form "reason_for_failure=dxxvhv"\
    --form "corrective_action=sff"\
    --form "notes=deleniti"\
    --form "action_notes=eos"\
    --form "planned_resolution_date=2026-09-21 18:31:46"\
    --form "evidence=@/tmp/phpNOoHPC" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca"
);

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

const body = new FormData();
body.append('parameter_id', '7');
body.append('is_resolved', '');
body.append('reason_for_failure', 'dxxvhv');
body.append('corrective_action', 'sff');
body.append('notes', 'deleniti');
body.append('action_notes', 'eos');
body.append('planned_resolution_date', '2026-09-21 18:31:46');
body.append('evidence', document.querySelector('input[name="evidence"]').files[0]);

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

Example response (201):


{
    "data": {
        "id": 23,
        "parameter_id": 3865473,
        "is_resolved": false,
        "reason_for_failure": "Incomplete chemical inventory",
        "corrective_action": "Repair or upgrade equipment",
        "notes": null,
        "action_notes": null,
        "planned_resolution_date": null,
        "created_at": "2026-08-20T13:04:12.000000Z",
        "updated_at": "2026-08-20T13:04:12.000000Z",
        "evidence_file_url": null
    },
    "message": "Wastewater RCA created successfully"
}
 

Request      

POST api/organisation/{organisation_id}/wastewater/reporting/{report_id}/rca

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Body Parameters

parameter_id   integer     

The id of an existing record in the wastewater_test_result_parameters table. Example: 7

is_resolved   boolean  optional    

Example: false

reason_for_failure   string     

Must not be greater than 255 characters. Example: dxxvhv

Must be one of:
  • Non-compliant chemical used
  • Incomplete chemical inventory
  • Equipment failure or malfunction
  • Incorrect dosing of treatment chemicals
  • Overloaded treatment plant
  • Poor maintenance of ETP/WWTP
  • Insufficient operator training
  • SOP not followed
  • Inadequate monitoring or testing
  • External shock load/seasonal variation
corrective_action   string     

Must not be greater than 255 characters. Example: sff

Must be one of:
  • Replace with compliant chemical
  • Update and verify chemical inventory
  • Repair or upgrade equipment
  • Optimise treatment chemical dosing
  • Improve flow management/load control
  • Strengthen maintenance schedule
  • Conduct operator training/refresher
  • Enforce SOP compliance
  • Increase monitoring/testing frequency
  • Implement pre-treatment or process change
  • Other
notes   string  optional    

Example: deleniti

action_notes   string  optional    

Example: eos

planned_resolution_date   string  optional    

Must be a valid date. Must be a valid date in the format Y-m-d H:i:s. Example: 2026-09-21 18:31:46

evidence   file  optional    

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/phpNOoHPC

Update

requires authentication

Update a given RCA record

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca/23" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "parameter_id=12"\
    --form "is_resolved=1"\
    --form "reason_for_failure=omp"\
    --form "corrective_action=xraoiibjknolzcfbdwq"\
    --form "notes=et"\
    --form "action_notes=nihil"\
    --form "planned_resolution_date=2026-09-21 18:31:46"\
    --form "evidence=@/tmp/phpNpmhkC" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca/23"
);

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

const body = new FormData();
body.append('parameter_id', '12');
body.append('is_resolved', '1');
body.append('reason_for_failure', 'omp');
body.append('corrective_action', 'xraoiibjknolzcfbdwq');
body.append('notes', 'et');
body.append('action_notes', 'nihil');
body.append('planned_resolution_date', '2026-09-21 18:31:46');
body.append('evidence', document.querySelector('input[name="evidence"]').files[0]);

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

Example response (200):


{
    "data": {
        "id": 23,
        "parameter_id": 3865473,
        "is_resolved": false,
        "reason_for_failure": "Incomplete chemical inventory",
        "corrective_action": "Repair or upgrade equipment",
        "notes": null,
        "action_notes": null,
        "planned_resolution_date": null,
        "created_at": "2026-08-20T13:04:12.000000Z",
        "updated_at": "2026-08-20T13:04:12.000000Z",
        "evidence_file_url": null
    },
    "message": "Wastewater RCA updated successfully"
}
 

Request      

PUT api/organisation/{organisation_id}/wastewater/reporting/{report_id}/rca/{id}

PATCH api/organisation/{organisation_id}/wastewater/reporting/{report_id}/rca/{id}

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

id   integer     

The ID of the rca. Example: 23

Body Parameters

parameter_id   integer     

The id of an existing record in the wastewater_test_result_parameters table. Example: 12

is_resolved   boolean  optional    

Example: true

reason_for_failure   string     

Must not be greater than 255 characters. Example: omp

Must be one of:
  • Non-compliant chemical used
  • Incomplete chemical inventory
  • Equipment failure or malfunction
  • Incorrect dosing of treatment chemicals
  • Overloaded treatment plant
  • Poor maintenance of ETP/WWTP
  • Insufficient operator training
  • SOP not followed
  • Inadequate monitoring or testing
  • External shock load/seasonal variation
corrective_action   string     

Must not be greater than 255 characters. Example: xraoiibjknolzcfbdwq

Must be one of:
  • Replace with compliant chemical
  • Update and verify chemical inventory
  • Repair or upgrade equipment
  • Optimise treatment chemical dosing
  • Improve flow management/load control
  • Strengthen maintenance schedule
  • Conduct operator training/refresher
  • Enforce SOP compliance
  • Increase monitoring/testing frequency
  • Implement pre-treatment or process change
  • Other
notes   string  optional    

Example: et

action_notes   string  optional    

Example: nihil

planned_resolution_date   string  optional    

Must be a valid date. Must be a valid date in the format Y-m-d H:i:s. Example: 2026-09-21 18:31:46

evidence   file  optional    

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/phpNpmhkC

Delete File

requires authentication

Delete the evidence file

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca/23/delete-evidence-file" \
    --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/organisation/1/wastewater/reporting/1/rca/23/delete-evidence-file"
);

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


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

Example response (200):


{
    "data": {
        "id": 23,
        "parameter_id": 3865473,
        "is_resolved": false,
        "reason_for_failure": "Incomplete chemical inventory",
        "corrective_action": "Repair or upgrade equipment",
        "notes": null,
        "action_notes": null,
        "planned_resolution_date": null,
        "created_at": "2026-08-20T13:04:12.000000Z",
        "updated_at": "2026-08-20T13:04:12.000000Z",
        "evidence_file_url": null
    },
    "message": "Wastewater RCA evidence file deleted successfully"
}
 

Request      

DELETE api/organisation/{organisation_id}/wastewater/reporting/{report_id}/rca/{rca_id}/delete-evidence-file

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

rca_id   integer     

The ID of the rca. Example: 23

RCA Overview PDF

Generate

requires authentication

Generate the Rca Overview Pdf on demand.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/1/rca-overview-pdf" \
    --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/organisation/1/wastewater/reporting/1/rca-overview-pdf"
);

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


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

Example response (200):


content of the pdf
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/{report_id}/rca-overview-pdf

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

Reporting Summary

Index

requires authentication

Get a summary of the reporting status of a wastewater report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/report/1/summary" \
    --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/organisation/1/wastewater/reporting/report/1/summary"
);

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": {
        "testedParameters": 10,
        "passingParameters": 8,
        "failingParameters": 2,
        "complianceRate": 80
    }
}
 

Request      

GET api/organisation/{organisation_id}/wastewater/reporting/report/{report_id}/summary

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

organisation_id   integer     

The ID of the organisation. Example: 1

report_id   integer     

The ID of the report. Example: 1

ZDHC/V1

Organisations

Organisations Index

requires authentication

List all organisations.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/zdhc/v1/organisations?page=1&per_page=4&filter%5Bupdated_at%5D=%3C+2026-09-22+18%3A31%3A42&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/zdhc/v1/organisations"
);

const params = {
    "page": "1",
    "per_page": "4",
    "filter[updated_at]": "< 2026-09-22 18:31:42",
    "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": "4035d4d7-f287-4526-a95b-627747c89608",
            "reference_id": "01-7TXNQR4L9PFH-I",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "status": "approved",
            "type": {
                "id": 2,
                "name": "Supplier"
            },
            "registration_summary": {
                "current_status": "approved",
                "current_status_start_at": null
            },
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address": {
                "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
                "address_2": null,
                "city": "Wenzhou",
                "state": "Zhejiang",
                "postal_code": "",
                "country": "CN",
                "location_name": "China"
            },
            "website": null,
            "primary_contact": {
                "first_name": "JIAN",
                "last_name": "Le",
                "email": "pengye@126.com",
                "phone": ""
            },
            "external_ids": {
                "ZDHC_AID": "A356IB10",
                "OS_HUB": null,
                "PDC_ID": null
            },
            "stats": {
                "connections_count": null,
                "users_count": null
            },
            "comments": {
                "applicant_comment": null,
                "review_comment": null
            },
            "reviewer_comment_category": null,
            "registration_mail_sent_at": null,
            "profile_reviewed_by_user_id": null,
            "profile_reviewed_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "deleted_at": null
        },
        {
            "id": "4035d4d7-f287-4526-a95b-627747c89608",
            "reference_id": "01-7TXNQR4L9PFH-I",
            "uuid": "4035d4d7-f287-4526-a95b-627747c89608",
            "status": "approved",
            "type": {
                "id": 2,
                "name": "Supplier"
            },
            "registration_summary": {
                "current_status": "approved",
                "current_status_start_at": null
            },
            "name": "Ping Yang Pengye Shoes Com Ltd",
            "legal_name": "Ping Yang Pengye Shoes Com Ltd",
            "address": {
                "address_1": "浙江省温州市平阳县万全镇雪之梦(B3)18号厂房",
                "address_2": null,
                "city": "Wenzhou",
                "state": "Zhejiang",
                "postal_code": "",
                "country": "CN",
                "location_name": "China"
            },
            "website": null,
            "primary_contact": {
                "first_name": "JIAN",
                "last_name": "Le",
                "email": "pengye@126.com",
                "phone": ""
            },
            "external_ids": {
                "ZDHC_AID": "A356IB10",
                "OS_HUB": null,
                "PDC_ID": null
            },
            "stats": {
                "connections_count": null,
                "users_count": null
            },
            "comments": {
                "applicant_comment": null,
                "review_comment": null
            },
            "reviewer_comment_category": null,
            "registration_mail_sent_at": null,
            "profile_reviewed_by_user_id": null,
            "profile_reviewed_at": null,
            "created_at": "2021-11-04T12:19:55.000000Z",
            "updated_at": "2026-08-11T15:37:26.000000Z",
            "deleted_at": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/zdhc/v1/organisations

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

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-09-22 18:31:42

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/zdhc/v1/organisation-users?page=1&per_page=7&filter%5Bupdated_at%5D=%3C+2026-10-01+18%3A31%3A42&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/zdhc/v1/organisation-users"
);

const params = {
    "page": "1",
    "per_page": "7",
    "filter[updated_at]": "< 2026-10-01 18:31:42",
    "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": [
        {
            "organisation": {
                "id": "8776e1a8-bd53-4593-af88-5d4c7a696f06",
                "reference_id": "01-P2NEAP93YT3W-C",
                "uuid": "8776e1a8-bd53-4593-af88-5d4c7a696f06",
                "status": "approved"
            },
            "user": {
                "id": 49,
                "reference_id": "02-SL37ZWSJEF99-G",
                "ulid": "01KZRGSQK6BTS67WZBMKRCX7VW",
                "status": "active"
            },
            "role": "ORGANISATION_ADMIN",
            "created_at": "2026-08-11T13:39:38.000000Z",
            "updated_at": "2026-08-11T13:39:38.000000Z",
            "deleted_at": null
        },
        {
            "organisation": {
                "id": "8776e1a8-bd53-4593-af88-5d4c7a696f06",
                "reference_id": "01-P2NEAP93YT3W-C",
                "uuid": "8776e1a8-bd53-4593-af88-5d4c7a696f06",
                "status": "approved"
            },
            "user": {
                "id": 49,
                "reference_id": "02-SL37ZWSJEF99-G",
                "ulid": "01KZRGSQK6BTS67WZBMKRCX7VW",
                "status": "active"
            },
            "role": "ORGANISATION_ADMIN",
            "created_at": "2026-08-11T13:39:38.000000Z",
            "updated_at": "2026-08-11T13:39:38.000000Z",
            "deleted_at": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/zdhc/v1/organisation-users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

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-01 18:31:42

sort   string  optional    

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

Users

Users Index

requires authentication

List all users.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/zdhc/v1/users?page=1&per_page=15&filter%5Bupdated_at%5D=%3D+2026-10-02+18%3A31%3A42&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/zdhc/v1/users"
);

const params = {
    "page": "1",
    "per_page": "15",
    "filter[updated_at]": "= 2026-10-02 18:31:42",
    "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,
            "reference_id": "02-TUGF4Z9EK73J-X",
            "ulid": "01KZRGSQK6BTS67WZBMKRCX7TK",
            "status": "active",
            "first_name": "Amy",
            "last_name": "Huang",
            "email": "amyhuang@ecic.com.tw",
            "phone": "+886910807779",
            "locale": "en-US",
            "location": "TW",
            "location_name": "Taiwan",
            "external_ids": {
                "PDC_ID": null
            },
            "last_active_at": null,
            "email_verified_at": "2017-06-17T04:45:09.000000Z",
            "profile_reviewed_at": null,
            "created_at": "2017-06-17T04:45:09.000000Z",
            "updated_at": "2017-06-17T04:45:09.000000Z",
            "deleted_at": null
        },
        {
            "id": 8,
            "reference_id": "02-TUGF4Z9EK73J-X",
            "ulid": "01KZRGSQK6BTS67WZBMKRCX7TK",
            "status": "active",
            "first_name": "Amy",
            "last_name": "Huang",
            "email": "amyhuang@ecic.com.tw",
            "phone": "+886910807779",
            "locale": "en-US",
            "location": "TW",
            "location_name": "Taiwan",
            "external_ids": {
                "PDC_ID": null
            },
            "last_active_at": null,
            "email_verified_at": "2017-06-17T04:45:09.000000Z",
            "profile_reviewed_at": null,
            "created_at": "2017-06-17T04:45:09.000000Z",
            "updated_at": "2017-06-17T04:45:09.000000Z",
            "deleted_at": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 10,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET api/zdhc/v1/users

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

the page number to show. Example: 1

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-02 18:31:42

sort   string  optional    

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