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=12&sort=id%2Cstatus%2Clab_status%2Ccreated_at%2Corganisation_name&filter%5Bid%5D=eveniet&filter%5Bcreated_at%5D=minus&search=illo&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": "12",
    "sort": "id,status,lab_status,created_at,organisation_name",
    "filter[id]": "eveniet",
    "filter[created_at]": "minus",
    "search": "illo",
    "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"
}
 

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

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,status,lab_status,created_at,organisation_name

filter[id]   string  optional    

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

filter[organisations.name]   string  optional    

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

filter[wastewater_reports.status]   string  optional    

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

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

filter[created_at]   string  optional    

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

search   string  optional    

Search in all of these columns: organisations.name, wastewater_reports.reference_id, wastewater_lab_requests.status, wastewater_reports.status Example: illo

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/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/1/clearstream/2"
);

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": 2,
        "reference_id": "60-HSER7PY6S32L-W",
        "uuid": "a05aba8c-5c93-4e50-91e7-04327509c58d",
        "organisation_id": 64,
        "status": "PASSED",
        "created_at": "2025-11-14T10:16:12.000000Z",
        "updated_at": "2025-11-19T14:24:04.000000Z",
        "archived_at": "2025-11-19 14:24:04",
        "last_viewed_at": "2025-11-19 14:24:00",
        "payment_completed_at": "2025-11-17 13:36:39",
        "organisation": {
            "id": 64,
            "maxio_customer_id": 226048,
            "reference_id": "01-CR6986RX4H7WL-N",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac5b-67a0-445a-b72e-e86db5d454b1",
            "type_id": 2,
            "status": "approved",
            "name": "test-Supplier a.rahman",
            "legal_name": "Hyatt Inc",
            "address_1": "3614 Swaniawski Ports Suite 956",
            "address_2": "Apt. 823",
            "city": "Alfordview",
            "state": "Connecticut",
            "location": "SO",
            "zip": "21152-3340",
            "phone": "+16058376916",
            "email": "nyasia32@reichert.com",
            "contact_first_name": "Priscilla",
            "contact_last_name": "Breitenberg",
            "website": "https://www.ferry.com/praesentium-provident-qui-nostrum-repellendus-animi-explicabo-ut",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": null,
            "registration_mail_sent_at": "1970-02-12 06:44:40",
            "created_at": "2025-07-24T13:23:35.000000Z",
            "updated_at": "2026-02-07T00:00:18.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-01-19 09:42:53",
            "profile_reviewed_by_user_id": 8,
            "location_name": "Somalia"
        },
        "profile": {
            "id": 2,
            "report_id": 2,
            "version_id": 1,
            "requires_testing": 1,
            "completed_at": "2025-11-14 10:16:53",
            "created_at": "2025-11-14T10:16:44.000000Z",
            "updated_at": "2025-11-14T10:16:53.000000Z",
            "attributes": [
                {
                    "id": 1,
                    "external_id": 1,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater 2.2",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 1
                    }
                },
                {
                    "id": 36,
                    "external_id": 1,
                    "group_id": 2,
                    "parent_id": null,
                    "short": null,
                    "name": "Textile",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 36
                    }
                },
                {
                    "id": 52,
                    "external_id": 13,
                    "group_id": 3,
                    "parent_id": null,
                    "short": null,
                    "name": "Vertically integrated Mill",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 52
                    }
                },
                {
                    "id": 53,
                    "external_id": 14,
                    "group_id": 3,
                    "parent_id": null,
                    "short": null,
                    "name": "Down and Feathers processor",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 53
                    }
                },
                {
                    "id": 54,
                    "external_id": 15,
                    "group_id": 3,
                    "parent_id": null,
                    "short": null,
                    "name": "Raw hide/skin to tanned",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 54
                    }
                },
                {
                    "id": 55,
                    "external_id": 16,
                    "group_id": 3,
                    "parent_id": null,
                    "short": null,
                    "name": "Raw hide/skin to crust",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 55
                    }
                },
                {
                    "id": 74,
                    "external_id": 1,
                    "group_id": 4,
                    "parent_id": null,
                    "short": null,
                    "name": "Direct",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 74
                    }
                },
                {
                    "id": 80,
                    "external_id": 0,
                    "group_id": 5,
                    "parent_id": null,
                    "short": null,
                    "name": "less than 15m³ per day",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 80
                    }
                },
                {
                    "id": 82,
                    "external_id": 0,
                    "group_id": 6,
                    "parent_id": null,
                    "short": null,
                    "name": "No",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 82
                    }
                },
                {
                    "id": 91,
                    "external_id": 0,
                    "group_id": 7,
                    "parent_id": null,
                    "short": null,
                    "name": "Not applicable/none",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 91
                    }
                },
                {
                    "id": 98,
                    "external_id": 0,
                    "group_id": 8,
                    "parent_id": null,
                    "short": null,
                    "name": "Not applicable/none",
                    "selectable": 1,
                    "order": null,
                    "pivot": {
                        "profile_id": 2,
                        "attribute_id": 98
                    }
                }
            ]
        }
    }
}
 

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

Terminate

requires authentication

Terminate any ongoing clearstream cycle

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

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=17&filter%5Borganisation_name%5D=modi&filter%5Blevel_name%5D=non&filter%5Bvisibility_visible%5D=&filter%5Bvisibility_active%5D=&filter%5Bvisibility_marketing_text%5D=aut&sort=organisation_name%2Clevel_name%2Cvisibility_visible%2Cvisibility_active%2Cvisibility_marketing_text&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": "17",
    "filter[organisation_name]": "modi",
    "filter[level_name]": "non",
    "filter[visibility_visible]": "0",
    "filter[visibility_active]": "0",
    "filter[visibility_marketing_text]": "aut",
    "sort": "organisation_name,level_name,visibility_visible,visibility_active,visibility_marketing_text",
    "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"
}
 

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

filter[organisation_name]   string  optional    

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

filter[level_name]   string  optional    

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

filter[visibility_visible]   boolean  optional    

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

filter[visibility_active]   boolean  optional    

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

filter[visibility_marketing_text]   string  optional    

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

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,level_name,visibility_visible,visibility_active,visibility_marketing_text

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\": \"vnhftgtpzolx\",
    \"visible\": true,
    \"active\": true,
    \"marketing_text\": \"bgiuqcyztkipvkvgtfyom\"
}"
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": "vnhftgtpzolx",
    "visible": true,
    "active": true,
    "marketing_text": "bgiuqcyztkipvkvgtfyom"
};

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

visible   boolean     

Example: true

active   boolean     

Example: true

marketing_text   string     

Must not be greater than 1024 characters. Example: bgiuqcyztkipvkvgtfyom

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=2&filter%5Borganisation_name%5D=quis&filter%5Blevel_name%5D=molestiae&filter%5Bvisibility_visible%5D=1&filter%5Bvisibility_active%5D=&filter%5Bvisibility_marketing_text%5D=delectus&sort=organisation_name%2Clevel_name%2Cvisibility_visible%2Cvisibility_active%2Cvisibility_marketing_text&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": "2",
    "filter[organisation_name]": "quis",
    "filter[level_name]": "molestiae",
    "filter[visibility_visible]": "1",
    "filter[visibility_active]": "0",
    "filter[visibility_marketing_text]": "delectus",
    "sort": "organisation_name,level_name,visibility_visible,visibility_active,visibility_marketing_text",
    "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"
}
 

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

filter[organisation_name]   string  optional    

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

filter[level_name]   string  optional    

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

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

filter[visibility_marketing_text]   string  optional    

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

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,level_name,visibility_visible,visibility_active,visibility_marketing_text

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=11&filter%5Bid%5D=soluta&filter%5Borganisation_id%5D=quis&filter%5Blast_used_at%5D=iusto&filter%5Bcreated_at%5D=unde&sort=id%2Corganisation_id%2Clast_used_at%2Ccreated_at&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": "11",
    "filter[id]": "soluta",
    "filter[organisation_id]": "quis",
    "filter[last_used_at]": "iusto",
    "filter[created_at]": "unde",
    "sort": "id,organisation_id,last_used_at,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",
};


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"
}
 

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

filter[id]   string  optional    

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

filter[organisation_id]   string  optional    

Filter column organisation_id by any accepted value. Matches exact value. Example: quis

filter[last_used_at]   string  optional    

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

filter[created_at]   string  optional    

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

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,organisation_id,last_used_at,created_at

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/98" \
    --header "Authorization: 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/98"
);

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

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=nostrum&sort=receiving_user_mail%2Creceiving_organisation_type%2Cstatus%2Ccreated_at&page=1&per_page=18&search=porro" \
    --header "Authorization: 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]": "nostrum",
    "sort": "receiving_user_mail,receiving_organisation_type,status,created_at",
    "page": "1",
    "per_page": "18",
    "search": "porro",
};
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-MAKEKAGX8HE9-S",
            "uuid": "a05aa71d-1a73-4ad4-ab85-bfeea70d8d76",
            "inviting_organisation_id": 13416,
            "inviting_user_id": 1,
            "receiving_organisation_id": 13416,
            "receiving_user_id": 1,
            "status": "INVITED",
            "valid_until": "2025-11-21T09:21:52.000000Z",
            "redeemed_at": null,
            "created_at": "2025-11-14T09:21:52.000000Z",
            "updated_at": "2025-11-14T09:21:52.000000Z"
        },
        {
            "id": 1,
            "reference_id": "06-MAKEKAGX8HE9-S",
            "uuid": "a05aa71d-1a73-4ad4-ab85-bfeea70d8d76",
            "inviting_organisation_id": 13416,
            "inviting_user_id": 1,
            "receiving_organisation_id": 13416,
            "receiving_user_id": 1,
            "status": "INVITED",
            "valid_until": "2025-11-21T09:21:52.000000Z",
            "redeemed_at": null,
            "created_at": "2025-11-14T09:21:52.000000Z",
            "updated_at": "2025-11-14T09:21:52.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: 7

filter[status]   string  optional    

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

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,receiving_organisation_type,status,created_at

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

search   string  optional    

Search in all of these columns: receiving_user_mail, receiving_organisation_name Example: porro

User

Index

requires authentication

Get all users.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/admin/users?per_page=18&sort=first_name%2Clast_name%2Cemail%2Cregistration_date%2Clast_active_at%2Cinvitation_status%2Cprofile_reviewed_at&filter%5Binvitation_status%5D=repellendus&filter%5Bprofile_reviewed_at%5D=nostrum&page=1&search=magni" \
    --header "Authorization: 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": "18",
    "sort": "first_name,last_name,email,registration_date,last_active_at,invitation_status,profile_reviewed_at",
    "filter[invitation_status]": "repellendus",
    "filter[profile_reviewed_at]": "nostrum",
    "page": "1",
    "search": "magni",
};
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": "02-TXFQXFYRE4ACK-M",
            "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
            "pdc_id": null,
            "role_id": 2,
            "first_name": "System",
            "last_name": "User",
            "email": "admin@localhost",
            "email_verified_at": null,
            "phone": "+13523381248",
            "location": null,
            "locale": "es_BO",
            "created_at": "2025-07-24T13:23:18.000000Z",
            "updated_at": "2025-12-08T15:12:52.000000Z",
            "deleted_at": null,
            "last_active_at": "2025-12-02T13:51:01.000000Z",
            "profile_reviewed_at": null,
            "status": "active",
            "profile_picture_url": null,
            "location_name": null
        },
        {
            "id": 1,
            "reference_id": "02-TXFQXFYRE4ACK-M",
            "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
            "pdc_id": null,
            "role_id": 2,
            "first_name": "System",
            "last_name": "User",
            "email": "admin@localhost",
            "email_verified_at": null,
            "phone": "+13523381248",
            "location": null,
            "locale": "es_BO",
            "created_at": "2025-07-24T13:23:18.000000Z",
            "updated_at": "2025-12-08T15:12:52.000000Z",
            "deleted_at": null,
            "last_active_at": "2025-12-02T13:51:01.000000Z",
            "profile_reviewed_at": null,
            "status": "active",
            "profile_picture_url": null,
            "location_name": null
        }
    ]
}
 

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

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,last_name,email,registration_date,last_active_at,invitation_status,profile_reviewed_at

filter[invitation_status]   string  optional    

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

filter[profile_reviewed_at]   custom  optional    

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

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: first_name, last_name, email Example: magni

Update

requires authentication

Update a user.

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

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

let body = {
    "first_name": "olsemlxfzxoeznvfhvycxnha",
    "last_name": "gtnjv",
    "email": "yfeest@example.com",
    "phone": "+1234567890",
    "location": "US",
    "locale": "se_FI"
};

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

Body Parameters

first_name   string     

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

last_name   string     

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

email   string     

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

phone   string     

The user's phone number. Must be at least 8 characters. Must not be greater than 20 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: se_FI

Show

requires authentication

Display the specified resource.

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

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

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/1/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/1/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: 1

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\": true
}"
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": true
};

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

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": 1,
        "reference_id": "02-TXFQXFYRE4ACK-M",
        "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
        "pdc_id": null,
        "role_id": 2,
        "first_name": "System",
        "last_name": "User",
        "email": "admin@localhost",
        "email_verified_at": null,
        "phone": "+13523381248",
        "location": null,
        "locale": "es_BO",
        "created_at": "2025-07-24T13:23:18.000000Z",
        "updated_at": "2025-12-08T15:12:52.000000Z",
        "deleted_at": null,
        "last_active_at": "2025-12-02T13:51:01.000000Z",
        "profile_reviewed_at": null,
        "status": "active",
        "profile_picture_url": null,
        "location_name": null,
        "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\": \"reina.pfannerstill@example.com\"
}"
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": "reina.pfannerstill@example.com"
};

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. The email of an existing record in the users table. Example: reina.pfannerstill@example.com

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=quos" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"willard20@example.net\",
    \"token\": \"non\",
    \"password\": \"password\",
    \"password_confirmation\": \"password\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/auth/reset-password"
);

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

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

let body = {
    "email": "willard20@example.net",
    "token": "non",
    "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: quos

Body Parameters

email   string     

The email. Example: willard20@example.net

token   string  optional    

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

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/1/verify-email?signature=illum&expires=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/auth/users/1/verify-email"
);

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

Query Parameters

signature   string     

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

expires   integer     

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

Confirm password

requires authentication

Confirm the password change

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

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

Query Parameters

signature   string     

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

expires   integer     

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

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/1?signature=qui&expires=5" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"qi\",
    \"last_name\": \"pigyaauzkaidjvdpcawas\",
    \"password\": \"`PDqitxgbCClsGe#Qq\",
    \"password_confirmation\": \"totam\",
    \"phone\": \"+49123456789\",
    \"locale\": \"es_CR\",
    \"location\": \"ixoqouobdottgacy\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/auth/complete-registration/1"
);

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

let body = {
    "first_name": "qi",
    "last_name": "pigyaauzkaidjvdpcawas",
    "password": "`PDqitxgbCClsGe#Qq",
    "password_confirmation": "totam",
    "phone": "+49123456789",
    "locale": "es_CR",
    "location": "ixoqouobdottgacy"
};

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

Query Parameters

signature   string     

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

expires   integer     

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

Body Parameters

first_name   string     

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

last_name   string     

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

password   string     

Must not be greater than 255 characters. Example: `PDqitxgbCClsGe#Qq

password_confirmation   string     

The value and password must match. Example: totam

phone   string  optional    

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

locale   string  optional    

Must not be greater than 12 characters. Example: es_CR

location   string  optional    

Must not be greater than 255 characters. Example: ixoqouobdottgacy

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

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=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/azure/v1/chemical-count-bracket"
);

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


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

Request      

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

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

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

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=17" \
    --header "Authorization: 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": "17",
};
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
        }
    ]
}
 

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

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=6&filter%5Bupdated_at%5D=%3D+2026-03-25+14%3A59%3A55&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": "6",
    "filter[updated_at]": "= 2026-03-25 14:59:55",
    "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": 1,
            "ConnectedToId": 1,
            "Status": "active",
            "Published": null,
            "StartDate": "2025-07-24 13:23:42",
            "EndDate": null,
            "LastUpdateDate": "2025-07-24 13:23:42"
        },
        {
            "id": 1,
            "ConnectedFromId": 1,
            "ConnectedToId": 1,
            "Status": "active",
            "Published": null,
            "StartDate": "2025-07-24 13:23:42",
            "EndDate": null,
            "LastUpdateDate": "2025-07-24 13:23:42"
        }
    ],
    "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: 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-03-25 14:59:55

sort   string  optional    

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

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=2" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/azure/v1/material-category"
);

const params = {
    "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 (200):


{
    "data": [
        {
            "Id": 1,
            "MaterialCategoryName": "Wastewater 2.2",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "MaterialCategoryName": "Wastewater 2.2",
            "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: 2

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=%3C%3D+2026-04-16+14%3A59%3A55&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-04-16 14:59:55",
    "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": null,
            "SalesforceId": null,
            "SandboxID": "01-CR698383XMWJ2-P",
            "PdcId": null,
            "Name": "test-Supplier System",
            "LegalName": "Schroeder Ltd",
            "Address1": "149 Koss Dam Suite 796",
            "Address2": "Suite 708",
            "CityName": "Bergemouth",
            "StateName": "Michigan",
            "LocationId": "BW",
            "ZipCode": "26306",
            "Latitude": null,
            "Longitude": null,
            "Phone": "+17728385594",
            "Email": "yessenia18@bahringer.net",
            "Website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "TaxId": null,
            "IPE": null,
            "RegistrationNumber": null,
            "OrganisationDescription": null,
            "ContactFirstName": "Alfonzo",
            "ContactLastName": "Crooks",
            "OrganisationTypeId": 2,
            "OsHubId": null,
            "HiggId": null,
            "CurrentAccountStatusId": null,
            "CreateDate": "2025-07-24 13:23:28",
            "DeleteDate": null,
            "LastUpdateDate": "2026-03-24 08:26:00"
        },
        {
            "Id": 1,
            "ZDHCAid": null,
            "SalesforceId": null,
            "SandboxID": "01-CR698383XMWJ2-P",
            "PdcId": null,
            "Name": "test-Supplier System",
            "LegalName": "Schroeder Ltd",
            "Address1": "149 Koss Dam Suite 796",
            "Address2": "Suite 708",
            "CityName": "Bergemouth",
            "StateName": "Michigan",
            "LocationId": "BW",
            "ZipCode": "26306",
            "Latitude": null,
            "Longitude": null,
            "Phone": "+17728385594",
            "Email": "yessenia18@bahringer.net",
            "Website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "TaxId": null,
            "IPE": null,
            "RegistrationNumber": null,
            "OrganisationDescription": null,
            "ContactFirstName": "Alfonzo",
            "ContactLastName": "Crooks",
            "OrganisationTypeId": 2,
            "OsHubId": null,
            "HiggId": null,
            "CurrentAccountStatusId": null,
            "CreateDate": "2025-07-24 13:23:28",
            "DeleteDate": null,
            "LastUpdateDate": "2026-03-24 08:26: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/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-04-16 14:59:55

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=16&filter%5Bupdated_at%5D=%3E%3D+2026-04-11+14%3A59%3A55&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": "16",
    "filter[updated_at]": ">= 2026-04-11 14:59:55",
    "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-TXFQXFYRE4ACK-M",
            "OrganisationId": "01-CR698383XMWJ2-P",
            "RoleId": 4,
            "StartDate": "2025-07-24 13:23:28",
            "EndDate": null,
            "LastUpdateDate": "2025-12-02 13:51:01"
        },
        {
            "Id": 1,
            "UserId": "02-TXFQXFYRE4ACK-M",
            "OrganisationId": "01-CR698383XMWJ2-P",
            "RoleId": 4,
            "StartDate": "2025-07-24 13:23:28",
            "EndDate": null,
            "LastUpdateDate": "2025-12-02 13:51: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/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: 16

filter[updated_at]   datetime  optional    

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

sort   string  optional    

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

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=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/processes"
);

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": 1,
            "ProcessName": "Wastewater 2.2",
            "CreateDate": null,
            "LastUpdateDate": null
        },
        {
            "Id": 1,
            "ProcessName": "Wastewater 2.2",
            "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: 4

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=2&filter%5Bupdated_at%5D=%3D+2026-04-05+14%3A59%3A55&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": "2",
    "filter[updated_at]": "= 2026-04-05 14:59:55",
    "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": 10,
            "ProductCategoryName": "Colorant",
            "CreateDate": "2025-12-16 10:02:53",
            "LastUpdateDate": "2025-12-16 10:02:53"
        },
        {
            "Id": 10,
            "ProductCategoryName": "Colorant",
            "CreateDate": "2025-12-16 10:02:53",
            "LastUpdateDate": "2025-12-16 10:02: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-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: 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-04-05 14:59:55

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-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=2" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/azure/v1/profile-supplier-product-category"
);

const params = {
    "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 (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: 2

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=7&filter%5Bupdated_at%5D=%3D+2026-04-23+14%3A59%3A56&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": "7",
    "filter[updated_at]": "= 2026-04-23 14:59:56",
    "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,
            "SupplierTypeId": 8,
            "CreateDate": "2025-11-14 09:22:11",
            "LastUpdateDate": "2025-11-14 09:22:11"
        },
        {
            "Id": 1,
            "OrganisationId": 1,
            "SupplierTypeId": 8,
            "CreateDate": "2025-11-14 09:22:11",
            "LastUpdateDate": "2025-11-14 09:22:11"
        }
    ],
    "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-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: 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-04-23 14:59:56

sort   string  optional    

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

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=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/azure/v1/supplier-type"
);

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


{
    "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: 10

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=14&filter%5Bupdated_at%5D=%3C+2026-04-02+14%3A59%3A56&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": "14",
    "filter[updated_at]": "< 2026-04-02 14:59:56",
    "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-TXFQXFYRE4ACK-M",
            "FirstName": "System",
            "LastName": "User",
            "FullName": "System User",
            "IsActive": true,
            "Email": "admin@localhost",
            "Phone": "+13523381248",
            "Address1": null,
            "Address2": null,
            "StateName": null,
            "CityName": null,
            "ZipCode": null,
            "LocationId": null,
            "CreateDate": "2025-07-24 13:23:18",
            "DeleteDate": null,
            "LastUpdateDate": "2025-12-08 15:12:52"
        },
        {
            "Id": 1,
            "UserId": "02-TXFQXFYRE4ACK-M",
            "FirstName": "System",
            "LastName": "User",
            "FullName": "System User",
            "IsActive": true,
            "Email": "admin@localhost",
            "Phone": "+13523381248",
            "Address1": null,
            "Address2": null,
            "StateName": null,
            "CityName": null,
            "ZipCode": null,
            "LocationId": null,
            "CreateDate": "2025-07-24 13:23:18",
            "DeleteDate": null,
            "LastUpdateDate": "2025-12-08 15:12:52"
        }
    ],
    "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: 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-04-02 14:59:56

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 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",
        "created_at": "2025-12-11T13:11:46.000000Z",
        "updated_at": "2025-12-15T15:35:08.000000Z"
    }
}
 

Request      

GET api/ctz-levels

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

CTZ Standards

Index

requires authentication

Get CTZ Standards

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-standard?per_page=9&page=1&filter%5Bctz_level_id%5D=14&filter%5Bstatus%5D=vel&filter%5Bstart_date%5D=facere&filter%5Bend_date%5D=sunt&filter%5Bcreated_at%5D=corporis&filter%5Bupdated_at%5D=dicta&search=aut&sort=name%2Cversion%2Cstatus%2Cstart_date%2Cend_date%2Ccreated_at%2Cupdated_at&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-standard"
);

const params = {
    "per_page": "9",
    "page": "1",
    "filter[ctz_level_id]": "14",
    "filter[status]": "vel",
    "filter[start_date]": "facere",
    "filter[end_date]": "sunt",
    "filter[created_at]": "corporis",
    "filter[updated_at]": "dicta",
    "search": "aut",
    "sort": "name,version,status,start_date,end_date,created_at,updated_at",
    "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": 47,
            "name": "Foundational",
            "version": "3.1",
            "ctz_level_id": 1,
            "start_date": "2026-01-01T00:00:00.000000Z",
            "end_date": null,
            "status": "PASSED",
            "expired_at": null,
            "created_at": "2026-02-24T13:24:56.000000Z",
            "updated_at": "2026-02-24T13:25:36.000000Z",
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "created_at": "2025-12-11T13:11:46.000000Z",
                "updated_at": "2025-12-15T15:35:08.000000Z"
            },
            "organisations": [
                {
                    "id": 87,
                    "maxio_customer_id": 226066,
                    "reference_id": "01-8J36F3RPYYK3T-X",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac5e-883a-40ed-9db4-c98abf3da6a2",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies vdhoek",
                    "legal_name": "Pfannerstill Inc",
                    "address_1": "38558 Russel Street",
                    "address_2": "Suite 630",
                    "city": "North Pattieshire",
                    "state": "Wyoming",
                    "location": "LK",
                    "zip": "92199-6406",
                    "phone": "+13213459957",
                    "email": "mohamed19@douglas.com",
                    "contact_first_name": "Jamel",
                    "contact_last_name": "Wilderman",
                    "website": "http://www.morar.com/qui-repudiandae-suscipit-accusantium",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1990-01-10 10:28:39",
                    "created_at": "2025-07-24T13:23:38.000000Z",
                    "updated_at": "2026-02-07T00:00:22.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-26 13:32:55",
                    "profile_reviewed_by_user_id": 10,
                    "location_name": "Sri Lanka",
                    "pivot": {
                        "ctz_standard_id": 47,
                        "organisation_id": 87,
                        "id": 291,
                        "valid_until": null,
                        "created_at": "2026-02-24T13:24:57.000000Z",
                        "updated_at": "2026-02-24T13:24:57.000000Z"
                    }
                }
            ]
        },
        {
            "id": 47,
            "name": "Foundational",
            "version": "3.1",
            "ctz_level_id": 1,
            "start_date": "2026-01-01T00:00:00.000000Z",
            "end_date": null,
            "status": "PASSED",
            "expired_at": null,
            "created_at": "2026-02-24T13:24:56.000000Z",
            "updated_at": "2026-02-24T13:25:36.000000Z",
            "ctz_level": {
                "id": 1,
                "name": "Foundational",
                "created_at": "2025-12-11T13:11:46.000000Z",
                "updated_at": "2025-12-15T15:35:08.000000Z"
            },
            "organisations": [
                {
                    "id": 87,
                    "maxio_customer_id": 226066,
                    "reference_id": "01-8J36F3RPYYK3T-X",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac5e-883a-40ed-9db4-c98abf3da6a2",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies vdhoek",
                    "legal_name": "Pfannerstill Inc",
                    "address_1": "38558 Russel Street",
                    "address_2": "Suite 630",
                    "city": "North Pattieshire",
                    "state": "Wyoming",
                    "location": "LK",
                    "zip": "92199-6406",
                    "phone": "+13213459957",
                    "email": "mohamed19@douglas.com",
                    "contact_first_name": "Jamel",
                    "contact_last_name": "Wilderman",
                    "website": "http://www.morar.com/qui-repudiandae-suscipit-accusantium",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1990-01-10 10:28:39",
                    "created_at": "2025-07-24T13:23:38.000000Z",
                    "updated_at": "2026-02-07T00:00:22.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-26 13:32:55",
                    "profile_reviewed_by_user_id": 10,
                    "location_name": "Sri Lanka",
                    "pivot": {
                        "ctz_standard_id": 47,
                        "organisation_id": 87,
                        "id": 291,
                        "valid_until": null,
                        "created_at": "2026-02-24T13:24:57.000000Z",
                        "updated_at": "2026-02-24T13:24:57.000000Z"
                    }
                }
            ]
        }
    ]
}
 

Request      

GET api/organisation/{organisation_id}/chemical/certification/ctz-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: 9

page   integer  optional    

the page number to show. Example: 1

filter[ctz_level_id]   integer  optional    

Filter column ctz_level_id by any accepted value. Filter by CTZ level ID Example: 14

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

filter[start_date]   date  optional    

Filter column start_date by any accepted value. Filter by start date Example: facere

filter[end_date]   date  optional    

Filter column end_date by any accepted value. Filter by end date Example: sunt

filter[created_at]   datetime  optional    

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

filter[updated_at]   datetime  optional    

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

search   string  optional    

Search in all of these columns: name, version Example: aut

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,version,status,start_date,end_date,created_at,updated_at

column   string  optional    

get a distinct list of filterable values for any of the columns: name, version, status, ctz_level_id. Example: name

Show

requires authentication

Show a CTZ Standard

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

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": 47,
        "name": "Foundational",
        "version": "3.1",
        "ctz_level_id": 1,
        "start_date": "2026-01-01T00:00:00.000000Z",
        "end_date": null,
        "status": "PASSED",
        "expired_at": null,
        "created_at": "2026-02-24T13:24:56.000000Z",
        "updated_at": "2026-02-24T13:25:36.000000Z",
        "ctz_level": {
            "id": 1,
            "name": "Foundational",
            "created_at": "2025-12-11T13:11:46.000000Z",
            "updated_at": "2025-12-15T15:35:08.000000Z"
        },
        "organisations": [
            {
                "id": 87,
                "maxio_customer_id": 226066,
                "reference_id": "01-8J36F3RPYYK3T-X",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac5e-883a-40ed-9db4-c98abf3da6a2",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies vdhoek",
                "legal_name": "Pfannerstill Inc",
                "address_1": "38558 Russel Street",
                "address_2": "Suite 630",
                "city": "North Pattieshire",
                "state": "Wyoming",
                "location": "LK",
                "zip": "92199-6406",
                "phone": "+13213459957",
                "email": "mohamed19@douglas.com",
                "contact_first_name": "Jamel",
                "contact_last_name": "Wilderman",
                "website": "http://www.morar.com/qui-repudiandae-suscipit-accusantium",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1990-01-10 10:28:39",
                "created_at": "2025-07-24T13:23:38.000000Z",
                "updated_at": "2026-02-07T00:00:22.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-01-26 13:32:55",
                "profile_reviewed_by_user_id": 10,
                "location_name": "Sri Lanka",
                "pivot": {
                    "ctz_standard_id": 47,
                    "organisation_id": 87,
                    "id": 291,
                    "valid_until": null,
                    "created_at": "2026-02-24T13:24:57.000000Z",
                    "updated_at": "2026-02-24T13:24:57.000000Z"
                }
            }
        ]
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/certification/ctz-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 ctz standard. Example: 47

Store

requires authentication

Create a new CTZ Standard

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-standard" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"itxomzxgedsh\",
    \"version\": \"vplsgyoh\",
    \"start_date\": \"2026-03-24T14:59:56\",
    \"end_date\": \"2026-03-24T14:59:56\",
    \"status\": \"FAILED\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-standard"
);

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

let body = {
    "name": "itxomzxgedsh",
    "version": "vplsgyoh",
    "start_date": "2026-03-24T14:59:56",
    "end_date": "2026-03-24T14:59:56",
    "status": "FAILED"
};

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

Example response (200):


{
    "data": {
        "id": 47,
        "name": "Foundational",
        "version": "3.1",
        "ctz_level_id": 1,
        "start_date": "2026-01-01T00:00:00.000000Z",
        "end_date": null,
        "status": "PASSED",
        "expired_at": null,
        "created_at": "2026-02-24T13:24:56.000000Z",
        "updated_at": "2026-02-24T13:25:36.000000Z"
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/certification/ctz-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: itxomzxgedsh

version   string     

Must not be greater than 255 characters. Example: vplsgyoh

organisations   string[]  optional    

The id of an existing record in the organisations table.

ctz_level_id   string  optional    

The id of an existing record in the ctz_levels table.

start_date   string     

Must be a valid date. Example: 2026-03-24T14:59:56

end_date   string  optional    

Must be a valid date. Example: 2026-03-24T14:59:56

status   string     

Example: FAILED

Must be one of:
  • FAILED
  • PASSED

Update

requires authentication

Update a CTZ Standard

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-standard/47" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"fywnjrszigujnbvakfufv\",
    \"version\": \"zr\",
    \"start_date\": \"2026-03-24T14:59:56\",
    \"end_date\": \"2026-03-24T14:59:56\",
    \"status\": \"FAILED\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-standard/47"
);

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

let body = {
    "name": "fywnjrszigujnbvakfufv",
    "version": "zr",
    "start_date": "2026-03-24T14:59:56",
    "end_date": "2026-03-24T14:59:56",
    "status": "FAILED"
};

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

Example response (200):


{
    "data": {
        "id": 47,
        "name": "Foundational",
        "version": "3.1",
        "ctz_level_id": 1,
        "start_date": "2026-01-01T00:00:00.000000Z",
        "end_date": null,
        "status": "PASSED",
        "expired_at": null,
        "created_at": "2026-02-24T13:24:56.000000Z",
        "updated_at": "2026-02-24T13:25:36.000000Z"
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/certification/ctz-standard/{id}

PATCH api/organisation/{organisation_id}/chemical/certification/ctz-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 ctz standard. Example: 47

Body Parameters

name   string     

Must not be greater than 255 characters. Example: fywnjrszigujnbvakfufv

version   string     

Must not be greater than 255 characters. Example: zr

organisations   string[]  optional    

The id of an existing record in the organisations table.

ctz_level_id   string  optional    

The id of an existing record in the ctz_levels table.

start_date   string     

Must be a valid date. Example: 2026-03-24T14:59:56

end_date   string  optional    

Must be a valid date. Example: 2026-03-24T14:59:56

status   string     

Example: FAILED

Must be one of:
  • FAILED
  • PASSED

Destroy

requires authentication

Delete a CTZ Standard

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/ctz-standard/47" \
    --header "Authorization: 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-standard/47"
);

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_id}/chemical/certification/ctz-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 ctz standard. Example: 47

Chemical

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%2Ccontext-%3Eproduct_name%2Ccontext-%3Emrsl_standard_name%2Ccontext-%3Ectz_standard_name%2Ccontext-%3Eaction_type%2Ccontext-%3Euser_name%2Ccontext-%3Eorganisation_id%2Cmessage%2Ccreated_at&filter%5Bproduct_id%5D=11&filter%5Bproduct_reference_id%5D=excepturi&filter%5Bmrsl_standard_name%5D=ut&filter%5Bmrsl_standard_reference_id%5D=enim&filter%5Bctz_standard_name%5D=sed&filter%5Baction_type%5D=saepe&filter%5Buser_name%5D=perferendis&filter%5Bcreated_at%5D=sequi&column=context-%3Eproduct_id&search=saepe&page=1&per_page=15" \
    --header "Authorization: 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,context->product_name,context->mrsl_standard_name,context->ctz_standard_name,context->action_type,context->user_name,context->organisation_id,message,created_at",
    "filter[product_id]": "11",
    "filter[product_reference_id]": "excepturi",
    "filter[mrsl_standard_name]": "ut",
    "filter[mrsl_standard_reference_id]": "enim",
    "filter[ctz_standard_name]": "sed",
    "filter[action_type]": "saepe",
    "filter[user_name]": "perferendis",
    "filter[created_at]": "sequi",
    "column": "context->product_id",
    "search": "saepe",
    "page": "1",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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


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"
}
 

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_standard_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,context->product_name,context->mrsl_standard_name,context->ctz_standard_name,context->action_type,context->user_name,context->organisation_id,message,created_at

filter[product_id]   integer  optional    

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

filter[product_reference_id]   string  optional    

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

filter[mrsl_standard_name]   string  optional    

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

filter[mrsl_standard_reference_id]   string  optional    

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

filter[ctz_standard_name]   string  optional    

Filter column ctz_standard_name by any accepted value. Filter by CTZ standard name Example: sed

filter[action_type]   string  optional    

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

filter[user_name]   string  optional    

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

filter[created_at]   datetime  optional    

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

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_standard_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 Example: saepe

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

Inventory

Bulk Store

requires authentication

Store a new chemical inventory bulk

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\": 6,
            \"month\": 1,
            \"submit\": true,
            \"products\": [
                {
                    \"chemical_product_id\": 12,
                    \"formulator_name\": \"eflbbirxdwtyzqcvinuexihto\",
                    \"name\": \"atque\",
                    \"weight\": 34
                }
            ]
        }
    ]
}"
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": 6,
            "month": 1,
            "submit": true,
            "products": [
                {
                    "chemical_product_id": 12,
                    "formulator_name": "eflbbirxdwtyzqcvinuexihto",
                    "name": "atque",
                    "weight": 34
                }
            ]
        }
    ]
};

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

month   integer     

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

submit   boolean  optional    

Example: true

products   object[]  optional    
chemical_product_id   integer  optional    

This field is required when name is not present. The id of an existing record in the chemical_products table. Example: 12

formulator_name   string     

Must not be greater than 255 characters. Example: eflbbirxdwtyzqcvinuexihto

name   string  optional    

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

weight   number     

Must be at least 0. Example: 34

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=4&filter%5Bid%5D=10&filter%5Bsupplier_id%5D=20&filter%5Byear%5D=19&filter%5Bmonth%5D=12&filter%5Bstatus%5D=consequatur&sort=year%2Cmonth%2Cstatus%2Csubmitting_organisation_name%2Cincheck_level_name%2Cproducts_count&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": "4",
    "filter[id]": "10",
    "filter[supplier_id]": "20",
    "filter[year]": "19",
    "filter[month]": "12",
    "filter[status]": "consequatur",
    "sort": "year,month,status,submitting_organisation_name,incheck_level_name,products_count",
    "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"
}
 

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

filter[id]   integer  optional    

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

filter[supplier_id]   integer  optional    

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

filter[year]   integer  optional    

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

filter[month]   integer  optional    

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

filter[status]   string  optional    

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

filter[organisations.name]   string  optional    

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

filter[incheck_levels.name]   string  optional    

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

sort   string  optional    

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

page   integer  optional    

the page number to show. Example: 1

Store

requires authentication

Store a new chemical inventory

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"year\": 8,
    \"month\": 9,
    \"submit\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory"
);

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

let body = {
    "year": 8,
    "month": 9,
    "submit": false
};

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

Request      

POST 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

Body Parameters

year   integer     

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

month   integer     

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

submit   boolean  optional    

Example: false

Update

requires authentication

Update an existing chemical inventory

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"year\": 16,
    \"month\": 5,
    \"submit\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/1"
);

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

let body = {
    "year": 16,
    "month": 5,
    "submit": false
};

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

Request      

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

PATCH api/organisation/{organisation_reference_id}/chemical/inventory/{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

id   integer     

The ID of the inventory. Example: 1

Body Parameters

year   integer     

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

month   integer     

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

submit   boolean  optional    

Example: false

Decline

requires authentication

Decline a chemical inventory

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

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

let body = {
    "reason": "Incomplete product information",
    "additional_info": "voluptatum"
};

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

Request      

POST api/organisation/{organisation_reference_id}/chemical/inventory/{inventory_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

inventory_id   integer     

The ID of the inventory. Example: 1

Body Parameters

reason   string     

Example: Incomplete product information

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

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/1/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/1/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/{inventory_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

inventory_id   integer     

The ID of the inventory. Example: 1

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/soluta/product?per_page=18&search=ut&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/soluta/product"
);

const params = {
    "per_page": "18",
    "search": "ut",
    "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: Precognition, Origin
 

{
    "message": "Token not found"
}
 

Request      

GET api/organisation/{organisation_reference_id}/chemical/inventory/{supplier_inventory_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

supplier_inventory_id   string     

The ID of the supplier inventory. Example: soluta

Query Parameters

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 Example: ut

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/at/product" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"chemical_product_id\": 15,
    \"formulator_name\": \"omatilgtjslsvz\",
    \"name\": \"adipisci\",
    \"weight\": 59
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/inventory/at/product"
);

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

let body = {
    "chemical_product_id": 15,
    "formulator_name": "omatilgtjslsvz",
    "name": "adipisci",
    "weight": 59
};

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

Request      

POST api/organisation/{organisation_reference_id}/chemical/inventory/{supplier_inventory_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

supplier_inventory_id   string     

The ID of the supplier inventory. Example: at

Body Parameters

chemical_product_id   integer  optional    

This field is required when name is not present. The id of an existing record in the chemical_products table. Example: 15

formulator_name   string     

Must not be greater than 255 characters. Example: omatilgtjslsvz

name   string  optional    

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

weight   number     

Must be at least 0. Example: 59

Update

requires authentication

Update a custom product

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

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

let body = {
    "chemical_product_id": 4,
    "formulator_name": "cbwbksffsipzpnlnkv",
    "name": "molestiae",
    "weight": 15
};

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

Request      

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

PATCH api/organisation/{organisation_reference_id}/chemical/inventory/{supplier_inventory_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

supplier_inventory_id   string     

The ID of the supplier inventory. Example: quis

id   integer     

The ID of the product. Example: 1

Body Parameters

chemical_product_id   integer  optional    

This field is required when name is not present. The id of an existing record in the chemical_products table. Example: 4

formulator_name   string     

Must not be greater than 255 characters. Example: cbwbksffsipzpnlnkv

name   string  optional    

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

weight   number     

Must be at least 0. Example: 15

Destroy

requires authentication

Destroy a custom product

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

supplier_inventory_id   string     

The ID of the supplier inventory. Example: necessitatibus

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=8&page=1&filter%5Bconformance_level_id%5D=6&filter%5Bctz_level_id%5D=9&search=qui&sort=chemical_products.id%2Cchemical_products.name%2Cchemical_products.version%2Cchemical_products.status%2Cchemical_products.zdhc_pid%2Cconformance_level_name%2Cctz_level_name%2Cchemical_products.created_at%2Cchemical_products.updated_at&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": "8",
    "page": "1",
    "filter[conformance_level_id]": "6",
    "filter[ctz_level_id]": "9",
    "search": "qui",
    "sort": "chemical_products.id,chemical_products.name,chemical_products.version,chemical_products.status,chemical_products.zdhc_pid,conformance_level_name,ctz_level_name,chemical_products.created_at,chemical_products.updated_at",
    "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-NTNRYDE6A32E-I",
            "organisation_id": 5,
            "zdhc_pid": null,
            "name": "sed",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:28.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "DRAFT",
            "technical_data_sheet_url": "",
            "conformance_level": null,
            "ctz_level": null
        },
        {
            "id": 1,
            "reference_id": "20-NTNRYDE6A32E-I",
            "organisation_id": 5,
            "zdhc_pid": null,
            "name": "sed",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:28.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "DRAFT",
            "technical_data_sheet_url": "",
            "conformance_level": null,
            "ctz_level": null
        }
    ]
}
 

Request      

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

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

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

filter[chemical_products.zdhc_pid]   integer  optional    

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

filter[chemical_products.status]   string  optional    

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

filter[conformance_level_id]   integer  optional    

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

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

filter[chemical_products.updated_at]   datetime  optional    

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

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

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

search   string  optional    

Search in all of these columns: chemical_products.name, chemical_products.alternate_names, chemical_products.zdhc_pid Example: qui

sort   string  optional    

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

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, ctz_level_name, conformance_level_name, chemical_products.created_at, chemical_products.updated_at. Example: chemical_products.id

Show

requires authentication

Show a product

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/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/product/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": "20-NTNRYDE6A32E-I",
        "organisation_id": 5,
        "zdhc_pid": null,
        "name": "sed",
        "version": 1,
        "description": null,
        "alternate_names": null,
        "created_at": "2025-11-14T09:43:25.000000Z",
        "updated_at": "2026-03-05T14:31:28.000000Z",
        "conformance_level_id": null,
        "ctz_level_id": null,
        "status": "DRAFT",
        "technical_data_sheet_url": "",
        "organisation": {
            "id": 5,
            "reference_id": "01-9YKA6G6TQSUTU-T",
            "type_id": 6,
            "name": "test-Chemical formulator System",
            "address_1": "85608 Bridie Highway",
            "address_2": "Apt. 403",
            "city": "Port Eloisa",
            "state": "Louisiana",
            "location": "SY",
            "zip": "69515",
            "phone": "+13345405228",
            "email": "goyette.diamond@schulist.com",
            "website": "http://www.torp.com/",
            "avatar_url": null,
            "location_name": "Syria"
        },
        "conformance_level": null,
        "ctz_level": null,
        "highest_mrsl_certification": null,
        "highest_ctz_certification": null,
        "certification_body_assignments": [],
        "safety_data_sheets": [],
        "certified_safety_data_sheets": [],
        "use_types": [],
        "activity_logs": []
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/product/{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. Example: 1

Store

requires authentication

Store a product

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=vqk"\
    --form "description=Ab tempora ut eius nihil porro itaque ut nam."\
    --form "alternate_names[]=qcbc"\
    --form "use_types[]=19"\
    --form "certification_bodies[]=17"\
    --form "safety_data_sheet=@/tmp/phpHEJFdC" \
    --form "technical_data_sheet=@/tmp/phpnOCboC" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product"
);

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

const body = new FormData();
body.append('name', 'vqk');
body.append('description', 'Ab tempora ut eius nihil porro itaque ut nam.');
body.append('alternate_names[]', 'qcbc');
body.append('use_types[]', '19');
body.append('certification_bodies[]', '17');
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);
body.append('technical_data_sheet', document.querySelector('input[name="technical_data_sheet"]').files[0]);

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

Example response (200):


{
    "data": {
        "id": 1,
        "reference_id": "20-NTNRYDE6A32E-I",
        "organisation_id": 5,
        "zdhc_pid": null,
        "name": "sed",
        "version": 1,
        "description": null,
        "alternate_names": null,
        "created_at": "2025-11-14T09:43:25.000000Z",
        "updated_at": "2026-03-05T14:31:28.000000Z",
        "conformance_level_id": null,
        "ctz_level_id": null,
        "status": "DRAFT",
        "technical_data_sheet_url": "",
        "organisation": {
            "id": 5,
            "reference_id": "01-9YKA6G6TQSUTU-T",
            "type_id": 6,
            "name": "test-Chemical formulator System",
            "address_1": "85608 Bridie Highway",
            "address_2": "Apt. 403",
            "city": "Port Eloisa",
            "state": "Louisiana",
            "location": "SY",
            "zip": "69515",
            "phone": "+13345405228",
            "email": "goyette.diamond@schulist.com",
            "website": "http://www.torp.com/",
            "avatar_url": null,
            "location_name": "Syria"
        },
        "conformance_level": null,
        "ctz_level": null,
        "highest_mrsl_certification": null,
        "highest_ctz_certification": null,
        "certification_body_assignments": [],
        "safety_data_sheets": [],
        "certified_safety_data_sheets": [],
        "use_types": [],
        "activity_logs": []
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/product

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     

Must not be greater than 255 characters. Example: vqk

description   string  optional    

Must not be greater than 512 characters. Example: Ab tempora ut eius nihil porro itaque ut nam.

alternate_names   string[]  optional    

Must not be greater than 255 characters.

use_types   integer[]     

The id of an existing record in the product_use_types table.

certification_bodies   integer[]  optional    

The id of an existing record in the organisations table.

safety_data_sheet   file     

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpHEJFdC

technical_data_sheet   file  optional    

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpnOCboC

Update

requires authentication

Update a product

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=sfxdzbnlrivygr"\
    --form "description=Aliquid eos et et neque porro."\
    --form "alternate_names[]=xgapjgnepwqmf"\
    --form "use_types[]=5"\
    --form "certification_bodies[]=13"\
    --form "safety_data_sheet=@/tmp/phpkdBiDE" \
    --form "technical_data_sheet=@/tmp/phpIPHoDE" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/1"
);

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

const body = new FormData();
body.append('name', 'sfxdzbnlrivygr');
body.append('description', 'Aliquid eos et et neque porro.');
body.append('alternate_names[]', 'xgapjgnepwqmf');
body.append('use_types[]', '5');
body.append('certification_bodies[]', '13');
body.append('safety_data_sheet', document.querySelector('input[name="safety_data_sheet"]').files[0]);
body.append('technical_data_sheet', document.querySelector('input[name="technical_data_sheet"]').files[0]);

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

Example response (200):


{
    "data": {
        "id": 1,
        "reference_id": "20-NTNRYDE6A32E-I",
        "organisation_id": 5,
        "zdhc_pid": null,
        "name": "sed",
        "version": 1,
        "description": null,
        "alternate_names": null,
        "created_at": "2025-11-14T09:43:25.000000Z",
        "updated_at": "2026-03-05T14:31:28.000000Z",
        "conformance_level_id": null,
        "ctz_level_id": null,
        "status": "DRAFT",
        "technical_data_sheet_url": "",
        "organisation": {
            "id": 5,
            "reference_id": "01-9YKA6G6TQSUTU-T",
            "type_id": 6,
            "name": "test-Chemical formulator System",
            "address_1": "85608 Bridie Highway",
            "address_2": "Apt. 403",
            "city": "Port Eloisa",
            "state": "Louisiana",
            "location": "SY",
            "zip": "69515",
            "phone": "+13345405228",
            "email": "goyette.diamond@schulist.com",
            "website": "http://www.torp.com/",
            "avatar_url": null,
            "location_name": "Syria"
        },
        "conformance_level": null,
        "ctz_level": null,
        "highest_mrsl_certification": null,
        "highest_ctz_certification": null,
        "certification_body_assignments": [],
        "safety_data_sheets": [],
        "certified_safety_data_sheets": [],
        "use_types": [],
        "activity_logs": []
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/product/{id}

PATCH api/organisation/{organisation_id}/chemical/product/{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

id   integer     

The ID of the product. Example: 1

Body Parameters

name   string     

Must not be greater than 255 characters. Example: sfxdzbnlrivygr

description   string  optional    

Must not be greater than 512 characters. Example: Aliquid eos et et neque porro.

alternate_names   string[]  optional    

Must not be greater than 255 characters.

use_types   integer[]     

The id of an existing record in the product_use_types table.

certification_bodies   integer[]  optional    

The id of an existing record in the organisations table.

safety_data_sheet   file     

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpkdBiDE

technical_data_sheet   file  optional    

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpIPHoDE

Toggle Publish

requires authentication

Toggle the publish status of a product

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

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": {
        "id": 1,
        "reference_id": "20-NTNRYDE6A32E-I",
        "organisation_id": 5,
        "zdhc_pid": null,
        "name": "sed",
        "version": 1,
        "description": null,
        "alternate_names": null,
        "created_at": "2025-11-14T09:43:25.000000Z",
        "updated_at": "2026-03-05T14:31:28.000000Z",
        "conformance_level_id": null,
        "ctz_level_id": null,
        "status": "DRAFT",
        "technical_data_sheet_url": "",
        "organisation": {
            "id": 5,
            "reference_id": "01-9YKA6G6TQSUTU-T",
            "type_id": 6,
            "name": "test-Chemical formulator System",
            "address_1": "85608 Bridie Highway",
            "address_2": "Apt. 403",
            "city": "Port Eloisa",
            "state": "Louisiana",
            "location": "SY",
            "zip": "69515",
            "phone": "+13345405228",
            "email": "goyette.diamond@schulist.com",
            "website": "http://www.torp.com/",
            "avatar_url": null,
            "location_name": "Syria"
        },
        "conformance_level": null,
        "ctz_level": null,
        "highest_mrsl_certification": null,
        "highest_ctz_certification": null,
        "certification_body_assignments": [],
        "safety_data_sheets": [],
        "certified_safety_data_sheets": [],
        "use_types": [],
        "activity_logs": []
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/product/{product_id}/toggle-publish

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

Destroy

requires authentication

Destroy a product

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

Example response (200):


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

Request      

DELETE api/organisation/{organisation_id}/chemical/product/{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. Example: 1

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_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_id   integer     

The ID of the organisation. 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_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_id   integer     

The ID of the organisation. 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_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_id   integer     

The ID of the organisation. 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,
        "organisation": {
            "id": 5,
            "reference_id": "01-9YKA6G6TQSUTU-T",
            "type_id": 6,
            "name": "test-Chemical formulator System",
            "address_1": "85608 Bridie Highway",
            "address_2": "Apt. 403",
            "city": "Port Eloisa",
            "state": "Louisiana",
            "location": "SY",
            "zip": "69515",
            "phone": "+13345405228",
            "email": "goyette.diamond@schulist.com",
            "website": "http://www.torp.com/",
            "avatar_url": null,
            "location_name": "Syria"
        },
        "name": "sed",
        "description": null,
        "alternate_names": null,
        "version": 1,
        "status": "DRAFT",
        "technical_data_sheet_url": null,
        "conformance_level": null,
        "ctz_level": null,
        "use_types": [],
        "sds_visibility": null
    }
}
 

Request      

GET api/organisation/{organisation_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_id   integer     

The ID of the organisation. 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_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_id   integer     

The ID of the organisation. Example: 1

product_id   integer     

The ID of the product. Example: 1

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=5&page=1&filter%5Bname%5D=et&filter%5Bzdhc_pid%5D=2&filter%5Bstatus%5D=vel&filter%5Bassignment_status%5D=facilis&filter%5Borganisation_id%5D=5&filter%5Bmax_conformance_level_id%5D=14&filter%5Bmax_ctz_level_id%5D=6&filter%5Bcreated_at%5D=qui&filter%5Bupdated_at%5D=et&search=neque&sort=id%2Cname%2Cversion%2Cstatus%2Cassignment_status%2Czdhc_pid%2Cconformance_level_name%2Cctz_level_name%2Ccreated_at%2Cupdated_at&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": "5",
    "page": "1",
    "filter[name]": "et",
    "filter[zdhc_pid]": "2",
    "filter[status]": "vel",
    "filter[assignment_status]": "facilis",
    "filter[organisation_id]": "5",
    "filter[max_conformance_level_id]": "14",
    "filter[max_ctz_level_id]": "6",
    "filter[created_at]": "qui",
    "filter[updated_at]": "et",
    "search": "neque",
    "sort": "id,name,version,status,assignment_status,zdhc_pid,conformance_level_name,ctz_level_name,created_at,updated_at",
    "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-NTNRYDE6A32E-I",
            "organisation_id": 5,
            "zdhc_pid": null,
            "name": "sed",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:28.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "DRAFT",
            "technical_data_sheet_url": "",
            "conformance_level": null,
            "ctz_level": null
        },
        {
            "id": 1,
            "reference_id": "20-NTNRYDE6A32E-I",
            "organisation_id": 5,
            "zdhc_pid": null,
            "name": "sed",
            "version": 1,
            "description": null,
            "alternate_names": null,
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:28.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "DRAFT",
            "technical_data_sheet_url": "",
            "conformance_level": null,
            "ctz_level": null
        }
    ]
}
 

Request      

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

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[name]   string  optional    

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

filter[zdhc_pid]   integer  optional    

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

filter[status]   string  optional    

Filter column status by any accepted value. Matches exact value. Possible values: DRAFT, UNDER_REVIEW, ACCEPTED, PUBLISHED, NOT_ACCEPTED, DELETED Example: vel

filter[assignment_status]   string  optional    

Filter column assignment_status by any accepted value. Matches exact value. Possible values: UNDER_REVIEW, ACCEPTED, EXPIRED, DECLINED Example: facilis

filter[organisation_id]   integer  optional    

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

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

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

filter[created_at]   datetime  optional    

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

filter[updated_at]   datetime  optional    

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

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

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

search   string  optional    

Search in all of these columns: name, zdhc_pid Example: neque

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,name,version,status,assignment_status,zdhc_pid,conformance_level_name,ctz_level_name,created_at,updated_at

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

Update

requires authentication

Update product assignments

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/14" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "certifications[][mrsl_standard_id]=13"\
    --form "certifications[][ctz_standard_id]=1"\
    --form "certifications[][safety_data_sheet_id]=13"\
    --form "safety_data_sheet=@/tmp/phpJMIJnM" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/14"
);

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

const body = new FormData();
body.append('certifications[][mrsl_standard_id]', '13');
body.append('certifications[][ctz_standard_id]', '1');
body.append('certifications[][safety_data_sheet_id]', '13');
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):


{
    "data": {
        "id": 14,
        "status": "UNDER_REVIEW",
        "chemical_product_id": 31,
        "organisation_id": 33,
        "created_at": "2025-12-12T09:13:50.000000Z",
        "updated_at": "2025-12-12T16:04:31.000000Z",
        "max_conformance_level_id": null,
        "max_ctz_level_id": null,
        "conformance_level": null,
        "ctz_level": null,
        "mrsl_certifications": [],
        "chemical_product": {
            "id": 31,
            "reference_id": "20-MAMVURD727AJ-P",
            "organisation_id": 32,
            "zdhc_pid": null,
            "name": "cupiditate",
            "version": 1,
            "description": null,
            "alternate_names": [
                "alternative name"
            ],
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:29.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "UNDER_REVIEW",
            "technical_data_sheet_url": "",
            "organisation": {
                "id": 32,
                "reference_id": "01-R6MYJM3NE47K4-H",
                "type_id": 6,
                "name": "test-Chemical formulator m.breuer",
                "address_1": "58013 Lonzo Manors",
                "address_2": "Apt. 423",
                "city": "New Isidro",
                "state": "Utah",
                "location": "JE",
                "zip": "86567-2898",
                "phone": "+15013901283",
                "email": "geoffrey.tremblay@robel.biz",
                "website": "http://www.paucek.info/ipsa-consequatur-illum-animi-soluta-laborum-aspernatur-ipsum-possimus",
                "avatar_url": null,
                "location_name": "Jersey"
            },
            "conformance_level": null,
            "ctz_level": null,
            "highest_mrsl_certification": null,
            "highest_ctz_certification": null,
            "certification_body_assignments": [
                {
                    "id": 14,
                    "status": "UNDER_REVIEW",
                    "chemical_product_id": 31,
                    "organisation_id": 33,
                    "created_at": "2025-12-12T09:13:50.000000Z",
                    "updated_at": "2025-12-12T16:04:31.000000Z",
                    "max_conformance_level_id": null,
                    "max_ctz_level_id": null,
                    "certification_body": {
                        "id": 33,
                        "maxio_customer_id": 226025,
                        "reference_id": "01-TXF8SFVYCQAUD-H",
                        "pdc_id": null,
                        "gateway_aid": null,
                        "uuid": "9f77ac56-e234-4eb3-ae4d-25ccc2e61971",
                        "type_id": 7,
                        "status": "approved",
                        "name": "test-ZDHC MRSL Certification Bodies m.breuer",
                        "legal_name": "Marvin Inc",
                        "address_1": "7505 Gleichner Points Apt. 547",
                        "address_2": "Apt. 605",
                        "city": "Joemouth",
                        "state": "New Hampshire",
                        "location": "AL",
                        "zip": "10490",
                        "phone": "+14845414899",
                        "email": "lance14@hill.biz",
                        "contact_first_name": "Newton",
                        "contact_last_name": "Rogahn",
                        "website": "http://runolfsson.com/a-vel-voluptas-minus-sunt-vero-soluta-harum-ut.html",
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": null,
                        "registration_mail_sent_at": "1992-11-30 18:20:01",
                        "created_at": "2025-07-24T13:23:32.000000Z",
                        "updated_at": "2026-02-07T00:00:14.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": "2026-01-28 09:04:37",
                        "profile_reviewed_by_user_id": 4,
                        "location_name": "Albania"
                    },
                    "mrsl_certifications": []
                }
            ],
            "safety_data_sheets": [
                {
                    "id": 3,
                    "file_name": "test-pdf.pdf",
                    "mime_type": "application/pdf",
                    "file_size": "4911",
                    "locale": "en",
                    "version": 1,
                    "chemical_product_id": 31,
                    "organisation_id": 32,
                    "created_at": "2025-12-12T09:13:32.000000Z",
                    "updated_at": "2025-12-12T09:13:32.000000Z",
                    "file_url": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/31/safety-data-sheet/3",
                    "chemical_product": {
                        "id": 31,
                        "reference_id": "20-MAMVURD727AJ-P",
                        "organisation_id": 32,
                        "zdhc_pid": null,
                        "name": "cupiditate",
                        "version": 1,
                        "description": null,
                        "alternate_names": [
                            "alternative name"
                        ],
                        "created_at": "2025-11-14T09:43:25.000000Z",
                        "updated_at": "2026-03-05T14:31:29.000000Z",
                        "conformance_level_id": null,
                        "ctz_level_id": null,
                        "status": "UNDER_REVIEW",
                        "technical_data_sheet_url": ""
                    }
                },
                {
                    "id": 17,
                    "file_name": "test-pdf.pdf",
                    "mime_type": "application/pdf",
                    "file_size": "4911",
                    "locale": "en",
                    "version": 1,
                    "chemical_product_id": 31,
                    "organisation_id": 33,
                    "created_at": "2026-02-02T14:18:50.000000Z",
                    "updated_at": "2026-02-02T14:18:50.000000Z",
                    "file_url": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/31/safety-data-sheet/17",
                    "chemical_product": {
                        "id": 31,
                        "reference_id": "20-MAMVURD727AJ-P",
                        "organisation_id": 32,
                        "zdhc_pid": null,
                        "name": "cupiditate",
                        "version": 1,
                        "description": null,
                        "alternate_names": [
                            "alternative name"
                        ],
                        "created_at": "2025-11-14T09:43:25.000000Z",
                        "updated_at": "2026-03-05T14:31:29.000000Z",
                        "conformance_level_id": null,
                        "ctz_level_id": null,
                        "status": "UNDER_REVIEW",
                        "technical_data_sheet_url": ""
                    }
                }
            ],
            "certified_safety_data_sheets": [],
            "use_types": [],
            "activity_logs": []
        },
        "highest_mrsl_certification": null,
        "ctz_certifications": [],
        "highest_ctz_certification": null
    }
}
 

Request      

PUT api/organisation/{organisation_id}/chemical/product-assignment/{id}

PATCH api/organisation/{organisation_id}/chemical/product-assignment/{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

id   integer     

The ID of the product assignment. Example: 14

Body Parameters

certifications   object[]  optional    
mrsl_standard_id   integer     

The mrsl_standard_id of an existing record in the mrsl_standard_organisation table. Example: 13

ctz_standard_id   integer  optional    

The ctz_standard_id of an existing record in the ctz_standard_organisation table. Example: 1

safety_data_sheet_id   integer     

The id of an existing record in the safety_data_sheets table. Example: 13

safety_data_sheet   file  optional    

Must be a file. Must not be greater than 10240 kilobytes. Example: /tmp/phpJMIJnM

Toggle Decline

requires authentication

Toggle the decline status of a product assignment

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/qui/toggle-decline" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"sxhrgnakk\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product-assignment/qui/toggle-decline"
);

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

let body = {
    "reason": "sxhrgnakk"
};

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

Example response (200):


{
    "data": {
        "id": 14,
        "status": "UNDER_REVIEW",
        "chemical_product_id": 31,
        "organisation_id": 33,
        "created_at": "2025-12-12T09:13:50.000000Z",
        "updated_at": "2025-12-12T16:04:31.000000Z",
        "max_conformance_level_id": null,
        "max_ctz_level_id": null,
        "conformance_level": null,
        "ctz_level": null,
        "mrsl_certifications": [],
        "chemical_product": {
            "id": 31,
            "reference_id": "20-MAMVURD727AJ-P",
            "organisation_id": 32,
            "zdhc_pid": null,
            "name": "cupiditate",
            "version": 1,
            "description": null,
            "alternate_names": [
                "alternative name"
            ],
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:29.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "UNDER_REVIEW",
            "technical_data_sheet_url": "",
            "organisation": {
                "id": 32,
                "reference_id": "01-R6MYJM3NE47K4-H",
                "type_id": 6,
                "name": "test-Chemical formulator m.breuer",
                "address_1": "58013 Lonzo Manors",
                "address_2": "Apt. 423",
                "city": "New Isidro",
                "state": "Utah",
                "location": "JE",
                "zip": "86567-2898",
                "phone": "+15013901283",
                "email": "geoffrey.tremblay@robel.biz",
                "website": "http://www.paucek.info/ipsa-consequatur-illum-animi-soluta-laborum-aspernatur-ipsum-possimus",
                "avatar_url": null,
                "location_name": "Jersey"
            },
            "conformance_level": null,
            "ctz_level": null,
            "highest_mrsl_certification": null,
            "highest_ctz_certification": null,
            "certification_body_assignments": [
                {
                    "id": 14,
                    "status": "UNDER_REVIEW",
                    "chemical_product_id": 31,
                    "organisation_id": 33,
                    "created_at": "2025-12-12T09:13:50.000000Z",
                    "updated_at": "2025-12-12T16:04:31.000000Z",
                    "max_conformance_level_id": null,
                    "max_ctz_level_id": null,
                    "certification_body": {
                        "id": 33,
                        "maxio_customer_id": 226025,
                        "reference_id": "01-TXF8SFVYCQAUD-H",
                        "pdc_id": null,
                        "gateway_aid": null,
                        "uuid": "9f77ac56-e234-4eb3-ae4d-25ccc2e61971",
                        "type_id": 7,
                        "status": "approved",
                        "name": "test-ZDHC MRSL Certification Bodies m.breuer",
                        "legal_name": "Marvin Inc",
                        "address_1": "7505 Gleichner Points Apt. 547",
                        "address_2": "Apt. 605",
                        "city": "Joemouth",
                        "state": "New Hampshire",
                        "location": "AL",
                        "zip": "10490",
                        "phone": "+14845414899",
                        "email": "lance14@hill.biz",
                        "contact_first_name": "Newton",
                        "contact_last_name": "Rogahn",
                        "website": "http://runolfsson.com/a-vel-voluptas-minus-sunt-vero-soluta-harum-ut.html",
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": null,
                        "registration_mail_sent_at": "1992-11-30 18:20:01",
                        "created_at": "2025-07-24T13:23:32.000000Z",
                        "updated_at": "2026-02-07T00:00:14.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": "2026-01-28 09:04:37",
                        "profile_reviewed_by_user_id": 4,
                        "location_name": "Albania"
                    },
                    "mrsl_certifications": []
                }
            ],
            "safety_data_sheets": [
                {
                    "id": 3,
                    "file_name": "test-pdf.pdf",
                    "mime_type": "application/pdf",
                    "file_size": "4911",
                    "locale": "en",
                    "version": 1,
                    "chemical_product_id": 31,
                    "organisation_id": 32,
                    "created_at": "2025-12-12T09:13:32.000000Z",
                    "updated_at": "2025-12-12T09:13:32.000000Z",
                    "file_url": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/31/safety-data-sheet/3",
                    "chemical_product": {
                        "id": 31,
                        "reference_id": "20-MAMVURD727AJ-P",
                        "organisation_id": 32,
                        "zdhc_pid": null,
                        "name": "cupiditate",
                        "version": 1,
                        "description": null,
                        "alternate_names": [
                            "alternative name"
                        ],
                        "created_at": "2025-11-14T09:43:25.000000Z",
                        "updated_at": "2026-03-05T14:31:29.000000Z",
                        "conformance_level_id": null,
                        "ctz_level_id": null,
                        "status": "UNDER_REVIEW",
                        "technical_data_sheet_url": ""
                    }
                },
                {
                    "id": 17,
                    "file_name": "test-pdf.pdf",
                    "mime_type": "application/pdf",
                    "file_size": "4911",
                    "locale": "en",
                    "version": 1,
                    "chemical_product_id": 31,
                    "organisation_id": 33,
                    "created_at": "2026-02-02T14:18:50.000000Z",
                    "updated_at": "2026-02-02T14:18:50.000000Z",
                    "file_url": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/31/safety-data-sheet/17",
                    "chemical_product": {
                        "id": 31,
                        "reference_id": "20-MAMVURD727AJ-P",
                        "organisation_id": 32,
                        "zdhc_pid": null,
                        "name": "cupiditate",
                        "version": 1,
                        "description": null,
                        "alternate_names": [
                            "alternative name"
                        ],
                        "created_at": "2025-11-14T09:43:25.000000Z",
                        "updated_at": "2026-03-05T14:31:29.000000Z",
                        "conformance_level_id": null,
                        "ctz_level_id": null,
                        "status": "UNDER_REVIEW",
                        "technical_data_sheet_url": ""
                    }
                }
            ],
            "certified_safety_data_sheets": [],
            "use_types": [],
            "activity_logs": []
        },
        "highest_mrsl_certification": null,
        "ctz_certifications": [],
        "highest_ctz_certification": null
    }
}
 

Request      

POST api/organisation/{organisation_id}/chemical/product-assignment/{product_assignment_id}/toggle-decline

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_assignment_id   string     

The ID of the product assignment. Example: qui

Body Parameters

reason   string  optional    

This field is required unless status is in DECLINED. Must not be greater than 255 characters. Example: sxhrgnakk

Show

requires authentication

Show a product assignment

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

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": 14,
        "status": "UNDER_REVIEW",
        "chemical_product_id": 31,
        "organisation_id": 33,
        "created_at": "2025-12-12T09:13:50.000000Z",
        "updated_at": "2025-12-12T16:04:31.000000Z",
        "max_conformance_level_id": null,
        "max_ctz_level_id": null,
        "conformance_level": null,
        "ctz_level": null,
        "mrsl_certifications": [],
        "chemical_product": {
            "id": 31,
            "reference_id": "20-MAMVURD727AJ-P",
            "organisation_id": 32,
            "zdhc_pid": null,
            "name": "cupiditate",
            "version": 1,
            "description": null,
            "alternate_names": [
                "alternative name"
            ],
            "created_at": "2025-11-14T09:43:25.000000Z",
            "updated_at": "2026-03-05T14:31:29.000000Z",
            "conformance_level_id": null,
            "ctz_level_id": null,
            "status": "UNDER_REVIEW",
            "technical_data_sheet_url": "",
            "organisation": {
                "id": 32,
                "reference_id": "01-R6MYJM3NE47K4-H",
                "type_id": 6,
                "name": "test-Chemical formulator m.breuer",
                "address_1": "58013 Lonzo Manors",
                "address_2": "Apt. 423",
                "city": "New Isidro",
                "state": "Utah",
                "location": "JE",
                "zip": "86567-2898",
                "phone": "+15013901283",
                "email": "geoffrey.tremblay@robel.biz",
                "website": "http://www.paucek.info/ipsa-consequatur-illum-animi-soluta-laborum-aspernatur-ipsum-possimus",
                "avatar_url": null,
                "location_name": "Jersey"
            },
            "conformance_level": null,
            "ctz_level": null,
            "highest_mrsl_certification": null,
            "highest_ctz_certification": null,
            "certification_body_assignments": [
                {
                    "id": 14,
                    "status": "UNDER_REVIEW",
                    "chemical_product_id": 31,
                    "organisation_id": 33,
                    "created_at": "2025-12-12T09:13:50.000000Z",
                    "updated_at": "2025-12-12T16:04:31.000000Z",
                    "max_conformance_level_id": null,
                    "max_ctz_level_id": null,
                    "certification_body": {
                        "id": 33,
                        "maxio_customer_id": 226025,
                        "reference_id": "01-TXF8SFVYCQAUD-H",
                        "pdc_id": null,
                        "gateway_aid": null,
                        "uuid": "9f77ac56-e234-4eb3-ae4d-25ccc2e61971",
                        "type_id": 7,
                        "status": "approved",
                        "name": "test-ZDHC MRSL Certification Bodies m.breuer",
                        "legal_name": "Marvin Inc",
                        "address_1": "7505 Gleichner Points Apt. 547",
                        "address_2": "Apt. 605",
                        "city": "Joemouth",
                        "state": "New Hampshire",
                        "location": "AL",
                        "zip": "10490",
                        "phone": "+14845414899",
                        "email": "lance14@hill.biz",
                        "contact_first_name": "Newton",
                        "contact_last_name": "Rogahn",
                        "website": "http://runolfsson.com/a-vel-voluptas-minus-sunt-vero-soluta-harum-ut.html",
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": null,
                        "registration_mail_sent_at": "1992-11-30 18:20:01",
                        "created_at": "2025-07-24T13:23:32.000000Z",
                        "updated_at": "2026-02-07T00:00:14.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": "2026-01-28 09:04:37",
                        "profile_reviewed_by_user_id": 4,
                        "location_name": "Albania"
                    },
                    "mrsl_certifications": []
                }
            ],
            "safety_data_sheets": [
                {
                    "id": 3,
                    "file_name": "test-pdf.pdf",
                    "mime_type": "application/pdf",
                    "file_size": "4911",
                    "locale": "en",
                    "version": 1,
                    "chemical_product_id": 31,
                    "organisation_id": 32,
                    "created_at": "2025-12-12T09:13:32.000000Z",
                    "updated_at": "2025-12-12T09:13:32.000000Z",
                    "file_url": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/31/safety-data-sheet/3",
                    "chemical_product": {
                        "id": 31,
                        "reference_id": "20-MAMVURD727AJ-P",
                        "organisation_id": 32,
                        "zdhc_pid": null,
                        "name": "cupiditate",
                        "version": 1,
                        "description": null,
                        "alternate_names": [
                            "alternative name"
                        ],
                        "created_at": "2025-11-14T09:43:25.000000Z",
                        "updated_at": "2026-03-05T14:31:29.000000Z",
                        "conformance_level_id": null,
                        "ctz_level_id": null,
                        "status": "UNDER_REVIEW",
                        "technical_data_sheet_url": ""
                    }
                },
                {
                    "id": 17,
                    "file_name": "test-pdf.pdf",
                    "mime_type": "application/pdf",
                    "file_size": "4911",
                    "locale": "en",
                    "version": 1,
                    "chemical_product_id": 31,
                    "organisation_id": 33,
                    "created_at": "2026-02-02T14:18:50.000000Z",
                    "updated_at": "2026-02-02T14:18:50.000000Z",
                    "file_url": "http://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/product/31/safety-data-sheet/17",
                    "chemical_product": {
                        "id": 31,
                        "reference_id": "20-MAMVURD727AJ-P",
                        "organisation_id": 32,
                        "zdhc_pid": null,
                        "name": "cupiditate",
                        "version": 1,
                        "description": null,
                        "alternate_names": [
                            "alternative name"
                        ],
                        "created_at": "2025-11-14T09:43:25.000000Z",
                        "updated_at": "2026-03-05T14:31:29.000000Z",
                        "conformance_level_id": null,
                        "ctz_level_id": null,
                        "status": "UNDER_REVIEW",
                        "technical_data_sheet_url": ""
                    }
                }
            ],
            "certified_safety_data_sheets": [],
            "use_types": [],
            "activity_logs": []
        },
        "highest_mrsl_certification": null,
        "ctz_certifications": [],
        "highest_ctz_certification": null
    }
}
 

Request      

GET api/organisation/{organisation_id}/chemical/product-assignment/{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 assignment. Example: 14

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=17&page=1&filter%5Bname%5D=quaerat&filter%5Bis_inactive%5D=1&filter%5Bcreated_at%5D=eaque&filter%5Bupdated_at%5D=perferendis&sort=name%2Cis_inactive%2Ccreated_at%2Cupdated_at&search=reprehenderit&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": "17",
    "page": "1",
    "filter[name]": "quaerat",
    "filter[is_inactive]": "1",
    "filter[created_at]": "eaque",
    "filter[updated_at]": "perferendis",
    "sort": "name,is_inactive,created_at,updated_at",
    "search": "reprehenderit",
    "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": 10,
            "name": "Colorant",
            "is_inactive": 0,
            "created_at": "2025-12-16T10:02:53.000000Z",
            "updated_at": "2025-12-16T10:02:53.000000Z",
            "substrates": [
                {
                    "id": 13,
                    "name": "Synthetic",
                    "is_inactive": 0,
                    "created_at": "2025-12-16T10:02:53.000000Z",
                    "updated_at": "2026-03-23T08:41:11.000000Z",
                    "pivot": {
                        "product_category_id": 10,
                        "product_substrate_id": 13
                    }
                }
            ]
        },
        {
            "id": 10,
            "name": "Colorant",
            "is_inactive": 0,
            "created_at": "2025-12-16T10:02:53.000000Z",
            "updated_at": "2025-12-16T10:02:53.000000Z",
            "substrates": [
                {
                    "id": 13,
                    "name": "Synthetic",
                    "is_inactive": 0,
                    "created_at": "2025-12-16T10:02:53.000000Z",
                    "updated_at": "2026-03-23T08:41:11.000000Z",
                    "pivot": {
                        "product_category_id": 10,
                        "product_substrate_id": 13
                    }
                }
            ]
        }
    ],
    "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: 17

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

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

filter[updated_at]   datetime  optional    

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

filter[substrates.name]   string  optional    

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

filter[substrates.id]   integer  optional    

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

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,is_inactive,created_at,updated_at

search   string  optional    

Search in all of these columns: name Example: reprehenderit

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/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/organisation/1/chemical/classification/product-category/10"
);

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": 10,
        "name": "Colorant",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:53.000000Z",
        "updated_at": "2025-12-16T10:02:53.000000Z",
        "substrates": [
            {
                "id": 13,
                "name": "Synthetic",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:53.000000Z",
                "updated_at": "2026-03-23T08:41:11.000000Z",
                "pivot": {
                    "product_category_id": 10,
                    "product_substrate_id": 13
                }
            }
        ]
    }
}
 

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

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\": \"bppuanpwyfpbwbxqjrqjqodwc\",
    \"is_inactive\": false,
    \"substrates\": [
        12
    ]
}"
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": "bppuanpwyfpbwbxqjrqjqodwc",
    "is_inactive": false,
    "substrates": [
        12
    ]
};

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

Example response (200):


{
    "data": {
        "id": 10,
        "name": "Colorant",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:53.000000Z",
        "updated_at": "2025-12-16T10:02:53.000000Z",
        "substrates": [
            {
                "id": 13,
                "name": "Synthetic",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:53.000000Z",
                "updated_at": "2026-03-23T08:41:11.000000Z",
                "pivot": {
                    "product_category_id": 10,
                    "product_substrate_id": 13
                }
            }
        ]
    }
}
 

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

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/10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"qy\",
    \"is_inactive\": true,
    \"substrates\": [
        5
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-category/10"
);

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

let body = {
    "name": "qy",
    "is_inactive": true,
    "substrates": [
        5
    ]
};

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

Example response (200):


{
    "data": {
        "id": 10,
        "name": "Colorant",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:53.000000Z",
        "updated_at": "2025-12-16T10:02:53.000000Z",
        "substrates": [
            {
                "id": 13,
                "name": "Synthetic",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:53.000000Z",
                "updated_at": "2026-03-23T08:41:11.000000Z",
                "pivot": {
                    "product_category_id": 10,
                    "product_substrate_id": 13
                }
            }
        ]
    }
}
 

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

Body Parameters

name   string     

Must not be greater than 255 characters. Example: qy

is_inactive   boolean  optional    

Example: true

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/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/organisation/1/chemical/classification/product-category/10"
);

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

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=8&page=1&filter%5Bname%5D=aut&filter%5Bis_inactive%5D=&filter%5Bcategories_count%5D=9&filter%5Buse_types_count%5D=4&filter%5Bupdated_at%5D=expedita&filter%5Bcreated_at%5D=est&sort=name%2Ccategories_count%2Cuse_types_count%2Cis_inactive%2Cupdated_at%2Ccreated_at&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": "8",
    "page": "1",
    "filter[name]": "aut",
    "filter[is_inactive]": "0",
    "filter[categories_count]": "9",
    "filter[use_types_count]": "4",
    "filter[updated_at]": "expedita",
    "filter[created_at]": "est",
    "sort": "name,categories_count,use_types_count,is_inactive,updated_at,created_at",
    "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": 13,
            "name": "Synthetic",
            "is_inactive": 0,
            "created_at": "2025-12-16T10:02:53.000000Z",
            "updated_at": "2026-03-23T08:41:11.000000Z",
            "categories_count": null,
            "use_types_count": null
        },
        {
            "id": 13,
            "name": "Synthetic",
            "is_inactive": 0,
            "created_at": "2025-12-16T10:02:53.000000Z",
            "updated_at": "2026-03-23T08:41:11.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: 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: aut

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

filter[use_types_count]   integer  optional    

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

filter[updated_at]   datetime  optional    

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

filter[created_at]   datetime  optional    

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

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,categories_count,use_types_count,is_inactive,updated_at,created_at

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/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/organisation/1/chemical/classification/product-substrate/13"
);

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": 13,
        "name": "Synthetic",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:53.000000Z",
        "updated_at": "2026-03-23T08:41:11.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: 13

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\": \"tfuqdjbtubanntquwlxvqsmpm\",
    \"is_inactive\": true,
    \"categories\": [
        15
    ]
}"
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": "tfuqdjbtubanntquwlxvqsmpm",
    "is_inactive": true,
    "categories": [
        15
    ]
};

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

Example response (200):


{
    "data": {
        "id": 13,
        "name": "Synthetic",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:53.000000Z",
        "updated_at": "2026-03-23T08:41:11.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: tfuqdjbtubanntquwlxvqsmpm

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/13" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"kkhsoudij\",
    \"is_inactive\": true,
    \"categories\": [
        10
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-substrate/13"
);

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

let body = {
    "name": "kkhsoudij",
    "is_inactive": true,
    "categories": [
        10
    ]
};

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

Example response (200):


{
    "data": {
        "id": 13,
        "name": "Synthetic",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:53.000000Z",
        "updated_at": "2026-03-23T08:41:11.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: 13

Body Parameters

name   string     

Must not be greater than 255 characters. Example: kkhsoudij

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/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/organisation/1/chemical/classification/product-substrate/13"
);

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

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=1&page=1&filter%5Bname%5D=excepturi&filter%5Bis_inactive%5D=&filter%5Bcreated_at%5D=quod&filter%5Bupdated_at%5D=et&sort=name%2Cis_inactive%2Ccreated_at%2Cupdated_at&search=et&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": "1",
    "page": "1",
    "filter[name]": "excepturi",
    "filter[is_inactive]": "0",
    "filter[created_at]": "quod",
    "filter[updated_at]": "et",
    "sort": "name,is_inactive,created_at,updated_at",
    "search": "et",
    "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": 10,
            "name": "Others",
            "is_inactive": 0,
            "created_at": "2025-12-16T10:02:54.000000Z",
            "updated_at": "2025-12-16T10:02:54.000000Z"
        },
        {
            "id": 10,
            "name": "Others",
            "is_inactive": 0,
            "created_at": "2025-12-16T10:02:54.000000Z",
            "updated_at": "2025-12-16T10:02:54.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: 1

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

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

filter[updated_at]   datetime  optional    

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

filter[categories.name]   string  optional    

Filter column categories.name by any accepted value. Filter by categories name Example: voluptatem

filter[categories.id]   integer  optional    

Filter column categories.id by any accepted value. Filter by category ID Example: 15

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,is_inactive,created_at,updated_at

search   string  optional    

Search in all of these columns: name Example: et

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/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/organisation/1/chemical/classification/product-use-type/10"
);

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": 10,
        "name": "Others",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:54.000000Z",
        "updated_at": "2025-12-16T10:02:54.000000Z",
        "categories": [
            {
                "id": 10,
                "name": "Colorant",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:53.000000Z",
                "updated_at": "2025-12-16T10:02:53.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 10
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 10,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 53,
                "name": "Others",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 53
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 53,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 54,
                "name": "Finishing agent",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 54
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 54,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 55,
                "name": "Lubricant",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 55
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 55,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 56,
                "name": "Resin",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 56
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 56,
                            "product_substrate_id": 13
                        }
                    }
                ]
            }
        ]
    }
}
 

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

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\": \"jehxrwbjsbprudxal\",
    \"is_inactive\": true,
    \"categories\": [
        83
    ]
}"
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": "jehxrwbjsbprudxal",
    "is_inactive": true,
    "categories": [
        83
    ]
};

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

Example response (200):


{
    "data": {
        "id": 10,
        "name": "Others",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:54.000000Z",
        "updated_at": "2025-12-16T10:02:54.000000Z",
        "categories": [
            {
                "id": 10,
                "name": "Colorant",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:53.000000Z",
                "updated_at": "2025-12-16T10:02:53.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 10
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 10,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 53,
                "name": "Others",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 53
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 53,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 54,
                "name": "Finishing agent",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 54
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 54,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 55,
                "name": "Lubricant",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 55
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 55,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 56,
                "name": "Resin",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 56
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 56,
                            "product_substrate_id": 13
                        }
                    }
                ]
            }
        ]
    }
}
 

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

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/10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"fhsjuldpsnuqybewmtnucep\",
    \"is_inactive\": false,
    \"categories\": [
        68
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/classification/product-use-type/10"
);

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

let body = {
    "name": "fhsjuldpsnuqybewmtnucep",
    "is_inactive": false,
    "categories": [
        68
    ]
};

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

Example response (200):


{
    "data": {
        "id": 10,
        "name": "Others",
        "is_inactive": 0,
        "created_at": "2025-12-16T10:02:54.000000Z",
        "updated_at": "2025-12-16T10:02:54.000000Z",
        "categories": [
            {
                "id": 10,
                "name": "Colorant",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:53.000000Z",
                "updated_at": "2025-12-16T10:02:53.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 10
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 10,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 53,
                "name": "Others",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 53
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 53,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 54,
                "name": "Finishing agent",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 54
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 54,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 55,
                "name": "Lubricant",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 55
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 55,
                            "product_substrate_id": 13
                        }
                    }
                ]
            },
            {
                "id": 56,
                "name": "Resin",
                "is_inactive": 0,
                "created_at": "2025-12-16T10:02:54.000000Z",
                "updated_at": "2025-12-16T10:02:54.000000Z",
                "pivot": {
                    "product_use_type_id": 10,
                    "product_category_id": 56
                },
                "substrates": [
                    {
                        "id": 13,
                        "name": "Synthetic",
                        "is_inactive": 0,
                        "created_at": "2025-12-16T10:02:53.000000Z",
                        "updated_at": "2026-03-23T08:41:11.000000Z",
                        "pivot": {
                            "product_category_id": 56,
                            "product_substrate_id": 13
                        }
                    }
                ]
            }
        ]
    }
}
 

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

Body Parameters

name   string     

Must not be greater than 255 characters. Example: fhsjuldpsnuqybewmtnucep

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/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/organisation/1/chemical/classification/product-use-type/10"
);

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

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"
    }
}
 

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\": \"incidunt\"
}"
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": "incidunt"
};

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

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%2Cclearstream_id%2Caction_type%2Cuser_name%2Cmessage&filter%5Bclearstream_id%5D=13&filter%5Baction_type%5D=et&filter%5Buser_name%5D=eum&column=context-%3Ecreated_at&search=eos&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/admin/1/wastewater/reporting/activity-logs"
);

const params = {
    "sort": "created_at,clearstream_id,action_type,user_name,message",
    "filter[clearstream_id]": "13",
    "filter[action_type]": "et",
    "filter[user_name]": "eum",
    "column": "context->created_at",
    "search": "eos",
    "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"
}
 

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,action_type,user_name,message. prefix a "-" before the column name to sort in descending order Example: created_at,clearstream_id,action_type,user_name,message

filter[clearstream_id]   integer  optional    

Filter column clearstream_id by any accepted value. id of the clearstream report Example: 13

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

column   string  optional    

get a distinct list of filterable values for any of the columns: context->created_at, context->clearstream_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 Example: eos

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/incheck/{organisation_id}/activity-logs

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/1/activity-logs?sort=created_at%2Caction_type%2Cuser_name%2Cmessage&filter%5Baction_type%5D=dolorem&filter%5Buser_name%5D=similique&column=context-%3Ecreated_at&search=blanditiis&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/incheck/1/activity-logs"
);

const params = {
    "sort": "created_at,action_type,user_name,message",
    "filter[action_type]": "dolorem",
    "filter[user_name]": "similique",
    "column": "context->created_at",
    "search": "blanditiis",
    "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 (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"
}
 

Request      

GET api/incheck/{organisation_id}/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,action_type,user_name,message. prefix a "-" before the column name to sort in descending order Example: created_at,action_type,user_name,message

filter[action_type]   string  optional    

Filter column action_type by any accepted value. Action type Example: dolorem

filter[user_name]   string  optional    

Filter column user_name by any accepted value. name of the user initiating the action Example: similique

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 Example: blanditiis

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

GET api/incheck/{organisation_id}/solution-provider/activity-logs

requires authentication

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/incheck/1/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/1/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 (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"
}
 

Request      

GET api/incheck/{organisation_id}/solution-provider/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

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"
}
 

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/2/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/2/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: 2

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/2/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/2/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: 2

Finish testing

requires authentication

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/2/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/2/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: 2

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/2?sort=created_at%2Cclearstream_id%2Caction_type%2Cuser_name%2Cmessage&filter%5Bclearstream_id%5D=10&filter%5Bclearstream_reference_id%5D=aspernatur&filter%5Baction_type%5D=quasi&filter%5Buser_name%5D=sunt&column=context-%3Ecreated_at&search=accusantium&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/organisation/1/wastewater/reporting/activity-logs/2"
);

const params = {
    "sort": "created_at,clearstream_id,action_type,user_name,message",
    "filter[clearstream_id]": "10",
    "filter[clearstream_reference_id]": "aspernatur",
    "filter[action_type]": "quasi",
    "filter[user_name]": "sunt",
    "column": "context->created_at",
    "search": "accusantium",
    "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"
}
 

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

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,clearstream_id,action_type,user_name,message

filter[clearstream_id]   integer  optional    

Filter column clearstream_id by any accepted value. id of the clearstream report Example: 10

filter[clearstream_reference_id]   string  optional    

Filter column clearstream_reference_id by any accepted value. reference id of the clearstream report Example: aspernatur

filter[action_type]   string  optional    

Filter column action_type by any accepted value. Action type Example: quasi

filter[user_name]   string  optional    

Filter column user_name by any accepted value. name of the user initiating the action Example: sunt

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 Example: accusantium

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

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/2/parameters/45" \
    --header "Authorization: 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/2/parameters/45"
);

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"
}
 

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

id   integer     

The ID of the parameter. Example: 45

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/voluptate" \
    --header "Authorization: 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/voluptate"
);

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

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=omnis" \
    --header "Authorization: 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]": "omnis",
};
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: omnis

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=eveniet&filter%5Blocation%5D=nostrum&filter%5Bsearch%5D=dolore&filter%5Bonly_active_connections%5D=quod&filter%5Bmrsl_standard_id%5D=hic&filter%5Bctz_standard_id%5D=unde&filter%5Bhas_incheck_level_1%5D=et&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/organisation/1/global-search/organisations"
);

const params = {
    "filter[type_id]": "eveniet",
    "filter[location]": "nostrum",
    "filter[search]": "dolore",
    "filter[only_active_connections]": "quod",
    "filter[mrsl_standard_id]": "hic",
    "filter[ctz_standard_id]": "unde",
    "filter[has_incheck_level_1]": "et",
    "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": 1,
            "reference_id": "01-CR698383XMWJ2-P",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "location": {
                "code": "BW",
                "name": "Botswana"
            }
        },
        {
            "id": 1,
            "reference_id": "01-CR698383XMWJ2-P",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "location": {
                "code": "BW",
                "name": "Botswana"
            }
        }
    ],
    "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: eveniet

filter[location]   string  optional    

Filter column location by any accepted value. Matches exact value. Example: nostrum

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

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

filter[mrsl_standard_id]   string  optional    

Filter column mrsl_standard_id by any accepted value. Filter by active MRSL standard IDs (comma-separated) Example: hic

filter[ctz_standard_id]   string  optional    

Filter column ctz_standard_id by any accepted value. Filter by active CTZ standard IDs (comma-separated) Example: unde

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

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

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=14&page=1&filter%5Bname%5D=sint&filter%5Bstatus%5D=incidunt&filter%5Bconformance_level_id%5D=20&filter%5Bctz_level_id%5D=19&filter%5Borganisation_id%5D=5&filter%5Bcreated_at%5D=enim&filter%5Bupdated_at%5D=at&filter%5Bsearch%5D=rem" \
    --header "Authorization: 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": "14",
    "page": "1",
    "filter[name]": "sint",
    "filter[status]": "incidunt",
    "filter[conformance_level_id]": "20",
    "filter[ctz_level_id]": "19",
    "filter[organisation_id]": "5",
    "filter[created_at]": "enim",
    "filter[updated_at]": "at",
    "filter[search]": "rem",
};
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-NTNRYDE6A32E-I",
            "status": "DRAFT",
            "name": "sed",
            "alternate_names": null,
            "chemical_formulator": {
                "id": 5,
                "reference_id": "01-9YKA6G6TQSUTU-T",
                "type_id": 6,
                "name": "test-Chemical formulator System",
                "address_1": "85608 Bridie Highway",
                "address_2": "Apt. 403",
                "city": "Port Eloisa",
                "state": "Louisiana",
                "location": "SY",
                "zip": "69515",
                "phone": "+13345405228",
                "email": "goyette.diamond@schulist.com",
                "website": "http://www.torp.com/",
                "avatar_url": null,
                "location_name": "Syria"
            },
            "can_access_product_profile": false,
            "conformance_level": null,
            "ctz_level": null
        },
        {
            "id": 1,
            "reference_id": "20-NTNRYDE6A32E-I",
            "status": "DRAFT",
            "name": "sed",
            "alternate_names": null,
            "chemical_formulator": {
                "id": 5,
                "reference_id": "01-9YKA6G6TQSUTU-T",
                "type_id": 6,
                "name": "test-Chemical formulator System",
                "address_1": "85608 Bridie Highway",
                "address_2": "Apt. 403",
                "city": "Port Eloisa",
                "state": "Louisiana",
                "location": "SY",
                "zip": "69515",
                "phone": "+13345405228",
                "email": "goyette.diamond@schulist.com",
                "website": "http://www.torp.com/",
                "avatar_url": null,
                "location_name": "Syria"
            },
            "can_access_product_profile": false,
            "conformance_level": null,
            "ctz_level": 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: 14

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[status]   string  optional    

Filter column status by any accepted value. Filter by status (multiple selection allowed) Example: incidunt

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

filter[certificationBodies.id]   integer  optional    

Filter column certificationBodies.id by any accepted value. Filter by certification body IDs (multiple selection allowed) Example: 11

filter[organisation_id]   integer  optional    

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

filter[created_at]   datetime  optional    

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

filter[updated_at]   datetime  optional    

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

filter[useTypes.id]   integer  optional    

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

filter[categories.id]   integer  optional    

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

filter[search]   string  optional    

Filter column search by any accepted value. Search by name, alternate names, or ZDHC PID Example: rem

InCheck

Inventory

Eligable 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/inventory/eligable-suppliers?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/inventory/eligable-suppliers"
);

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,
        "reference_id": "01-CR698383XMWJ2-P",
        "name": "test-Supplier System"
    }
}
 

Request      

GET api/inventory/eligable-suppliers

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 50 Example: 19

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"
}
 

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"
}
 

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/1/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/1/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": 15892,
            "supplier_id": 1,
            "status": "started",
            "verified_at": null,
            "closed_at": null,
            "created_at": "2026-03-24T14:59:57.000000Z",
            "updated_at": "2026-03-24T14:59:57.000000Z"
        },
        {
            "id": 15892,
            "supplier_id": 1,
            "status": "started",
            "verified_at": null,
            "closed_at": null,
            "created_at": "2026-03-24T14:59:57.000000Z",
            "updated_at": "2026-03-24T14:59:57.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_id}/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

Show

requires authentication

Show an incheck report

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

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": 15893,
        "supplier_id": 1,
        "status": "started",
        "verified_at": null,
        "closed_at": null,
        "created_at": "2026-03-24T14:59:57.000000Z",
        "updated_at": "2026-03-24T14:59:57.000000Z"
    }
}
 

Request      

GET api/incheck/{organisation_id}/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 report. Example: 4

Store

requires authentication

Create a new incheck report

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/1/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/1/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": 15894,
        "supplier_id": 1,
        "status": "started",
        "verified_at": null,
        "closed_at": null,
        "created_at": "2026-03-24T14:59:57.000000Z",
        "updated_at": "2026-03-24T14:59:57.000000Z"
    },
    "message": "InCheck report created successfully"
}
 

Request      

POST api/incheck/{organisation_id}/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

Update

requires authentication

Update an incheck report

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/1/reports/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/incheck/1/reports/18"
);

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_id}/reports/{id}

PATCH api/incheck/{organisation_id}/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 report. Example: 18

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/1/reports/9/inventories" \
    --header "Authorization: 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/reports/9/inventories"
);

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"
}
 

Request      

GET api/incheck/{organisation_id}/reports/{report_id}/inventories

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

Bind

requires authentication

Bind inventories to an incheck report.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/incheck/1/reports/4/inventories" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"inventory_ids\": [
        20
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/incheck/1/reports/4/inventories"
);

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

let body = {
    "inventory_ids": [
        20
    ]
};

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

Request      

POST api/incheck/{organisation_id}/reports/{report_id}/inventories

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

Body Parameters

inventory_ids   integer[]     

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"
}
 

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",
            "created_at": "2025-09-04T13:16:11.000000Z",
            "updated_at": "2025-09-04T13:16:11.000000Z"
        },
        {
            "id": 1,
            "name": "Level 0",
            "created_at": "2025-09-04T13:16:11.000000Z",
            "updated_at": "2025-09-04T13:16:11.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\": [
        14
    ],
    \"provider_visibility_ids\": [
        1
    ]
}"
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": [
        14
    ],
    "provider_visibility_ids": [
        1
    ]
};

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.

Verified InCheck Report PDF

Show

requires authentication

Show the verified incheck report as a pdf

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/incheck/reports/id/verified-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/reports/id/verified-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/reports/{report_reference_id}/verified-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

report_reference_id   string     

The ID of the report reference. Example: id

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=9&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": "9",
    "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": 4,
            "name": "amfori ID"
        },
        {
            "id": 4,
            "name": "amfori 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: 9

page   integer  optional    

the page number to show. Example: 1

Internal/V1

Organisations

Organisations Index

requires authentication

List all organisations.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/internal/v1/organisations?page=1&per_page=11&filter%5Bupdated_at%5D=%3C+2026-03-25+14%3A59%3A57&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/internal/v1/organisations"
);

const params = {
    "page": "1",
    "per_page": "11",
    "filter[updated_at]": "< 2026-03-25 14:59:57",
    "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": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "reference_id": "01-CR698383XMWJ2-P",
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "status": "approved",
            "type": {
                "id": 2,
                "name": "Supplier"
            },
            "registration_summary": {
                "current_status": "approved",
                "current_status_start_at": null
            },
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address": {
                "address_1": "149 Koss Dam Suite 796",
                "address_2": "Suite 708",
                "city": "Bergemouth",
                "state": "Michigan",
                "postal_code": "26306",
                "country": "BW",
                "location_name": "Botswana"
            },
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "primary_contact": {
                "first_name": "Alfonzo",
                "last_name": "Crooks",
                "email": "yessenia18@bahringer.net",
                "phone": "+17728385594"
            },
            "external_ids": {
                "ZDHC_AID": null,
                "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": "1994-04-10 08:31:47",
            "profile_reviewed_by_user_id": 73080,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "deleted_at": null
        },
        {
            "id": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "reference_id": "01-CR698383XMWJ2-P",
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "status": "approved",
            "type": {
                "id": 2,
                "name": "Supplier"
            },
            "registration_summary": {
                "current_status": "approved",
                "current_status_start_at": null
            },
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address": {
                "address_1": "149 Koss Dam Suite 796",
                "address_2": "Suite 708",
                "city": "Bergemouth",
                "state": "Michigan",
                "postal_code": "26306",
                "country": "BW",
                "location_name": "Botswana"
            },
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "primary_contact": {
                "first_name": "Alfonzo",
                "last_name": "Crooks",
                "email": "yessenia18@bahringer.net",
                "phone": "+17728385594"
            },
            "external_ids": {
                "ZDHC_AID": null,
                "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": "1994-04-10 08:31:47",
            "profile_reviewed_by_user_id": 73080,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.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/internal/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: 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-03-25 14:59:57

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/internal/v1/organisation-users?page=1&per_page=5&filter%5Bupdated_at%5D=%3C%3D+2026-04-03+14%3A59%3A57&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/internal/v1/organisation-users"
);

const params = {
    "page": "1",
    "per_page": "5",
    "filter[updated_at]": "<= 2026-04-03 14:59:57",
    "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": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "reference_id": "01-CR698383XMWJ2-P",
                "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "status": "approved"
            },
            "user": {
                "id": 1,
                "reference_id": "02-TXFQXFYRE4ACK-M",
                "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
                "status": "active"
            },
            "role": "ORGANISATION_ADMIN",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2025-12-02T13:51:01.000000Z",
            "deleted_at": null
        },
        {
            "organisation": {
                "id": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "reference_id": "01-CR698383XMWJ2-P",
                "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "status": "approved"
            },
            "user": {
                "id": 1,
                "reference_id": "02-TXFQXFYRE4ACK-M",
                "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
                "status": "active"
            },
            "role": "ORGANISATION_ADMIN",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2025-12-02T13:51:01.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/internal/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: 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-04-03 14:59:57

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/internal/v1/users?page=1&per_page=4&filter%5Bupdated_at%5D=%3D+2026-04-08+14%3A59%3A57&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/internal/v1/users"
);

const params = {
    "page": "1",
    "per_page": "4",
    "filter[updated_at]": "= 2026-04-08 14:59:57",
    "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,
            "reference_id": "02-TXFQXFYRE4ACK-M",
            "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
            "status": "active",
            "first_name": "System",
            "last_name": "User",
            "email": "admin@localhost",
            "phone": "+13523381248",
            "locale": "es_BO",
            "location": null,
            "location_name": null,
            "external_ids": {
                "PDC_ID": null
            },
            "last_active_at": "2025-12-02T13:51:01.000000Z",
            "email_verified_at": null,
            "profile_reviewed_at": null,
            "created_at": "2025-07-24T13:23:18.000000Z",
            "updated_at": "2025-12-08T15:12:52.000000Z",
            "deleted_at": null
        },
        {
            "id": 1,
            "reference_id": "02-TXFQXFYRE4ACK-M",
            "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
            "status": "active",
            "first_name": "System",
            "last_name": "User",
            "email": "admin@localhost",
            "phone": "+13523381248",
            "locale": "es_BO",
            "location": null,
            "location_name": null,
            "external_ids": {
                "PDC_ID": null
            },
            "last_active_at": "2025-12-02T13:51:01.000000Z",
            "email_verified_at": null,
            "profile_reviewed_at": null,
            "created_at": "2025-07-24T13:23:18.000000Z",
            "updated_at": "2025-12-08T15:12:52.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/internal/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: 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-04-08 14:59:57

sort   string  optional    

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

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=12&filter%5Blabelable_type%5D=iusto&sort=name%2Clabelable_type%2Ccreated_at%2Cupdated_at&search=aliquam" \
    --header "Authorization: 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": "12",
    "filter[labelable_type]": "iusto",
    "sort": "name,labelable_type,created_at,updated_at",
    "search": "aliquam",
};
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: 12

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

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,labelable_type,created_at,updated_at

search   string  optional    

Search in all of these columns: name Example: aliquam

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

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=17&page=1&filter%5Bconformance_level_id%5D=16&filter%5Bstatus%5D=distinctio&filter%5Bstart_date%5D=earum&filter%5Bend_date%5D=deleniti&filter%5Bcreated_at%5D=vel&filter%5Bupdated_at%5D=non&search=doloremque&sort=name%2Cversion%2Cstatus%2Cstart_date%2Cend_date%2Ccreated_at%2Cupdated_at&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": "17",
    "page": "1",
    "filter[conformance_level_id]": "16",
    "filter[status]": "distinctio",
    "filter[start_date]": "earum",
    "filter[end_date]": "deleniti",
    "filter[created_at]": "vel",
    "filter[updated_at]": "non",
    "search": "doloremque",
    "sort": "name,version,status,start_date,end_date,created_at,updated_at",
    "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": 9,
            "reference_id": "30-7V7GKLDBKXQA-I",
            "name": "Level 1",
            "version": "3.1",
            "conformance_level_id": 1,
            "start_date": "2025-12-01T00:00:00.000000Z",
            "end_date": "2027-12-31T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2025-12-11T16:58:28.000000Z",
            "updated_at": "2026-03-05T15:48:11.000000Z",
            "expired_at": null,
            "conformance_level": {
                "id": 1,
                "name": "Level 1"
            },
            "organisations": [
                {
                    "id": 87,
                    "maxio_customer_id": 226066,
                    "reference_id": "01-8J36F3RPYYK3T-X",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac5e-883a-40ed-9db4-c98abf3da6a2",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies vdhoek",
                    "legal_name": "Pfannerstill Inc",
                    "address_1": "38558 Russel Street",
                    "address_2": "Suite 630",
                    "city": "North Pattieshire",
                    "state": "Wyoming",
                    "location": "LK",
                    "zip": "92199-6406",
                    "phone": "+13213459957",
                    "email": "mohamed19@douglas.com",
                    "contact_first_name": "Jamel",
                    "contact_last_name": "Wilderman",
                    "website": "http://www.morar.com/qui-repudiandae-suscipit-accusantium",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1990-01-10 10:28:39",
                    "created_at": "2025-07-24T13:23:38.000000Z",
                    "updated_at": "2026-02-07T00:00:22.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-26 13:32:55",
                    "profile_reviewed_by_user_id": 10,
                    "location_name": "Sri Lanka",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 87,
                        "id": 1,
                        "valid_until": null,
                        "created_at": "2025-12-11T16:58:28.000000Z",
                        "updated_at": "2025-12-11T16:58:28.000000Z"
                    }
                },
                {
                    "id": 6,
                    "maxio_customer_id": 225505,
                    "reference_id": "01-9YKA6G6PJ9H4P-N",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac51-4a14-419b-8a0f-321f3d2d2f6f",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies System",
                    "legal_name": "Stoltenberg, McDermott and Pacocha",
                    "address_1": "3644 Erin Extensions Suite 032",
                    "address_2": "Apt. 811",
                    "city": "Parkerview",
                    "state": "Alabama",
                    "location": "SJ",
                    "zip": "47449",
                    "phone": "+17706304373",
                    "email": "swelch@rutherford.com",
                    "contact_first_name": "Rickie",
                    "contact_last_name": "Leffler",
                    "website": "https://www.leffler.com/et-alias-autem-rerum-mollitia-esse-earum-quam",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "2009-06-15 04:14:20",
                    "created_at": "2025-07-24T13:23:29.000000Z",
                    "updated_at": "2026-02-07T00:00:09.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Svalbard & Jan Mayen",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 6,
                        "id": 10,
                        "valid_until": null,
                        "created_at": "2026-01-28T14:51:26.000000Z",
                        "updated_at": "2026-01-28T14:51:26.000000Z"
                    }
                },
                {
                    "id": 15,
                    "maxio_customer_id": 225514,
                    "reference_id": "01-H7TPZSZGF3FQW-O",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac53-5112-4af0-a33d-3a4affc8d950",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies Regular",
                    "legal_name": "Emmerich Ltd",
                    "address_1": "560 Thea Loaf",
                    "address_2": "Apt. 104",
                    "city": "Port Lauretta",
                    "state": "Kentucky",
                    "location": "ME",
                    "zip": "93326",
                    "phone": "+16105393809",
                    "email": "nannie88@fritsch.com",
                    "contact_first_name": "Mandy",
                    "contact_last_name": "Anderson",
                    "website": "http://littel.com/",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1996-10-18 23:24:44",
                    "created_at": "2025-07-24T13:23:30.000000Z",
                    "updated_at": "2026-02-07T00:00:11.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Montenegro",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 15,
                        "id": 11,
                        "valid_until": null,
                        "created_at": "2026-01-28T14:51:26.000000Z",
                        "updated_at": "2026-01-28T14:51:26.000000Z"
                    }
                },
                {
                    "id": 24,
                    "maxio_customer_id": 226018,
                    "reference_id": "01-L8JRXULHPYL6N-Y",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac55-866a-4f90-8ca0-7edd448b2217",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies Member",
                    "legal_name": "Towne-Cartwright",
                    "address_1": "316 Luella Road",
                    "address_2": "Suite 119",
                    "city": "North Kyleeshire",
                    "state": "Washington",
                    "location": "DE",
                    "zip": "32596",
                    "phone": "+17477848328",
                    "email": "mertz.brandon@hilpert.info",
                    "contact_first_name": "Isobel",
                    "contact_last_name": "Howe",
                    "website": "http://www.gusikowski.info/",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "2023-06-22 14:24:07",
                    "created_at": "2025-07-24T13:23:32.000000Z",
                    "updated_at": "2026-02-07T00:00:13.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Germany",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 24,
                        "id": 12,
                        "valid_until": null,
                        "created_at": "2026-01-28T14:51:26.000000Z",
                        "updated_at": "2026-01-28T14:51:26.000000Z"
                    }
                },
                {
                    "id": 51,
                    "maxio_customer_id": 226039,
                    "reference_id": "01-SVQFEQVU43G8W-Y",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac59-78be-458a-a670-e840bae10551",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies p.mehren",
                    "legal_name": "Lehner PLC",
                    "address_1": "222 Enrique Stream",
                    "address_2": "Suite 156",
                    "city": "North Damion",
                    "state": "New Mexico",
                    "location": "MC",
                    "zip": "62979-3585",
                    "phone": "+13057596358",
                    "email": "nelda76@baumbach.com",
                    "contact_first_name": "Priscilla",
                    "contact_last_name": "Bosco",
                    "website": "http://www.larson.info/officiis-quo-rerum-numquam-ipsum-aut-tenetur-dolorem.html",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1976-01-28 19:55:22",
                    "created_at": "2025-07-24T13:23:34.000000Z",
                    "updated_at": "2026-02-07T00:00:17.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-30 12:21:18",
                    "profile_reviewed_by_user_id": 6,
                    "location_name": "Monaco",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 51,
                        "id": 13,
                        "valid_until": null,
                        "created_at": "2026-01-30T12:24:50.000000Z",
                        "updated_at": "2026-01-30T12:24:50.000000Z"
                    }
                },
                {
                    "id": 114,
                    "maxio_customer_id": 226087,
                    "reference_id": "01-J32MU29QPC7PY-M",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac62-1a4a-4885-a886-46c178514b10",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies jully",
                    "legal_name": "Wintheiser Inc",
                    "address_1": "8147 Gene Track Suite 777",
                    "address_2": "Apt. 798",
                    "city": "Rathmouth",
                    "state": "Wyoming",
                    "location": "VG",
                    "zip": "82304",
                    "phone": "+18455198054",
                    "email": "darien27@towne.com",
                    "contact_first_name": "Briana",
                    "contact_last_name": "Wisoky",
                    "website": "http://lakin.com/",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "2000-02-03 08:40:52",
                    "created_at": "2025-07-24T13:23:40.000000Z",
                    "updated_at": "2026-02-07T00:00:26.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "British Virgin Islands",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 114,
                        "id": 14,
                        "valid_until": null,
                        "created_at": "2026-02-02T11:52:53.000000Z",
                        "updated_at": "2026-02-02T11:52:53.000000Z"
                    }
                },
                {
                    "id": 33,
                    "maxio_customer_id": 226025,
                    "reference_id": "01-TXF8SFVYCQAUD-H",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac56-e234-4eb3-ae4d-25ccc2e61971",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies m.breuer",
                    "legal_name": "Marvin Inc",
                    "address_1": "7505 Gleichner Points Apt. 547",
                    "address_2": "Apt. 605",
                    "city": "Joemouth",
                    "state": "New Hampshire",
                    "location": "AL",
                    "zip": "10490",
                    "phone": "+14845414899",
                    "email": "lance14@hill.biz",
                    "contact_first_name": "Newton",
                    "contact_last_name": "Rogahn",
                    "website": "http://runolfsson.com/a-vel-voluptas-minus-sunt-vero-soluta-harum-ut.html",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1992-11-30 18:20:01",
                    "created_at": "2025-07-24T13:23:32.000000Z",
                    "updated_at": "2026-02-07T00:00:14.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-28 09:04:37",
                    "profile_reviewed_by_user_id": 4,
                    "location_name": "Albania",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 33,
                        "id": 15,
                        "valid_until": null,
                        "created_at": "2026-02-02T14:23:51.000000Z",
                        "updated_at": "2026-02-02T14:23:51.000000Z"
                    }
                }
            ]
        },
        {
            "id": 9,
            "reference_id": "30-7V7GKLDBKXQA-I",
            "name": "Level 1",
            "version": "3.1",
            "conformance_level_id": 1,
            "start_date": "2025-12-01T00:00:00.000000Z",
            "end_date": "2027-12-31T00:00:00.000000Z",
            "status": "PASSED",
            "created_at": "2025-12-11T16:58:28.000000Z",
            "updated_at": "2026-03-05T15:48:11.000000Z",
            "expired_at": null,
            "conformance_level": {
                "id": 1,
                "name": "Level 1"
            },
            "organisations": [
                {
                    "id": 87,
                    "maxio_customer_id": 226066,
                    "reference_id": "01-8J36F3RPYYK3T-X",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac5e-883a-40ed-9db4-c98abf3da6a2",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies vdhoek",
                    "legal_name": "Pfannerstill Inc",
                    "address_1": "38558 Russel Street",
                    "address_2": "Suite 630",
                    "city": "North Pattieshire",
                    "state": "Wyoming",
                    "location": "LK",
                    "zip": "92199-6406",
                    "phone": "+13213459957",
                    "email": "mohamed19@douglas.com",
                    "contact_first_name": "Jamel",
                    "contact_last_name": "Wilderman",
                    "website": "http://www.morar.com/qui-repudiandae-suscipit-accusantium",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1990-01-10 10:28:39",
                    "created_at": "2025-07-24T13:23:38.000000Z",
                    "updated_at": "2026-02-07T00:00:22.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-26 13:32:55",
                    "profile_reviewed_by_user_id": 10,
                    "location_name": "Sri Lanka",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 87,
                        "id": 1,
                        "valid_until": null,
                        "created_at": "2025-12-11T16:58:28.000000Z",
                        "updated_at": "2025-12-11T16:58:28.000000Z"
                    }
                },
                {
                    "id": 6,
                    "maxio_customer_id": 225505,
                    "reference_id": "01-9YKA6G6PJ9H4P-N",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac51-4a14-419b-8a0f-321f3d2d2f6f",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies System",
                    "legal_name": "Stoltenberg, McDermott and Pacocha",
                    "address_1": "3644 Erin Extensions Suite 032",
                    "address_2": "Apt. 811",
                    "city": "Parkerview",
                    "state": "Alabama",
                    "location": "SJ",
                    "zip": "47449",
                    "phone": "+17706304373",
                    "email": "swelch@rutherford.com",
                    "contact_first_name": "Rickie",
                    "contact_last_name": "Leffler",
                    "website": "https://www.leffler.com/et-alias-autem-rerum-mollitia-esse-earum-quam",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "2009-06-15 04:14:20",
                    "created_at": "2025-07-24T13:23:29.000000Z",
                    "updated_at": "2026-02-07T00:00:09.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Svalbard & Jan Mayen",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 6,
                        "id": 10,
                        "valid_until": null,
                        "created_at": "2026-01-28T14:51:26.000000Z",
                        "updated_at": "2026-01-28T14:51:26.000000Z"
                    }
                },
                {
                    "id": 15,
                    "maxio_customer_id": 225514,
                    "reference_id": "01-H7TPZSZGF3FQW-O",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac53-5112-4af0-a33d-3a4affc8d950",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies Regular",
                    "legal_name": "Emmerich Ltd",
                    "address_1": "560 Thea Loaf",
                    "address_2": "Apt. 104",
                    "city": "Port Lauretta",
                    "state": "Kentucky",
                    "location": "ME",
                    "zip": "93326",
                    "phone": "+16105393809",
                    "email": "nannie88@fritsch.com",
                    "contact_first_name": "Mandy",
                    "contact_last_name": "Anderson",
                    "website": "http://littel.com/",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1996-10-18 23:24:44",
                    "created_at": "2025-07-24T13:23:30.000000Z",
                    "updated_at": "2026-02-07T00:00:11.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Montenegro",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 15,
                        "id": 11,
                        "valid_until": null,
                        "created_at": "2026-01-28T14:51:26.000000Z",
                        "updated_at": "2026-01-28T14:51:26.000000Z"
                    }
                },
                {
                    "id": 24,
                    "maxio_customer_id": 226018,
                    "reference_id": "01-L8JRXULHPYL6N-Y",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac55-866a-4f90-8ca0-7edd448b2217",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies Member",
                    "legal_name": "Towne-Cartwright",
                    "address_1": "316 Luella Road",
                    "address_2": "Suite 119",
                    "city": "North Kyleeshire",
                    "state": "Washington",
                    "location": "DE",
                    "zip": "32596",
                    "phone": "+17477848328",
                    "email": "mertz.brandon@hilpert.info",
                    "contact_first_name": "Isobel",
                    "contact_last_name": "Howe",
                    "website": "http://www.gusikowski.info/",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "2023-06-22 14:24:07",
                    "created_at": "2025-07-24T13:23:32.000000Z",
                    "updated_at": "2026-02-07T00:00:13.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "Germany",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 24,
                        "id": 12,
                        "valid_until": null,
                        "created_at": "2026-01-28T14:51:26.000000Z",
                        "updated_at": "2026-01-28T14:51:26.000000Z"
                    }
                },
                {
                    "id": 51,
                    "maxio_customer_id": 226039,
                    "reference_id": "01-SVQFEQVU43G8W-Y",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac59-78be-458a-a670-e840bae10551",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies p.mehren",
                    "legal_name": "Lehner PLC",
                    "address_1": "222 Enrique Stream",
                    "address_2": "Suite 156",
                    "city": "North Damion",
                    "state": "New Mexico",
                    "location": "MC",
                    "zip": "62979-3585",
                    "phone": "+13057596358",
                    "email": "nelda76@baumbach.com",
                    "contact_first_name": "Priscilla",
                    "contact_last_name": "Bosco",
                    "website": "http://www.larson.info/officiis-quo-rerum-numquam-ipsum-aut-tenetur-dolorem.html",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1976-01-28 19:55:22",
                    "created_at": "2025-07-24T13:23:34.000000Z",
                    "updated_at": "2026-02-07T00:00:17.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-30 12:21:18",
                    "profile_reviewed_by_user_id": 6,
                    "location_name": "Monaco",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 51,
                        "id": 13,
                        "valid_until": null,
                        "created_at": "2026-01-30T12:24:50.000000Z",
                        "updated_at": "2026-01-30T12:24:50.000000Z"
                    }
                },
                {
                    "id": 114,
                    "maxio_customer_id": 226087,
                    "reference_id": "01-J32MU29QPC7PY-M",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac62-1a4a-4885-a886-46c178514b10",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies jully",
                    "legal_name": "Wintheiser Inc",
                    "address_1": "8147 Gene Track Suite 777",
                    "address_2": "Apt. 798",
                    "city": "Rathmouth",
                    "state": "Wyoming",
                    "location": "VG",
                    "zip": "82304",
                    "phone": "+18455198054",
                    "email": "darien27@towne.com",
                    "contact_first_name": "Briana",
                    "contact_last_name": "Wisoky",
                    "website": "http://lakin.com/",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "2000-02-03 08:40:52",
                    "created_at": "2025-07-24T13:23:40.000000Z",
                    "updated_at": "2026-02-07T00:00:26.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": null,
                    "profile_reviewed_by_user_id": null,
                    "location_name": "British Virgin Islands",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 114,
                        "id": 14,
                        "valid_until": null,
                        "created_at": "2026-02-02T11:52:53.000000Z",
                        "updated_at": "2026-02-02T11:52:53.000000Z"
                    }
                },
                {
                    "id": 33,
                    "maxio_customer_id": 226025,
                    "reference_id": "01-TXF8SFVYCQAUD-H",
                    "pdc_id": null,
                    "gateway_aid": null,
                    "uuid": "9f77ac56-e234-4eb3-ae4d-25ccc2e61971",
                    "type_id": 7,
                    "status": "approved",
                    "name": "test-ZDHC MRSL Certification Bodies m.breuer",
                    "legal_name": "Marvin Inc",
                    "address_1": "7505 Gleichner Points Apt. 547",
                    "address_2": "Apt. 605",
                    "city": "Joemouth",
                    "state": "New Hampshire",
                    "location": "AL",
                    "zip": "10490",
                    "phone": "+14845414899",
                    "email": "lance14@hill.biz",
                    "contact_first_name": "Newton",
                    "contact_last_name": "Rogahn",
                    "website": "http://runolfsson.com/a-vel-voluptas-minus-sunt-vero-soluta-harum-ut.html",
                    "avatar_url": null,
                    "applicant_comment": null,
                    "reviewer_comment": null,
                    "registration_mail_sent_at": "1992-11-30 18:20:01",
                    "created_at": "2025-07-24T13:23:32.000000Z",
                    "updated_at": "2026-02-07T00:00:14.000000Z",
                    "reviewer_comment_category": null,
                    "profile_reviewed_at": "2026-01-28 09:04:37",
                    "profile_reviewed_by_user_id": 4,
                    "location_name": "Albania",
                    "pivot": {
                        "mrsl_standard_id": 9,
                        "organisation_id": 33,
                        "id": 15,
                        "valid_until": null,
                        "created_at": "2026-02-02T14:23:51.000000Z",
                        "updated_at": "2026-02-02T14:23:51.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: 17

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

filter[organisations.id]   integer  optional    

Filter column organisations.id by any accepted value. Filter by assigned organisation ID Example: 13

filter[status]   string  optional    

Filter column status by any accepted value. Filter by status Example: distinctio

filter[start_date]   date  optional    

Filter column start_date by any accepted value. Filter by start date Example: earum

filter[end_date]   date  optional    

Filter column end_date by any accepted value. Filter by end date Example: deleniti

filter[created_at]   datetime  optional    

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

filter[updated_at]   datetime  optional    

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

search   string  optional    

Search in all of these columns: name, version Example: doloremque

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,version,status,start_date,end_date,created_at,updated_at

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/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/certification/mrsl-standard/9"
);

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": 9,
        "reference_id": "30-7V7GKLDBKXQA-I",
        "name": "Level 1",
        "version": "3.1",
        "conformance_level_id": 1,
        "start_date": "2025-12-01T00:00:00.000000Z",
        "end_date": "2027-12-31T00:00:00.000000Z",
        "status": "PASSED",
        "created_at": "2025-12-11T16:58:28.000000Z",
        "updated_at": "2026-03-05T15:48:11.000000Z",
        "expired_at": null,
        "conformance_level": {
            "id": 1,
            "name": "Level 1"
        },
        "organisations": [
            {
                "id": 87,
                "maxio_customer_id": 226066,
                "reference_id": "01-8J36F3RPYYK3T-X",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac5e-883a-40ed-9db4-c98abf3da6a2",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies vdhoek",
                "legal_name": "Pfannerstill Inc",
                "address_1": "38558 Russel Street",
                "address_2": "Suite 630",
                "city": "North Pattieshire",
                "state": "Wyoming",
                "location": "LK",
                "zip": "92199-6406",
                "phone": "+13213459957",
                "email": "mohamed19@douglas.com",
                "contact_first_name": "Jamel",
                "contact_last_name": "Wilderman",
                "website": "http://www.morar.com/qui-repudiandae-suscipit-accusantium",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1990-01-10 10:28:39",
                "created_at": "2025-07-24T13:23:38.000000Z",
                "updated_at": "2026-02-07T00:00:22.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-01-26 13:32:55",
                "profile_reviewed_by_user_id": 10,
                "location_name": "Sri Lanka",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 87,
                    "id": 1,
                    "valid_until": null,
                    "created_at": "2025-12-11T16:58:28.000000Z",
                    "updated_at": "2025-12-11T16:58:28.000000Z"
                }
            },
            {
                "id": 6,
                "maxio_customer_id": 225505,
                "reference_id": "01-9YKA6G6PJ9H4P-N",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac51-4a14-419b-8a0f-321f3d2d2f6f",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies System",
                "legal_name": "Stoltenberg, McDermott and Pacocha",
                "address_1": "3644 Erin Extensions Suite 032",
                "address_2": "Apt. 811",
                "city": "Parkerview",
                "state": "Alabama",
                "location": "SJ",
                "zip": "47449",
                "phone": "+17706304373",
                "email": "swelch@rutherford.com",
                "contact_first_name": "Rickie",
                "contact_last_name": "Leffler",
                "website": "https://www.leffler.com/et-alias-autem-rerum-mollitia-esse-earum-quam",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2009-06-15 04:14:20",
                "created_at": "2025-07-24T13:23:29.000000Z",
                "updated_at": "2026-02-07T00:00:09.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Svalbard & Jan Mayen",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 6,
                    "id": 10,
                    "valid_until": null,
                    "created_at": "2026-01-28T14:51:26.000000Z",
                    "updated_at": "2026-01-28T14:51:26.000000Z"
                }
            },
            {
                "id": 15,
                "maxio_customer_id": 225514,
                "reference_id": "01-H7TPZSZGF3FQW-O",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac53-5112-4af0-a33d-3a4affc8d950",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies Regular",
                "legal_name": "Emmerich Ltd",
                "address_1": "560 Thea Loaf",
                "address_2": "Apt. 104",
                "city": "Port Lauretta",
                "state": "Kentucky",
                "location": "ME",
                "zip": "93326",
                "phone": "+16105393809",
                "email": "nannie88@fritsch.com",
                "contact_first_name": "Mandy",
                "contact_last_name": "Anderson",
                "website": "http://littel.com/",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1996-10-18 23:24:44",
                "created_at": "2025-07-24T13:23:30.000000Z",
                "updated_at": "2026-02-07T00:00:11.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Montenegro",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 15,
                    "id": 11,
                    "valid_until": null,
                    "created_at": "2026-01-28T14:51:26.000000Z",
                    "updated_at": "2026-01-28T14:51:26.000000Z"
                }
            },
            {
                "id": 24,
                "maxio_customer_id": 226018,
                "reference_id": "01-L8JRXULHPYL6N-Y",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac55-866a-4f90-8ca0-7edd448b2217",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies Member",
                "legal_name": "Towne-Cartwright",
                "address_1": "316 Luella Road",
                "address_2": "Suite 119",
                "city": "North Kyleeshire",
                "state": "Washington",
                "location": "DE",
                "zip": "32596",
                "phone": "+17477848328",
                "email": "mertz.brandon@hilpert.info",
                "contact_first_name": "Isobel",
                "contact_last_name": "Howe",
                "website": "http://www.gusikowski.info/",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2023-06-22 14:24:07",
                "created_at": "2025-07-24T13:23:32.000000Z",
                "updated_at": "2026-02-07T00:00:13.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "Germany",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 24,
                    "id": 12,
                    "valid_until": null,
                    "created_at": "2026-01-28T14:51:26.000000Z",
                    "updated_at": "2026-01-28T14:51:26.000000Z"
                }
            },
            {
                "id": 51,
                "maxio_customer_id": 226039,
                "reference_id": "01-SVQFEQVU43G8W-Y",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac59-78be-458a-a670-e840bae10551",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies p.mehren",
                "legal_name": "Lehner PLC",
                "address_1": "222 Enrique Stream",
                "address_2": "Suite 156",
                "city": "North Damion",
                "state": "New Mexico",
                "location": "MC",
                "zip": "62979-3585",
                "phone": "+13057596358",
                "email": "nelda76@baumbach.com",
                "contact_first_name": "Priscilla",
                "contact_last_name": "Bosco",
                "website": "http://www.larson.info/officiis-quo-rerum-numquam-ipsum-aut-tenetur-dolorem.html",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1976-01-28 19:55:22",
                "created_at": "2025-07-24T13:23:34.000000Z",
                "updated_at": "2026-02-07T00:00:17.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-01-30 12:21:18",
                "profile_reviewed_by_user_id": 6,
                "location_name": "Monaco",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 51,
                    "id": 13,
                    "valid_until": null,
                    "created_at": "2026-01-30T12:24:50.000000Z",
                    "updated_at": "2026-01-30T12:24:50.000000Z"
                }
            },
            {
                "id": 114,
                "maxio_customer_id": 226087,
                "reference_id": "01-J32MU29QPC7PY-M",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac62-1a4a-4885-a886-46c178514b10",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies jully",
                "legal_name": "Wintheiser Inc",
                "address_1": "8147 Gene Track Suite 777",
                "address_2": "Apt. 798",
                "city": "Rathmouth",
                "state": "Wyoming",
                "location": "VG",
                "zip": "82304",
                "phone": "+18455198054",
                "email": "darien27@towne.com",
                "contact_first_name": "Briana",
                "contact_last_name": "Wisoky",
                "website": "http://lakin.com/",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "2000-02-03 08:40:52",
                "created_at": "2025-07-24T13:23:40.000000Z",
                "updated_at": "2026-02-07T00:00:26.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": null,
                "profile_reviewed_by_user_id": null,
                "location_name": "British Virgin Islands",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 114,
                    "id": 14,
                    "valid_until": null,
                    "created_at": "2026-02-02T11:52:53.000000Z",
                    "updated_at": "2026-02-02T11:52:53.000000Z"
                }
            },
            {
                "id": 33,
                "maxio_customer_id": 226025,
                "reference_id": "01-TXF8SFVYCQAUD-H",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac56-e234-4eb3-ae4d-25ccc2e61971",
                "type_id": 7,
                "status": "approved",
                "name": "test-ZDHC MRSL Certification Bodies m.breuer",
                "legal_name": "Marvin Inc",
                "address_1": "7505 Gleichner Points Apt. 547",
                "address_2": "Apt. 605",
                "city": "Joemouth",
                "state": "New Hampshire",
                "location": "AL",
                "zip": "10490",
                "phone": "+14845414899",
                "email": "lance14@hill.biz",
                "contact_first_name": "Newton",
                "contact_last_name": "Rogahn",
                "website": "http://runolfsson.com/a-vel-voluptas-minus-sunt-vero-soluta-harum-ut.html",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1992-11-30 18:20:01",
                "created_at": "2025-07-24T13:23:32.000000Z",
                "updated_at": "2026-02-07T00:00:14.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-01-28 09:04:37",
                "profile_reviewed_by_user_id": 4,
                "location_name": "Albania",
                "pivot": {
                    "mrsl_standard_id": 9,
                    "organisation_id": 33,
                    "id": 15,
                    "valid_until": null,
                    "created_at": "2026-02-02T14:23:51.000000Z",
                    "updated_at": "2026-02-02T14:23:51.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: 9

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\": \"pzks\",
    \"version\": \"fwfeijhvtciycobcppzeooqdj\",
    \"conformance_level_id\": \"modi\",
    \"start_date\": \"2026-03-24T14:59:56\",
    \"end_date\": \"2026-03-24T14:59:56\",
    \"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": "pzks",
    "version": "fwfeijhvtciycobcppzeooqdj",
    "conformance_level_id": "modi",
    "start_date": "2026-03-24T14:59:56",
    "end_date": "2026-03-24T14:59:56",
    "status": "PASSED"
};

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

Example response (200):


{
    "data": {
        "id": 9,
        "reference_id": "30-7V7GKLDBKXQA-I",
        "name": "Level 1",
        "version": "3.1",
        "conformance_level_id": 1,
        "start_date": "2025-12-01T00:00:00.000000Z",
        "end_date": "2027-12-31T00:00:00.000000Z",
        "status": "PASSED",
        "created_at": "2025-12-11T16:58:28.000000Z",
        "updated_at": "2026-03-05T15:48:11.000000Z",
        "expired_at": null
    }
}
 

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

version   string     

Must not be greater than 255 characters. Example: fwfeijhvtciycobcppzeooqdj

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

start_date   string     

Must be a valid date. Example: 2026-03-24T14:59:56

end_date   string  optional    

Must be a valid date. Example: 2026-03-24T14:59:56

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/9" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"jifcyzjmelxysirulma\",
    \"version\": \"otsmh\",
    \"conformance_level_id\": \"voluptatem\",
    \"start_date\": \"2026-03-24T14:59:56\",
    \"end_date\": \"2026-03-24T14:59:56\",
    \"status\": \"FAILED\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/chemical/certification/mrsl-standard/9"
);

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

let body = {
    "name": "jifcyzjmelxysirulma",
    "version": "otsmh",
    "conformance_level_id": "voluptatem",
    "start_date": "2026-03-24T14:59:56",
    "end_date": "2026-03-24T14:59:56",
    "status": "FAILED"
};

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

Example response (200):


{
    "data": {
        "id": 9,
        "reference_id": "30-7V7GKLDBKXQA-I",
        "name": "Level 1",
        "version": "3.1",
        "conformance_level_id": 1,
        "start_date": "2025-12-01T00:00:00.000000Z",
        "end_date": "2027-12-31T00:00:00.000000Z",
        "status": "PASSED",
        "created_at": "2025-12-11T16:58:28.000000Z",
        "updated_at": "2026-03-05T15:48:11.000000Z",
        "expired_at": null
    }
}
 

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

Body Parameters

name   string     

Must not be greater than 255 characters. Example: jifcyzjmelxysirulma

version   string     

Must not be greater than 255 characters. Example: otsmh

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

start_date   string     

Must be a valid date. Example: 2026-03-24T14:59:56

end_date   string  optional    

Must be a valid date. Example: 2026-03-24T14:59:56

status   string     

Example: FAILED

Must be one of:
  • FAILED
  • PASSED

Destroy

requires authentication

Delete a MRSL Standard

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

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_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: 9

Organisations

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=19&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": "19",
    "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": 1,
            "target_type_id": 1,
            "deactivated": 1,
            "created_at": "2025-07-25T09:52:26.000000Z",
            "updated_at": "2026-01-16T11:12:26.000000Z",
            "source": {
                "id": 1,
                "name": "ZDHC Internal",
                "display_name": "ZDHC Internal",
                "description": "Ut ducimus eveniet voluptate debitis sequi. Saepe accusamus rerum occaecati illo. Doloribus eos nostrum saepe unde. Enim nesciunt doloremque aut rem.",
                "selectable": 0,
                "created_at": "2025-11-14T09:21:46.000000Z",
                "updated_at": "2026-03-24T14:59:35.000000Z"
            },
            "target": {
                "id": 1,
                "name": "ZDHC Internal",
                "display_name": "ZDHC Internal",
                "description": "Ut ducimus eveniet voluptate debitis sequi. Saepe accusamus rerum occaecati illo. Doloribus eos nostrum saepe unde. Enim nesciunt doloremque aut rem.",
                "selectable": 0,
                "created_at": "2025-11-14T09:21:46.000000Z",
                "updated_at": "2026-03-24T14:59:35.000000Z"
            }
        },
        {
            "id": 1,
            "source_type_id": 1,
            "target_type_id": 1,
            "deactivated": 1,
            "created_at": "2025-07-25T09:52:26.000000Z",
            "updated_at": "2026-01-16T11:12:26.000000Z",
            "source": {
                "id": 1,
                "name": "ZDHC Internal",
                "display_name": "ZDHC Internal",
                "description": "Ut ducimus eveniet voluptate debitis sequi. Saepe accusamus rerum occaecati illo. Doloribus eos nostrum saepe unde. Enim nesciunt doloremque aut rem.",
                "selectable": 0,
                "created_at": "2025-11-14T09:21:46.000000Z",
                "updated_at": "2026-03-24T14:59:35.000000Z"
            },
            "target": {
                "id": 1,
                "name": "ZDHC Internal",
                "display_name": "ZDHC Internal",
                "description": "Ut ducimus eveniet voluptate debitis sequi. Saepe accusamus rerum occaecati illo. Doloribus eos nostrum saepe unde. Enim nesciunt doloremque aut rem.",
                "selectable": 0,
                "created_at": "2025-11-14T09:21:46.000000Z",
                "updated_at": "2026-03-24T14:59:35.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: 19

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\": 1,
    \"target_type_id\": 4,
    \"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": 1,
    "target_type_id": 4,
    "deactivated": false
};

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "source_type_id": 1,
            "target_type_id": 1,
            "deactivated": 1,
            "created_at": "2025-07-25T09:52:26.000000Z",
            "updated_at": "2026-01-16T11:12:26.000000Z"
        },
        {
            "id": 1,
            "source_type_id": 1,
            "target_type_id": 1,
            "deactivated": 1,
            "created_at": "2025-07-25T09:52:26.000000Z",
            "updated_at": "2026-01-16T11:12:26.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: 1

target_type_id   integer     

The id of an existing record in the organisation_types table. Example: 4

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

Connections

Index

requires authentication

List all organisation connections

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections?per_page=12&page=1&filter%5Bstatus%5D=quibusdam&filter%5Binitiated_by%5D=repudiandae&filter%5Blabels%5D=quidem" \
    --header "Authorization: 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": "12",
    "page": "1",
    "filter[status]": "quibusdam",
    "filter[initiated_by]": "repudiandae",
    "filter[labels]": "quidem",
};
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": 1,
            "receiving_organisation_id": 1,
            "accepted_at": "2025-07-24 13:23:42",
            "disconnected_at": null,
            "rejected_at": null,
            "created_at": "2025-07-24T13:23:42.000000Z",
            "updated_at": "2025-07-24T13:23:42.000000Z",
            "status": "active",
            "receiving_organisation": {
                "id": 1,
                "maxio_customer_id": 225589,
                "reference_id": "01-CR698383XMWJ2-P",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "type_id": 2,
                "status": "approved",
                "name": "test-Supplier System",
                "legal_name": "Schroeder Ltd",
                "address_1": "149 Koss Dam Suite 796",
                "address_2": "Suite 708",
                "city": "Bergemouth",
                "state": "Michigan",
                "location": "BW",
                "zip": "26306",
                "phone": "+17728385594",
                "email": "yessenia18@bahringer.net",
                "contact_first_name": "Alfonzo",
                "contact_last_name": "Crooks",
                "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": "Update your business registration document",
                "registration_mail_sent_at": "1994-04-10 08:31:47",
                "created_at": "2025-07-24T13:23:28.000000Z",
                "updated_at": "2026-03-24T08:26:00.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-03-24 08:26:00",
                "profile_reviewed_by_user_id": 73080,
                "location_name": "Botswana",
                "type": {
                    "id": 2,
                    "name": "Supplier",
                    "display_name": "Supplier",
                    "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
                    "selectable": 1,
                    "created_at": "2025-11-14T09:21:46.000000Z",
                    "updated_at": "2026-03-24T14:59:35.000000Z"
                }
            },
            "sending_organisation": {
                "id": 1,
                "maxio_customer_id": 225589,
                "reference_id": "01-CR698383XMWJ2-P",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "type_id": 2,
                "status": "approved",
                "name": "test-Supplier System",
                "legal_name": "Schroeder Ltd",
                "address_1": "149 Koss Dam Suite 796",
                "address_2": "Suite 708",
                "city": "Bergemouth",
                "state": "Michigan",
                "location": "BW",
                "zip": "26306",
                "phone": "+17728385594",
                "email": "yessenia18@bahringer.net",
                "contact_first_name": "Alfonzo",
                "contact_last_name": "Crooks",
                "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": "Update your business registration document",
                "registration_mail_sent_at": "1994-04-10 08:31:47",
                "created_at": "2025-07-24T13:23:28.000000Z",
                "updated_at": "2026-03-24T08:26:00.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-03-24 08:26:00",
                "profile_reviewed_by_user_id": 73080,
                "location_name": "Botswana",
                "type": {
                    "id": 2,
                    "name": "Supplier",
                    "display_name": "Supplier",
                    "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
                    "selectable": 1,
                    "created_at": "2025-11-14T09:21:46.000000Z",
                    "updated_at": "2026-03-24T14:59:35.000000Z"
                }
            }
        },
        {
            "id": 1,
            "sending_organisation_id": 1,
            "receiving_organisation_id": 1,
            "accepted_at": "2025-07-24 13:23:42",
            "disconnected_at": null,
            "rejected_at": null,
            "created_at": "2025-07-24T13:23:42.000000Z",
            "updated_at": "2025-07-24T13:23:42.000000Z",
            "status": "active",
            "receiving_organisation": {
                "id": 1,
                "maxio_customer_id": 225589,
                "reference_id": "01-CR698383XMWJ2-P",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "type_id": 2,
                "status": "approved",
                "name": "test-Supplier System",
                "legal_name": "Schroeder Ltd",
                "address_1": "149 Koss Dam Suite 796",
                "address_2": "Suite 708",
                "city": "Bergemouth",
                "state": "Michigan",
                "location": "BW",
                "zip": "26306",
                "phone": "+17728385594",
                "email": "yessenia18@bahringer.net",
                "contact_first_name": "Alfonzo",
                "contact_last_name": "Crooks",
                "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": "Update your business registration document",
                "registration_mail_sent_at": "1994-04-10 08:31:47",
                "created_at": "2025-07-24T13:23:28.000000Z",
                "updated_at": "2026-03-24T08:26:00.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-03-24 08:26:00",
                "profile_reviewed_by_user_id": 73080,
                "location_name": "Botswana",
                "type": {
                    "id": 2,
                    "name": "Supplier",
                    "display_name": "Supplier",
                    "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
                    "selectable": 1,
                    "created_at": "2025-11-14T09:21:46.000000Z",
                    "updated_at": "2026-03-24T14:59:35.000000Z"
                }
            },
            "sending_organisation": {
                "id": 1,
                "maxio_customer_id": 225589,
                "reference_id": "01-CR698383XMWJ2-P",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                "type_id": 2,
                "status": "approved",
                "name": "test-Supplier System",
                "legal_name": "Schroeder Ltd",
                "address_1": "149 Koss Dam Suite 796",
                "address_2": "Suite 708",
                "city": "Bergemouth",
                "state": "Michigan",
                "location": "BW",
                "zip": "26306",
                "phone": "+17728385594",
                "email": "yessenia18@bahringer.net",
                "contact_first_name": "Alfonzo",
                "contact_last_name": "Crooks",
                "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": "Update your business registration document",
                "registration_mail_sent_at": "1994-04-10 08:31:47",
                "created_at": "2025-07-24T13:23:28.000000Z",
                "updated_at": "2026-03-24T08:26:00.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-03-24 08:26:00",
                "profile_reviewed_by_user_id": 73080,
                "location_name": "Botswana",
                "type": {
                    "id": 2,
                    "name": "Supplier",
                    "display_name": "Supplier",
                    "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
                    "selectable": 1,
                    "created_at": "2025-11-14T09:21:46.000000Z",
                    "updated_at": "2026-03-24T14:59:35.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: 12

page   integer  optional    

the page number to show. Example: 1

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

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

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

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=10&search=esse" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type_id\": 4,
    \"search\": \"facere\",
    \"exclude_connected\": \"true\",
    \"exclude_pending\": \"1\",
    \"include_all\": \"1\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/connections/search-connectable-organisations"
);

const params = {
    "page": "1",
    "per_page": "10",
    "search": "esse",
};
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": 4,
    "search": "facere",
    "exclude_connected": "true",
    "exclude_pending": "1",
    "include_all": "1"
};

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "maxio_customer_id": 225589,
            "reference_id": "01-CR698383XMWJ2-P",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "type_id": 2,
            "status": "approved",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "contact_first_name": "Alfonzo",
            "contact_last_name": "Crooks",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": "Update your business registration document",
            "registration_mail_sent_at": "1994-04-10 08:31:47",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "profile_reviewed_by_user_id": 73080,
            "location_name": "Botswana"
        },
        {
            "id": 1,
            "maxio_customer_id": 225589,
            "reference_id": "01-CR698383XMWJ2-P",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "type_id": 2,
            "status": "approved",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "contact_first_name": "Alfonzo",
            "contact_last_name": "Crooks",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": "Update your business registration document",
            "registration_mail_sent_at": "1994-04-10 08:31:47",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "profile_reviewed_by_user_id": 73080,
            "location_name": "Botswana"
        }
    ],
    "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: 10

search   string  optional    

Search in all of these columns: name, legal_name, id Example: esse

Body Parameters

type_id   integer     

The id of an existing record in the organisation_types table. Example: 4

search   string     

Example: facere

exclude_connected   string  optional    

Example: true

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

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": 1,
        "receiving_organisation_id": 1,
        "accepted_at": "2025-07-24 13:23:42",
        "disconnected_at": null,
        "rejected_at": null,
        "created_at": "2025-07-24T13:23:42.000000Z",
        "updated_at": "2025-07-24T13:23:42.000000Z",
        "status": "active",
        "sending_organisation": {
            "id": 1,
            "reference_id": "01-CR698383XMWJ2-P",
            "type_id": 2,
            "name": "test-Supplier System",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "location_name": "Botswana"
        },
        "receiving_organisation": {
            "id": 1,
            "reference_id": "01-CR698383XMWJ2-P",
            "type_id": 2,
            "name": "test-Supplier System",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "location_name": "Botswana"
        },
        "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\": [
        \"eitzhaxzckaxoudbqgkogsjxq\"
    ],
    \"sharing_settings\": [
        {
            \"type\": \"ullam\",
            \"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": [
        "eitzhaxzckaxoudbqgkogsjxq"
    ],
    "sharing_settings": [
        {
            "type": "ullam",
            "active": true
        }
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "sending_organisation_id": 1,
        "receiving_organisation_id": 1,
        "accepted_at": "2025-07-24 13:23:42",
        "disconnected_at": null,
        "rejected_at": null,
        "created_at": "2025-07-24T13:23:42.000000Z",
        "updated_at": "2025-07-24T13:23:42.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: ullam
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\": 20
}"
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": 20
};

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

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=voluptatem&filter%5Btype_id%5D=rerum&sort=name%2Ctype_name%2Cstatus%2Ccreated_at%2Ccontact_first_name%2Ccontact_last_name&page=1&per_page=20&search=eum" \
    --header "Authorization: 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]": "voluptatem",
    "filter[type_id]": "rerum",
    "sort": "name,type_name,status,created_at,contact_first_name,contact_last_name",
    "page": "1",
    "per_page": "20",
    "search": "eum",
};
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": 225589,
            "reference_id": "01-CR698383XMWJ2-P",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "type_id": 3,
            "status": "approved",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "contact_first_name": "Alfonzo",
            "contact_last_name": "Crooks",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": "Update your business registration document",
            "registration_mail_sent_at": "1994-04-10 08:31:47",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "profile_reviewed_by_user_id": 73080,
            "location_name": "Botswana",
            "type_name": "ZDHC Approved Laboratory"
        },
        {
            "id": 1,
            "maxio_customer_id": 225589,
            "reference_id": "01-CR698383XMWJ2-P",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "type_id": 4,
            "status": "approved",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "contact_first_name": "Alfonzo",
            "contact_last_name": "Crooks",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": "Update your business registration document",
            "registration_mail_sent_at": "1994-04-10 08:31:47",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "profile_reviewed_by_user_id": 73080,
            "location_name": "Botswana",
            "type_name": "ZDHC Internal"
        }
    ],
    "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: voluptatem

filter[type_id]   string  optional    

Filter column type_id by any accepted value. Matches exact value. Example: rerum

sort   string  optional    

sort by any accepted column: 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,type_name,status,created_at,contact_first_name,contact_last_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: 20

search   string  optional    

Search in all of these columns: name, status, contact_first_name, contact_last_name Example: eum

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": 225589,
        "reference_id": "01-CR698383XMWJ2-P",
        "pdc_id": null,
        "gateway_aid": null,
        "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
        "type_id": 2,
        "status": "approved",
        "name": "test-Supplier System",
        "legal_name": "Schroeder Ltd",
        "address_1": "149 Koss Dam Suite 796",
        "address_2": "Suite 708",
        "city": "Bergemouth",
        "state": "Michigan",
        "location": "BW",
        "zip": "26306",
        "phone": "+17728385594",
        "email": "yessenia18@bahringer.net",
        "contact_first_name": "Alfonzo",
        "contact_last_name": "Crooks",
        "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
        "avatar_url": null,
        "applicant_comment": null,
        "reviewer_comment": "Update your business registration document",
        "registration_mail_sent_at": "1994-04-10 08:31:47",
        "created_at": "2025-07-24T13:23:28.000000Z",
        "updated_at": "2026-03-24T08:26:00.000000Z",
        "reviewer_comment_category": null,
        "profile_reviewed_at": "2026-03-24 08:26:00",
        "profile_reviewed_by_user_id": 73080,
        "location_name": "Botswana",
        "type": {
            "id": 2,
            "name": "Supplier",
            "display_name": "Supplier",
            "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
            "selectable": 1,
            "created_at": "2025-11-14T09:21:46.000000Z",
            "updated_at": "2026-03-24T14:59:35.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 "name=oa"\
    --form "legal_name=opiitopmezodgt"\
    --form "address_1=est"\
    --form "city=zdcabwqykg"\
    --form "state=rsp"\
    --form "location=DE"\
    --form "zip=fnh"\
    --form "phone=+1234567890"\
    --form "email=jmacejkovic@example.net"\
    --form "contact_first_name=odio"\
    --form "contact_last_name=vitae"\
    --form "website=https://example.com"\
    --form "conformance_level_products[][id]=17"\
    --form "conformance_level_products[][count]=19"\
    --form "status=submitted"\
    --form "reviewer_comment=dolor"\
    --form "reviewer_comment_category=Other"\
    --form "industry_ids[][id]=11"\
    --form "industry_ids[][value]=jfvpzotjkhk"\
    --form "safety_data_sheet=@/tmp/phphGhoEL" 
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('name', 'oa');
body.append('legal_name', 'opiitopmezodgt');
body.append('address_1', 'est');
body.append('city', 'zdcabwqykg');
body.append('state', 'rsp');
body.append('location', 'DE');
body.append('zip', 'fnh');
body.append('phone', '+1234567890');
body.append('email', 'jmacejkovic@example.net');
body.append('contact_first_name', 'odio');
body.append('contact_last_name', 'vitae');
body.append('website', 'https://example.com');
body.append('conformance_level_products[][id]', '17');
body.append('conformance_level_products[][count]', '19');
body.append('status', 'submitted');
body.append('reviewer_comment', 'dolor');
body.append('reviewer_comment_category', 'Other');
body.append('industry_ids[][id]', '11');
body.append('industry_ids[][value]', 'jfvpzotjkhk');
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

name   string     

Must not be greater than 255 characters. Example: oa

legal_name   string     

Must not be greater than 255 characters. Example: opiitopmezodgt

address_1   string     

Example: est

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: zdcabwqykg

state   string     

Must not be greater than 255 characters. Example: rsp

location   string     

Example: DE

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

phone   string  optional    

Must be at least 8 characters. Must not be greater than 20 characters. Example: +1234567890

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: jmacejkovic@example.net

contact_first_name   string     

Example: odio

contact_last_name   string     

Example: vitae

website   string     

[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: 11

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: jfvpzotjkhk

safety_data_sheet   file     

[ONLY: Chemical Formulators] Safety data sheet provided as a file upload. Must be a file. Example: /tmp/phphGhoEL

conformance_level_products   object[]     
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: 17

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 19

status   string  optional    

Example: submitted

Must be one of:
  • approved
  • submitted
  • needs_correction
  • rejected
reviewer_comment   string  optional    

Example: dolor

reviewer_comment_category   string  optional    

Example: Other

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

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-CR698383XMWJ2-P",
        "type_id": 2,
        "name": "test-Supplier System",
        "address_1": "149 Koss Dam Suite 796",
        "address_2": "Suite 708",
        "city": "Bergemouth",
        "state": "Michigan",
        "location": "BW",
        "zip": "26306",
        "phone": "+17728385594",
        "email": "yessenia18@bahringer.net",
        "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
        "avatar_url": null,
        "location_name": "Botswana",
        "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\": \"sds_files\",
    \"visibility_settings\": [
        {
            \"organisation_type_id\": 9,
            \"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": "sds_files",
    "visibility_settings": [
        {
            "organisation_type_id": 9,
            "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: sds_files

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

Must be one of:
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
visible   boolean     

Example: false

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" \
    --header "Authorization: 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"
);

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

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

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=20&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": "20",
    "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-MAKEKAGX8HE9-S",
            "uuid": "a05aa71d-1a73-4ad4-ab85-bfeea70d8d76",
            "inviting_organisation_id": 13416,
            "inviting_user_id": 1,
            "receiving_organisation_id": 13416,
            "receiving_user_id": 1,
            "status": "INVITED",
            "valid_until": "2025-11-21T09:21:52.000000Z",
            "redeemed_at": null,
            "created_at": "2025-11-14T09:21:52.000000Z",
            "updated_at": "2025-11-14T09:21:52.000000Z",
            "receiving_organisation": {
                "id": 13416,
                "reference_id": "01-W9YDRR7VE2LEM-S",
                "type_id": 1,
                "name": "ZDHC Internal Admin",
                "address_1": "57125 Satterfield Extensions Suite 579",
                "address_2": "Apt. 505",
                "city": "Amsterdam",
                "state": "Amsterdam",
                "location": "NL",
                "zip": "18615-8510",
                "phone": "+1234567890",
                "email": "info@zdhc.org",
                "website": null,
                "avatar_url": null,
                "location_name": "Netherlands"
            },
            "receiving_user": {
                "id": 1,
                "email": "admin@localhost",
                "profile_picture_url": null
            },
            "inviting_user": {
                "id": 1,
                "email": "admin@localhost",
                "profile_picture_url": null
            }
        },
        {
            "id": 1,
            "reference_id": "06-MAKEKAGX8HE9-S",
            "uuid": "a05aa71d-1a73-4ad4-ab85-bfeea70d8d76",
            "inviting_organisation_id": 13416,
            "inviting_user_id": 1,
            "receiving_organisation_id": 13416,
            "receiving_user_id": 1,
            "status": "INVITED",
            "valid_until": "2025-11-21T09:21:52.000000Z",
            "redeemed_at": null,
            "created_at": "2025-11-14T09:21:52.000000Z",
            "updated_at": "2025-11-14T09:21:52.000000Z",
            "receiving_organisation": {
                "id": 13416,
                "reference_id": "01-W9YDRR7VE2LEM-S",
                "type_id": 1,
                "name": "ZDHC Internal Admin",
                "address_1": "57125 Satterfield Extensions Suite 579",
                "address_2": "Apt. 505",
                "city": "Amsterdam",
                "state": "Amsterdam",
                "location": "NL",
                "zip": "18615-8510",
                "phone": "+1234567890",
                "email": "info@zdhc.org",
                "website": null,
                "avatar_url": null,
                "location_name": "Netherlands"
            },
            "receiving_user": {
                "id": 1,
                "email": "admin@localhost",
                "profile_picture_url": null
            },
            "inviting_user": {
                "id": 1,
                "email": "admin@localhost",
                "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: 20

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\": 6,
    \"email\": \"hauck.ivory@example.org\"
}"
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": 6,
    "email": "hauck.ivory@example.org"
};

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

email   string     

Must be a valid email address. Must not be greater than 254 characters. Example: hauck.ivory@example.org

Registration

Register

requires authentication

Register a new organisation.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/register/1?email=talia59%40example.org&user_id=31&user_is_registered=" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "user_first_name=xuqoorcyhwvxujgwtuisxc"\
    --form "user_last_name=cwzcaxgzeukjxbcfl"\
    --form "user_password=tihiccqsb"\
    --form "user_password_confirmation=optio"\
    --form "user_phone=pgqdmr"\
    --form "user_locale=fr_BE"\
    --form "user_location=dgvbzwciqzimlujhxq"\
    --form "name=ufxaepliyqr"\
    --form "legal_name=njmyovvqpalbacemoqfg"\
    --form "address_1=minus"\
    --form "city=waujcphbhgnztyqrksbi"\
    --form "state=idlbsjsfxxolnkwc"\
    --form "location=GA"\
    --form "zip=engzpdgofmtalfgowhfdh"\
    --form "phone=xdbk"\
    --form "email=petra43@example.net"\
    --form "contact_first_name=natus"\
    --form "contact_last_name=sed"\
    --form "website=djfytildthujwoiz"\
    --form "conformance_level_products[][id]=11"\
    --form "conformance_level_products[][count]=47"\
    --form "tas_document_id=id"\
    --form "tas_accepted=1"\
    --form "industry_ids[][id]=18"\
    --form "industry_ids[][value]=wzwylqwccrpkoetyx"\
    --form "safety_data_sheet=@/tmp/phpdMocBP" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/register/1"
);

const params = {
    "email": "talia59@example.org",
    "user_id": "31",
    "user_is_registered": "0",
};
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', 'xuqoorcyhwvxujgwtuisxc');
body.append('user_last_name', 'cwzcaxgzeukjxbcfl');
body.append('user_password', 'tihiccqsb');
body.append('user_password_confirmation', 'optio');
body.append('user_phone', 'pgqdmr');
body.append('user_locale', 'fr_BE');
body.append('user_location', 'dgvbzwciqzimlujhxq');
body.append('name', 'ufxaepliyqr');
body.append('legal_name', 'njmyovvqpalbacemoqfg');
body.append('address_1', 'minus');
body.append('city', 'waujcphbhgnztyqrksbi');
body.append('state', 'idlbsjsfxxolnkwc');
body.append('location', 'GA');
body.append('zip', 'engzpdgofmtalfgowhfdh');
body.append('phone', 'xdbk');
body.append('email', 'petra43@example.net');
body.append('contact_first_name', 'natus');
body.append('contact_last_name', 'sed');
body.append('website', 'djfytildthujwoiz');
body.append('conformance_level_products[][id]', '11');
body.append('conformance_level_products[][count]', '47');
body.append('tas_document_id', 'id');
body.append('tas_accepted', '1');
body.append('industry_ids[][id]', '18');
body.append('industry_ids[][value]', 'wzwylqwccrpkoetyx');
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: talia59@example.org

user_id   number     

required Example: 31

user_is_registered   boolean     

required Example: false

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

user_last_name   string     

(Only required for unregistered users). Must be at least 2 characters. Must not be greater than 50 characters. Example: cwzcaxgzeukjxbcfl

user_password   string     

(Only required for unregistered users). Must not be greater than 255 characters. Example: tihiccqsb

user_password_confirmation   string     

(Only required for unregistered users). The value and user_password must match. Example: optio

user_phone   string  optional    

(Only required for unregistered users). Must be at least 8 characters. Must not be greater than 20 characters. Example: pgqdmr

user_locale   string  optional    

(Only required for unregistered users). Must not be greater than 12 characters. Example: fr_BE

user_location   string  optional    

(Only required for unregistered users). Must not be greater than 255 characters. Example: dgvbzwciqzimlujhxq

name   string     

Must not be greater than 255 characters. Example: ufxaepliyqr

legal_name   string     

Must not be greater than 255 characters. Example: njmyovvqpalbacemoqfg

address_1   string     

Example: minus

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: waujcphbhgnztyqrksbi

state   string     

Must not be greater than 255 characters. Example: idlbsjsfxxolnkwc

location   string     

Example: GA

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

phone   string  optional    

Must be at least 8 characters. Must not be greater than 20 characters. Example: xdbk

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: petra43@example.net

contact_first_name   string     

Example: natus

contact_last_name   string     

Example: sed

website   string     

Must not be greater than 255 characters. Example: djfytildthujwoiz

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

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: wzwylqwccrpkoetyx

safety_data_sheet   file     

Must be a file. Example: /tmp/phpdMocBP

conformance_level_products   object[]     
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: 11

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 47

tas_document_id   string     

The id of an existing record in the App\Models\TermsAndServiceDocument table. Example: id

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/bda3dbd8-84c2-30ba-99a5-69a32b3134ed/status" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/bda3dbd8-84c2-30ba-99a5-69a32b3134ed/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": 225589,
        "reference_id": "01-CR698383XMWJ2-P",
        "pdc_id": null,
        "gateway_aid": null,
        "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
        "type_id": 2,
        "status": "approved",
        "name": "test-Supplier System",
        "legal_name": "Schroeder Ltd",
        "address_1": "149 Koss Dam Suite 796",
        "address_2": "Suite 708",
        "city": "Bergemouth",
        "state": "Michigan",
        "location": "BW",
        "zip": "26306",
        "phone": "+17728385594",
        "email": "yessenia18@bahringer.net",
        "contact_first_name": "Alfonzo",
        "contact_last_name": "Crooks",
        "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
        "avatar_url": null,
        "applicant_comment": null,
        "reviewer_comment": "Update your business registration document",
        "registration_mail_sent_at": "1994-04-10 08:31:47",
        "created_at": "2025-07-24T13:23:28.000000Z",
        "updated_at": "2026-03-24T08:26:00.000000Z",
        "reviewer_comment_category": null,
        "profile_reviewed_at": "2026-03-24 08:26:00",
        "profile_reviewed_by_user_id": 73080,
        "location_name": "Botswana",
        "type": {
            "id": 2,
            "name": "Supplier",
            "display_name": "Supplier",
            "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
            "selectable": 1,
            "created_at": "2025-11-14T09:21:46.000000Z",
            "updated_at": "2026-03-24T14:59:35.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: bda3dbd8-84c2-30ba-99a5-69a32b3134ed

Update

Update the organisations data from the user side.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/053afd29-1d7e-3064-99d2-1a178ec5d824/update" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=oqxuvwfccqpxunuum"\
    --form "legal_name=opd"\
    --form "address_1=accusamus"\
    --form "city=wvblvsul"\
    --form "state=vsiibz"\
    --form "location=CC"\
    --form "zip=mnfzjuplbwwcdajuisbsh"\
    --form "phone=+1234567890"\
    --form "email=pouros.cornell@example.net"\
    --form "contact_first_name=dolor"\
    --form "contact_last_name=molestiae"\
    --form "website=https://example.com"\
    --form "conformance_level_products[][id]=11"\
    --form "conformance_level_products[][count]=62"\
    --form "applicant_comment=culpa"\
    --form "industry_ids[][id]=7"\
    --form "industry_ids[][value]=bduzeuhw"\
    --form "safety_data_sheet=@/tmp/phpgHifbP" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/registration/053afd29-1d7e-3064-99d2-1a178ec5d824/update"
);

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

const body = new FormData();
body.append('name', 'oqxuvwfccqpxunuum');
body.append('legal_name', 'opd');
body.append('address_1', 'accusamus');
body.append('city', 'wvblvsul');
body.append('state', 'vsiibz');
body.append('location', 'CC');
body.append('zip', 'mnfzjuplbwwcdajuisbsh');
body.append('phone', '+1234567890');
body.append('email', 'pouros.cornell@example.net');
body.append('contact_first_name', 'dolor');
body.append('contact_last_name', 'molestiae');
body.append('website', 'https://example.com');
body.append('conformance_level_products[][id]', '11');
body.append('conformance_level_products[][count]', '62');
body.append('applicant_comment', 'culpa');
body.append('industry_ids[][id]', '7');
body.append('industry_ids[][value]', 'bduzeuhw');
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: 053afd29-1d7e-3064-99d2-1a178ec5d824

Body Parameters

name   string     

Must not be greater than 255 characters. Example: oqxuvwfccqpxunuum

legal_name   string     

Must not be greater than 255 characters. Example: opd

address_1   string     

Example: accusamus

address_2   string  optional    
city   string     

Must not be greater than 255 characters. Example: wvblvsul

state   string     

Must not be greater than 255 characters. Example: vsiibz

location   string     

Example: CC

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

phone   string  optional    

Must be at least 8 characters. Must not be greater than 20 characters. Example: +1234567890

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: pouros.cornell@example.net

contact_first_name   string     

Example: dolor

contact_last_name   string     

Example: molestiae

website   string     

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

value   string  optional    

This field is required when industry_ids.*.id is present. Must not be greater than 255 characters. Example: bduzeuhw

safety_data_sheet   file     

[ONLY: Chemical Formulators] Safety data sheet provided as a file upload. Must be a file. Example: /tmp/phpgHifbP

conformance_level_products   object[]     
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: 11

count   integer  optional    

This field is required when conformance_level_products.*.id is present. Must be at least 0. Example: 62

applicant_comment   string  optional    

Example: culpa

Subscriptions

Index

requires authentication

Get Subscriptions

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions?per_page=14&page=1&filter%5Bsubscribable_product_id%5D=9&filter%5Bstatus%5D=pariatur&filter%5Binvoice_created_at%5D=labore&filter%5Bstart_at%5D=ea&filter%5Bvalid_until%5D=et&filter%5Bcreated_at%5D=debitis&filter%5Bupdated_at%5D=et&search=ut&sort=id%2Csubscribable_product.name%2Cstatus%2Cinvoice_created_at%2Cstart_at%2Cvalid_until%2Ccreated_at%2Cupdated_at&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": "14",
    "page": "1",
    "filter[subscribable_product_id]": "9",
    "filter[status]": "pariatur",
    "filter[invoice_created_at]": "labore",
    "filter[start_at]": "ea",
    "filter[valid_until]": "et",
    "filter[created_at]": "debitis",
    "filter[updated_at]": "et",
    "search": "ut",
    "sort": "id,subscribable_product.name,status,invoice_created_at,start_at,valid_until,created_at,updated_at",
    "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": 1,
            "subscribable_product_id": 1,
            "status": "canceled",
            "selected_stairstep": null,
            "maxio_subscription_id": 346998,
            "maxio_payment_id": 5857700,
            "maxio_invoice_uid": "inv_c39knm3xrb9rv",
            "payment_status": null,
            "start_at": "2026-02-05T07:30:03.000000Z",
            "valid_until": "2027-02-05T07:30:03.000000Z",
            "invoice_created_at": "2026-02-05 07:30:03",
            "expired_at": null,
            "created_at": "2026-02-07T00:36:10.000000Z",
            "updated_at": "2026-03-20T09:28:59.000000Z",
            "deleted_at": null,
            "subscribable_product": {
                "id": 1,
                "subcribable_product_family_handle": "billing-plans",
                "subcribable_product_family_id": 2465,
                "name": "Chemical Formulator Yearly",
                "handle": "chemical-formulator-yearly",
                "maxio_product_id": 4807,
                "created_at": "2026-02-07T00:00:06.000000Z",
                "updated_at": "2026-02-07T00:00:06.000000Z",
                "deleted_at": null
            }
        },
        {
            "id": 1,
            "organisation_id": 1,
            "subscribable_product_id": 1,
            "status": "canceled",
            "selected_stairstep": null,
            "maxio_subscription_id": 346998,
            "maxio_payment_id": 5857700,
            "maxio_invoice_uid": "inv_c39knm3xrb9rv",
            "payment_status": null,
            "start_at": "2026-02-05T07:30:03.000000Z",
            "valid_until": "2027-02-05T07:30:03.000000Z",
            "invoice_created_at": "2026-02-05 07:30:03",
            "expired_at": null,
            "created_at": "2026-02-07T00:36:10.000000Z",
            "updated_at": "2026-03-20T09:28:59.000000Z",
            "deleted_at": null,
            "subscribable_product": {
                "id": 1,
                "subcribable_product_family_handle": "billing-plans",
                "subcribable_product_family_id": 2465,
                "name": "Chemical Formulator Yearly",
                "handle": "chemical-formulator-yearly",
                "maxio_product_id": 4807,
                "created_at": "2026-02-07T00:00:06.000000Z",
                "updated_at": "2026-02-07T00:00:06.000000Z",
                "deleted_at": null
            }
        }
    ]
}
 

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

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

filter[subscribable_products.handle]   string  optional    

Filter column subscribable_products.handle by any accepted value. Filter by product handle (multiple selection allowed) Example: corrupti

filter[status]   string  optional    

Filter column status by any accepted value. Filter by status (multiple selection allowed) Example: pariatur

filter[invoice_created_at]   datetime  optional    

Filter column invoice_created_at by any accepted value. Filter by invoice created date Example: labore

filter[start_at]   datetime  optional    

Filter column start_at by any accepted value. Filter by start date Example: ea

filter[valid_until]   datetime  optional    

Filter column valid_until by any accepted value. Filter by valid until date Example: et

filter[created_at]   datetime  optional    

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

filter[updated_at]   datetime  optional    

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

search   string  optional    

Search in all of these columns: subscribable_product.name Example: ut

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,subscribable_product.name,status,invoice_created_at,start_at,valid_until,created_at,updated_at

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": 1,
        "subscribable_product_id": 1,
        "status": "canceled",
        "selected_stairstep": null,
        "maxio_subscription_id": 346998,
        "maxio_payment_id": 5857700,
        "maxio_invoice_uid": "inv_c39knm3xrb9rv",
        "payment_status": null,
        "start_at": "2026-02-05T07:30:03.000000Z",
        "valid_until": "2027-02-05T07:30:03.000000Z",
        "invoice_created_at": "2026-02-05 07:30:03",
        "expired_at": null,
        "created_at": "2026-02-07T00:36:10.000000Z",
        "updated_at": "2026-03-20T09:28:59.000000Z",
        "deleted_at": null,
        "invoices": []
    }
}
 

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/maxime" \
    --header "Authorization: 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/maxime"
);

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

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/vel" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"coupon\": \"eqjsgyuptulebqowrwcseht\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/validate-coupons/vel"
);

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

let body = {
    "coupon": "eqjsgyuptulebqowrwcseht"
};

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

Body Parameters

coupon   string     

Must not be greater than 255 characters. Example: eqjsgyuptulebqowrwcseht

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.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/blanditiis" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_testing\": false,
    \"chargify_token\": \"xyyckcr\",
    \"collection_method\": \"automatic\",
    \"payment_profile_id\": 59,
    \"payment_type\": \"bank_transfer\",
    \"first_name\": \"spnbnvxtgymrl\",
    \"last_name\": \"grgc\",
    \"billing_first_name\": \"xocsxtpfqknvsdoulyfegmwa\",
    \"billing_last_name\": \"bxtljlq\",
    \"email\": \"peter.ryan@example.net\",
    \"locale\": \"fur_IT\",
    \"organization\": \"wn\",
    \"phone\": \"hemlqliluazwfuroip\",
    \"address\": \"ybohr\",
    \"address_2\": \"dxqrixaphxdjpolqhaeckydhc\",
    \"city\": \"jruvpprkvtcyiqkwv\",
    \"state\": \"cqhl\",
    \"country\": \"gqforqwwkduvijnrenifc\",
    \"zip\": \"zeulpxccukjauug\",
    \"billing_address\": \"czem\",
    \"billing_address_2\": \"itxfdtjsibjhzibhetlti\",
    \"billing_city\": \"bdohrtlgikvsbfxo\",
    \"billing_state\": \"zbjfeusyopgsssuhwdt\",
    \"billing_country\": \"smeksfg\",
    \"billing_zip\": \"raj\",
    \"coupon_codes\": [
        \"wkonzfxajsxtvrdrrlf\"
    ],
    \"components\": [
        {
            \"component_id\": 3,
            \"allocated_quantity\": 31,
            \"quantity\": 46,
            \"price_point_id\": 51
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/subscriptions/blanditiis"
);

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

let body = {
    "is_testing": false,
    "chargify_token": "xyyckcr",
    "collection_method": "automatic",
    "payment_profile_id": 59,
    "payment_type": "bank_transfer",
    "first_name": "spnbnvxtgymrl",
    "last_name": "grgc",
    "billing_first_name": "xocsxtpfqknvsdoulyfegmwa",
    "billing_last_name": "bxtljlq",
    "email": "peter.ryan@example.net",
    "locale": "fur_IT",
    "organization": "wn",
    "phone": "hemlqliluazwfuroip",
    "address": "ybohr",
    "address_2": "dxqrixaphxdjpolqhaeckydhc",
    "city": "jruvpprkvtcyiqkwv",
    "state": "cqhl",
    "country": "gqforqwwkduvijnrenifc",
    "zip": "zeulpxccukjauug",
    "billing_address": "czem",
    "billing_address_2": "itxfdtjsibjhzibhetlti",
    "billing_city": "bdohrtlgikvsbfxo",
    "billing_state": "zbjfeusyopgsssuhwdt",
    "billing_country": "smeksfg",
    "billing_zip": "raj",
    "coupon_codes": [
        "wkonzfxajsxtvrdrrlf"
    ],
    "components": [
        {
            "component_id": 3,
            "allocated_quantity": 31,
            "quantity": 46,
            "price_point_id": 51
        }
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "organisation_id": 1,
        "subscribable_product_id": 1,
        "status": "canceled",
        "selected_stairstep": null,
        "maxio_subscription_id": 346998,
        "maxio_payment_id": 5857700,
        "maxio_invoice_uid": "inv_c39knm3xrb9rv",
        "payment_status": null,
        "start_at": "2026-02-05T07:30:03.000000Z",
        "valid_until": "2027-02-05T07:30:03.000000Z",
        "invoice_created_at": "2026-02-05 07:30:03",
        "expired_at": null,
        "created_at": "2026-02-07T00:36:10.000000Z",
        "updated_at": "2026-03-20T09:28:59.000000Z",
        "deleted_at": null,
        "invoices": []
    }
}
 

Example response (400):


Organisation has no Maxio customer ID
 

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

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

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

Must be one of:
  • automatic
  • remittance
payment_profile_id   integer  optional    

Must be at least 1. Example: 59

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

last_name   string     

Must not be greater than 255 characters. Example: grgc

billing_first_name   string     

Must not be greater than 255 characters. Example: xocsxtpfqknvsdoulyfegmwa

billing_last_name   string     

Must not be greater than 255 characters. Example: bxtljlq

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: peter.ryan@example.net

locale   string  optional    

Must not be greater than 10 characters. Example: fur_IT

organization   string     

Must not be greater than 255 characters. Example: wn

phone   string     

Must not be greater than 255 characters. Example: hemlqliluazwfuroip

address   string     

Must not be greater than 255 characters. Example: ybohr

address_2   string  optional    

Must not be greater than 255 characters. Example: dxqrixaphxdjpolqhaeckydhc

city   string     

Must not be greater than 255 characters. Example: jruvpprkvtcyiqkwv

state   string     

Must not be greater than 255 characters. Example: cqhl

country   string     

Must not be greater than 255 characters. Example: gqforqwwkduvijnrenifc

zip   string     

Must not be greater than 255 characters. Example: zeulpxccukjauug

billing_address   string     

Must not be greater than 255 characters. Example: czem

billing_address_2   string  optional    

Must not be greater than 255 characters. Example: itxfdtjsibjhzibhetlti

billing_city   string     

Must not be greater than 255 characters. Example: bdohrtlgikvsbfxo

billing_state   string     

Must not be greater than 255 characters. Example: zbjfeusyopgsssuhwdt

billing_country   string     

Must not be greater than 255 characters. Example: smeksfg

billing_zip   string     

Must not be greater than 255 characters. Example: raj

components   object[]  optional    
component_id   integer     

Example: 3

allocated_quantity   number     

Must be at least 0. Example: 31

quantity   integer  optional    

Must be at least 0. Example: 46

price_point_id   integer     

Must be at least 1. Example: 51

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.

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\": true,
    \"chargify_token\": \"pcekdntwmgdoimyffjrnjozu\",
    \"collection_method\": \"automatic\",
    \"payment_profile_id\": 26,
    \"payment_type\": \"credit_card\",
    \"first_name\": \"kqaevmnqlrqqmfsncmvxnz\",
    \"last_name\": \"wiw\",
    \"billing_first_name\": \"bfinupteflcdzqkw\",
    \"billing_last_name\": \"mldwnjgxa\",
    \"email\": \"edison57@example.com\",
    \"locale\": \"gu_IN\",
    \"organization\": \"bsjbcrcsndaazkzuhoiwzg\",
    \"phone\": \"mgrgajlfm\",
    \"address\": \"cvozjqwedytodqmflqlp\",
    \"address_2\": \"qhjeljrfxfqjig\",
    \"city\": \"ghwxvipgzdfrojeexsrdapnyc\",
    \"state\": \"qazslqv\",
    \"country\": \"hbhwibanzbrbfky\",
    \"zip\": \"ymxooqzh\",
    \"billing_address\": \"spwexwpopfqbnagemjplklzo\",
    \"billing_address_2\": \"zyxjzsabwdvukkkdfgzgcrvig\",
    \"billing_city\": \"pvwbowr\",
    \"billing_state\": \"eljijqxvuh\",
    \"billing_country\": \"vt\",
    \"billing_zip\": \"vbzqxgsveigqsznyrpdmslmo\",
    \"components\": [
        {
            \"component_id\": 32,
            \"allocated_quantity\": 39
        }
    ]
}"
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": true,
    "chargify_token": "pcekdntwmgdoimyffjrnjozu",
    "collection_method": "automatic",
    "payment_profile_id": 26,
    "payment_type": "credit_card",
    "first_name": "kqaevmnqlrqqmfsncmvxnz",
    "last_name": "wiw",
    "billing_first_name": "bfinupteflcdzqkw",
    "billing_last_name": "mldwnjgxa",
    "email": "edison57@example.com",
    "locale": "gu_IN",
    "organization": "bsjbcrcsndaazkzuhoiwzg",
    "phone": "mgrgajlfm",
    "address": "cvozjqwedytodqmflqlp",
    "address_2": "qhjeljrfxfqjig",
    "city": "ghwxvipgzdfrojeexsrdapnyc",
    "state": "qazslqv",
    "country": "hbhwibanzbrbfky",
    "zip": "ymxooqzh",
    "billing_address": "spwexwpopfqbnagemjplklzo",
    "billing_address_2": "zyxjzsabwdvukkkdfgzgcrvig",
    "billing_city": "pvwbowr",
    "billing_state": "eljijqxvuh",
    "billing_country": "vt",
    "billing_zip": "vbzqxgsveigqsznyrpdmslmo",
    "components": [
        {
            "component_id": 32,
            "allocated_quantity": 39
        }
    ]
};

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

Example response (200):


{
    "data": {
        "id": 1,
        "organisation_id": 1,
        "subscribable_product_id": 1,
        "status": "canceled",
        "selected_stairstep": null,
        "maxio_subscription_id": 346998,
        "maxio_payment_id": 5857700,
        "maxio_invoice_uid": "inv_c39knm3xrb9rv",
        "payment_status": null,
        "start_at": "2026-02-05T07:30:03.000000Z",
        "valid_until": "2027-02-05T07:30:03.000000Z",
        "invoice_created_at": "2026-02-05 07:30:03",
        "expired_at": null,
        "created_at": "2026-02-07T00:36:10.000000Z",
        "updated_at": "2026-03-20T09:28:59.000000Z",
        "deleted_at": null,
        "invoices": []
    }
}
 

Example response (400):


Organisation has no Maxio customer ID
 

Example response (422):


Component is not a stairstep of this subscription's product; or only upgrades allowed (no downgrade)
 

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

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

collection_method   string     

Collection method. Use "automatic" for immediate charge with payment details, "remittance" for invoice. Same as create. Example: automatic

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

payment_type   string     

Payment type: credit_card or bank_transfer. Same as create. Example: credit_card

Must be one of:
  • credit_card
  • bank_transfer
first_name   string     

Must not be greater than 255 characters. Example: kqaevmnqlrqqmfsncmvxnz

last_name   string     

Must not be greater than 255 characters. Example: wiw

billing_first_name   string     

Must not be greater than 255 characters. Example: bfinupteflcdzqkw

billing_last_name   string     

Must not be greater than 255 characters. Example: mldwnjgxa

email   string     

Must be a valid email address. Must not be greater than 255 characters. Example: edison57@example.com

locale   string  optional    

Locale (e.g. en, de). Optional, defaults to en. Must not be greater than 10 characters. Example: gu_IN

organization   string     

Must not be greater than 255 characters. Example: bsjbcrcsndaazkzuhoiwzg

phone   string     

Must not be greater than 255 characters. Example: mgrgajlfm

address   string     

Must not be greater than 255 characters. Example: cvozjqwedytodqmflqlp

address_2   string  optional    

Must not be greater than 255 characters. Example: qhjeljrfxfqjig

city   string     

Must not be greater than 255 characters. Example: ghwxvipgzdfrojeexsrdapnyc

state   string     

Must not be greater than 255 characters. Example: qazslqv

country   string     

Must not be greater than 255 characters. Example: hbhwibanzbrbfky

zip   string     

Must not be greater than 255 characters. Example: ymxooqzh

billing_address   string     

Must not be greater than 255 characters. Example: spwexwpopfqbnagemjplklzo

billing_address_2   string  optional    

Must not be greater than 255 characters. Example: zyxjzsabwdvukkkdfgzgcrvig

billing_city   string     

Must not be greater than 255 characters. Example: pvwbowr

billing_state   string     

Must not be greater than 255 characters. Example: eljijqxvuh

billing_country   string     

Must not be greater than 255 characters. Example: vt

billing_zip   string     

Must not be greater than 255 characters. Example: vbzqxgsveigqsznyrpdmslmo

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

allocated_quantity   integer     

Must be at least 1. Example: 39

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%2Cdisplay_name%2Cselectable%2Ccreated_at%2Cupdated_at&page=1&search=fugiat" \
    --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,display_name,selectable,created_at,updated_at",
    "page": "1",
    "search": "fugiat",
};
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": "Ut ducimus eveniet voluptate debitis sequi. Saepe accusamus rerum occaecati illo. Doloribus eos nostrum saepe unde. Enim nesciunt doloremque aut rem.",
            "selectable": 0,
            "created_at": "2025-11-14T09:21:46.000000Z",
            "updated_at": "2026-03-24T14:59:35.000000Z"
        },
        {
            "id": 1,
            "name": "ZDHC Internal",
            "display_name": "ZDHC Internal",
            "description": "Ut ducimus eveniet voluptate debitis sequi. Saepe accusamus rerum occaecati illo. Doloribus eos nostrum saepe unde. Enim nesciunt doloremque aut rem.",
            "selectable": 0,
            "created_at": "2025-11-14T09:21:46.000000Z",
            "updated_at": "2026-03-24T14:59:35.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,display_name,selectable,created_at,updated_at

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: name Example: fugiat

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\": \"md\",
    \"display_name\": \"geqjndrqakkvmbaevundd\",
    \"description\": \"Assumenda inventore quibusdam reiciendis recusandae.\",
    \"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": "md",
    "display_name": "geqjndrqakkvmbaevundd",
    "description": "Assumenda inventore quibusdam reiciendis recusandae.",
    "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: md

display_name   string     

Must not be greater than 255 characters. Example: geqjndrqakkvmbaevundd

description   string  optional    

Must not be greater than 65535 characters. Example: Assumenda inventore quibusdam reiciendis recusandae.

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\": \"tvxmaregrbxcatkiebnrx\",
    \"display_name\": \"ounjgwj\",
    \"description\": \"Temporibus eligendi tempore est doloremque vero quia.\",
    \"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": "tvxmaregrbxcatkiebnrx",
    "display_name": "ounjgwj",
    "description": "Temporibus eligendi tempore est doloremque vero quia.",
    "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: tvxmaregrbxcatkiebnrx

display_name   string     

Must not be greater than 255 characters. Example: ounjgwj

description   string  optional    

Must not be greater than 65535 characters. Example: Temporibus eligendi tempore est doloremque vero quia.

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=14&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": "14",
    "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": 1,
            "user_id": 1,
            "invited_by": null,
            "role_id": 4,
            "last_authorization": "2025-12-02T13:51:01.000000Z",
            "invitation_sent_at": "2025-11-14T09:21:52.000000Z",
            "invitation_accepted_at": "2025-11-14T09:21:52.000000Z",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2025-12-02T13:51:01.000000Z",
            "deleted_at": null,
            "user": {
                "id": 1,
                "first_name": "System",
                "last_name": "User",
                "email": "admin@localhost",
                "email_verified_at": null,
                "phone": "+13523381248",
                "location": null,
                "created_at": "2025-07-24T13:23:18.000000Z",
                "updated_at": "2025-12-08T15:12:52.000000Z",
                "deleted_at": null,
                "profile_picture_url": null
            },
            "role": {
                "id": 4,
                "parent_id": 3,
                "name": "ORGANISATION_ADMIN"
            }
        },
        {
            "id": 1,
            "organisation_id": 1,
            "user_id": 1,
            "invited_by": null,
            "role_id": 4,
            "last_authorization": "2025-12-02T13:51:01.000000Z",
            "invitation_sent_at": "2025-11-14T09:21:52.000000Z",
            "invitation_accepted_at": "2025-11-14T09:21:52.000000Z",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2025-12-02T13:51:01.000000Z",
            "deleted_at": null,
            "user": {
                "id": 1,
                "first_name": "System",
                "last_name": "User",
                "email": "admin@localhost",
                "email_verified_at": null,
                "phone": "+13523381248",
                "location": null,
                "created_at": "2025-07-24T13:23:18.000000Z",
                "updated_at": "2025-12-08T15:12:52.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: 14

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/1/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/1/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": 1,
        "user_id": 1,
        "invited_by": null,
        "role_id": 4,
        "last_authorization": "2025-12-02T13:51:01.000000Z",
        "invitation_sent_at": "2025-11-14T09:21:52.000000Z",
        "invitation_accepted_at": "2025-11-14T09:21:52.000000Z",
        "created_at": "2025-07-24T13:23:28.000000Z",
        "updated_at": "2025-12-02T13:51:01.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: 1

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\": [
        \"itzel.grady@example.net\"
    ]
}"
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": [
        "itzel.grady@example.net"
    ]
};

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[]     

Must be a valid email address.

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/1/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/1/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: 1

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/1/role/change" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"role_id\": 6
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisations/1/users/1/role/change"
);

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

let body = {
    "role_id": 6
};

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

Body Parameters

role_id   integer     

The ID of the role to change the user to. Example: 6

Detach

requires authentication

Detach a user from an organisation.

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

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": 1,
        "organisation_id": 1,
        "facility_type_id": 8,
        "discharge_volume": 100,
        "discharge_points_count": 1,
        "sludge_generation": 100,
        "created_at": "2025-11-14T09:22:11.000000Z",
        "updated_at": "2025-11-14T09:22:11.000000Z",
        "attributes": [
            {
                "id": 163,
                "external_id": null,
                "group_id": 9,
                "parent_id": null,
                "short": null,
                "name": "Thermoplastic polyurethane (TPU)",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 163
                }
            },
            {
                "id": 197,
                "external_id": null,
                "group_id": 10,
                "parent_id": null,
                "short": null,
                "name": "Molding",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 197
                }
            },
            {
                "id": 242,
                "external_id": null,
                "group_id": 11,
                "parent_id": null,
                "short": null,
                "name": "Organic solvents",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 242
                }
            },
            {
                "id": 277,
                "external_id": null,
                "group_id": 12,
                "parent_id": null,
                "short": null,
                "name": "None",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 277
                }
            },
            {
                "id": 278,
                "external_id": null,
                "group_id": 13,
                "parent_id": null,
                "short": null,
                "name": "Direct",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 278
                }
            },
            {
                "id": 284,
                "external_id": null,
                "group_id": 14,
                "parent_id": null,
                "short": null,
                "name": "Tertiary",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 284
                }
            },
            {
                "id": 301,
                "external_id": null,
                "group_id": 15,
                "parent_id": null,
                "short": null,
                "name": "Nanofiltration",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 301
                }
            },
            {
                "id": 314,
                "external_id": null,
                "group_id": 16,
                "parent_id": null,
                "short": null,
                "name": "Disposal Pathway B: Landfill with Significant Control Measures",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 1,
                    "attribute_id": 314
                }
            }
        ]
    }
}
 

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=reiciendis&attributes[]=14168&discharge_volume=25&discharge_points_count=3&sludge_generation=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/supplier-profile/update"
);

const params = {
    "facility_type_id": "reiciendis",
    "attributes[0]": "14168",
    "discharge_volume": "25",
    "discharge_points_count": "3",
    "sludge_generation": "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: "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: reiciendis

attributes   string[]  optional    
Must be one of:
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 4519
  • 4536
  • 4598
  • 4599
  • 4600
  • 4601
  • 4602
  • 4603
  • 4632
  • 4633
  • 4634
  • 4635
  • 4636
  • 4637
  • 4638
  • 4639
  • 4640
  • 4641
  • 4642
  • 4643
  • 4644
  • 4645
  • 4646
  • 4647
  • 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
  • 4729
  • 4730
  • 4731
  • 4732
  • 4733
  • 4734
  • 4735
  • 4736
  • 4737
  • 4738
  • 4739
  • 4740
  • 4757
  • 4819
  • 4820
  • 4821
  • 4822
  • 4823
  • 4824
  • 4853
  • 4854
  • 4855
  • 4856
  • 4857
  • 4858
  • 4859
  • 4860
  • 4861
  • 4862
  • 4863
  • 4864
  • 4865
  • 4866
  • 4867
  • 4868
  • 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
  • 4950
  • 4951
  • 4952
  • 4953
  • 4954
  • 4955
  • 4956
  • 4957
  • 4958
  • 4959
  • 4960
  • 4961
  • 4978
  • 5040
  • 5041
  • 5042
  • 5043
  • 5044
  • 5045
  • 5074
  • 5075
  • 5076
  • 5077
  • 5078
  • 5079
  • 5080
  • 5081
  • 5082
  • 5083
  • 5084
  • 5085
  • 5086
  • 5087
  • 5088
  • 5089
  • 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
  • 5171
  • 5172
  • 5173
  • 5174
  • 5175
  • 5176
  • 5177
  • 5178
  • 5179
  • 5180
  • 5181
  • 5182
  • 5199
  • 5261
  • 5262
  • 5263
  • 5264
  • 5265
  • 5266
  • 5295
  • 5296
  • 5297
  • 5298
  • 5299
  • 5300
  • 5301
  • 5302
  • 5303
  • 5304
  • 5305
  • 5306
  • 5307
  • 5308
  • 5309
  • 5310
  • 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
  • 5392
  • 5393
  • 5394
  • 5395
  • 5396
  • 5397
  • 5398
  • 5399
  • 5400
  • 5401
  • 5402
  • 5403
  • 5420
  • 5482
  • 5483
  • 5484
  • 5485
  • 5486
  • 5487
  • 5516
  • 5517
  • 5518
  • 5519
  • 5520
  • 5521
  • 5522
  • 5523
  • 5524
  • 5525
  • 5526
  • 5527
  • 5528
  • 5529
  • 5530
  • 5531
  • 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
  • 5613
  • 5614
  • 5615
  • 5616
  • 5617
  • 5618
  • 5619
  • 5620
  • 5621
  • 5622
  • 5623
  • 5624
  • 5641
  • 5703
  • 5704
  • 5705
  • 5706
  • 5707
  • 5708
  • 5737
  • 5738
  • 5739
  • 5740
  • 5741
  • 5742
  • 5743
  • 5744
  • 5745
  • 5746
  • 5747
  • 5748
  • 5749
  • 5750
  • 5751
  • 5752
  • 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
  • 5834
  • 5835
  • 5836
  • 5837
  • 5838
  • 5839
  • 5840
  • 5841
  • 5842
  • 5843
  • 5844
  • 5845
  • 5862
  • 5924
  • 5925
  • 5926
  • 5927
  • 5928
  • 5929
  • 5958
  • 5959
  • 5960
  • 5961
  • 5962
  • 5963
  • 5964
  • 5965
  • 5966
  • 5967
  • 5968
  • 5969
  • 5970
  • 5971
  • 5972
  • 5973
  • 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
  • 6055
  • 6056
  • 6057
  • 6058
  • 6059
  • 6060
  • 6061
  • 6062
  • 6063
  • 6064
  • 6065
  • 6066
  • 6083
  • 6145
  • 6146
  • 6147
  • 6148
  • 6149
  • 6150
  • 6179
  • 6180
  • 6181
  • 6182
  • 6183
  • 6184
  • 6185
  • 6186
  • 6187
  • 6188
  • 6189
  • 6190
  • 6191
  • 6192
  • 6193
  • 6194
  • 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
  • 6276
  • 6277
  • 6278
  • 6279
  • 6280
  • 6281
  • 6282
  • 6283
  • 6284
  • 6285
  • 6286
  • 6287
  • 6304
  • 6366
  • 6367
  • 6368
  • 6369
  • 6370
  • 6371
  • 6400
  • 6401
  • 6402
  • 6403
  • 6404
  • 6405
  • 6406
  • 6407
  • 6408
  • 6409
  • 6410
  • 6411
  • 6412
  • 6413
  • 6414
  • 6415
  • 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
  • 6497
  • 6498
  • 6499
  • 6500
  • 6501
  • 6502
  • 6503
  • 6504
  • 6505
  • 6506
  • 6507
  • 6508
  • 6525
  • 6587
  • 6588
  • 6589
  • 6590
  • 6591
  • 6592
  • 6621
  • 6622
  • 6623
  • 6624
  • 6625
  • 6626
  • 6627
  • 6628
  • 6629
  • 6630
  • 6631
  • 6632
  • 6633
  • 6634
  • 6635
  • 6636
  • 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
  • 6718
  • 6719
  • 6720
  • 6721
  • 6722
  • 6723
  • 6724
  • 6725
  • 6726
  • 6727
  • 6728
  • 6729
  • 6746
  • 6808
  • 6809
  • 6810
  • 6811
  • 6812
  • 6813
  • 6842
  • 6843
  • 6844
  • 6845
  • 6846
  • 6847
  • 6848
  • 6849
  • 6850
  • 6851
  • 6852
  • 6853
  • 6854
  • 6855
  • 6856
  • 6857
  • 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
  • 6939
  • 6940
  • 6941
  • 6942
  • 6943
  • 6944
  • 6945
  • 6946
  • 6947
  • 6948
  • 6949
  • 6950
  • 6967
  • 7029
  • 7030
  • 7031
  • 7032
  • 7033
  • 7034
  • 7063
  • 7064
  • 7065
  • 7066
  • 7067
  • 7068
  • 7069
  • 7070
  • 7071
  • 7072
  • 7073
  • 7074
  • 7075
  • 7076
  • 7077
  • 7078
  • 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
  • 7159
  • 7160
  • 7161
  • 7162
  • 7163
  • 7164
  • 7165
  • 7166
  • 7167
  • 7168
  • 7169
  • 7170
  • 7171
  • 7188
  • 7250
  • 7251
  • 7252
  • 7253
  • 7254
  • 7255
  • 7284
  • 7285
  • 7286
  • 7287
  • 7288
  • 7289
  • 7290
  • 7291
  • 7292
  • 7293
  • 7294
  • 7295
  • 7296
  • 7297
  • 7298
  • 7299
  • 7347
  • 7348
  • 7349
  • 7350
  • 7351
  • 7352
  • 7353
  • 7354
  • 7355
  • 7356
  • 7357
  • 7358
  • 7359
  • 7360
  • 7361
  • 7362
  • 7363
  • 7364
  • 7365
  • 7366
  • 7367
  • 7368
  • 7369
  • 7370
  • 7371
  • 7372
  • 7373
  • 7374
  • 7375
  • 7376
  • 7377
  • 7378
  • 7379
  • 7380
  • 7381
  • 7382
  • 7383
  • 7384
  • 7385
  • 7386
  • 7387
  • 7388
  • 7389
  • 7390
  • 7391
  • 7392
  • 7409
  • 7471
  • 7472
  • 7473
  • 7474
  • 7475
  • 7476
  • 7505
  • 7506
  • 7507
  • 7508
  • 7509
  • 7510
  • 7511
  • 7512
  • 7513
  • 7514
  • 7515
  • 7516
  • 7517
  • 7518
  • 7519
  • 7520
  • 7568
  • 7569
  • 7570
  • 7571
  • 7572
  • 7573
  • 7574
  • 7575
  • 7576
  • 7577
  • 7578
  • 7579
  • 7580
  • 7581
  • 7582
  • 7583
  • 7584
  • 7585
  • 7586
  • 7587
  • 7588
  • 7589
  • 7590
  • 7591
  • 7592
  • 7593
  • 7594
  • 7595
  • 7596
  • 7597
  • 7598
  • 7599
  • 7600
  • 7601
  • 7602
  • 7603
  • 7604
  • 7605
  • 7606
  • 7607
  • 7608
  • 7609
  • 7610
  • 7611
  • 7612
  • 7613
  • 7630
  • 7692
  • 7693
  • 7694
  • 7695
  • 7696
  • 7697
  • 7726
  • 7727
  • 7728
  • 7729
  • 7730
  • 7731
  • 7732
  • 7733
  • 7734
  • 7735
  • 7736
  • 7737
  • 7738
  • 7739
  • 7740
  • 7741
  • 7789
  • 7790
  • 7791
  • 7792
  • 7793
  • 7794
  • 7795
  • 7796
  • 7797
  • 7798
  • 7799
  • 7800
  • 7801
  • 7802
  • 7803
  • 7804
  • 7805
  • 7806
  • 7807
  • 7808
  • 7809
  • 7810
  • 7811
  • 7812
  • 7813
  • 7814
  • 7815
  • 7816
  • 7817
  • 7818
  • 7819
  • 7820
  • 7821
  • 7822
  • 7823
  • 7824
  • 7825
  • 7826
  • 7827
  • 7828
  • 7829
  • 7830
  • 7831
  • 7832
  • 7833
  • 7834
  • 7851
  • 7913
  • 7914
  • 7915
  • 7916
  • 7917
  • 7918
  • 7947
  • 7948
  • 7949
  • 7950
  • 7951
  • 7952
  • 7953
  • 7954
  • 7955
  • 7956
  • 7957
  • 7958
  • 7959
  • 7960
  • 7961
  • 7962
  • 8010
  • 8011
  • 8012
  • 8013
  • 8014
  • 8015
  • 8016
  • 8017
  • 8018
  • 8019
  • 8020
  • 8021
  • 8022
  • 8023
  • 8024
  • 8025
  • 8026
  • 8027
  • 8028
  • 8029
  • 8030
  • 8031
  • 8032
  • 8033
  • 8034
  • 8035
  • 8036
  • 8037
  • 8038
  • 8039
  • 8040
  • 8041
  • 8042
  • 8043
  • 8044
  • 8045
  • 8046
  • 8047
  • 8048
  • 8049
  • 8050
  • 8051
  • 8052
  • 8053
  • 8054
  • 8055
  • 8072
  • 8134
  • 8135
  • 8136
  • 8137
  • 8138
  • 8139
  • 8168
  • 8169
  • 8170
  • 8171
  • 8172
  • 8173
  • 8174
  • 8175
  • 8176
  • 8177
  • 8178
  • 8179
  • 8180
  • 8181
  • 8182
  • 8183
  • 8231
  • 8232
  • 8233
  • 8234
  • 8235
  • 8236
  • 8237
  • 8238
  • 8239
  • 8240
  • 8241
  • 8242
  • 8243
  • 8244
  • 8245
  • 8246
  • 8247
  • 8248
  • 8249
  • 8250
  • 8251
  • 8252
  • 8253
  • 8254
  • 8255
  • 8256
  • 8257
  • 8258
  • 8259
  • 8260
  • 8261
  • 8262
  • 8263
  • 8264
  • 8265
  • 8266
  • 8267
  • 8268
  • 8269
  • 8270
  • 8271
  • 8272
  • 8273
  • 8274
  • 8275
  • 8276
  • 8293
  • 8355
  • 8356
  • 8357
  • 8358
  • 8359
  • 8360
  • 8389
  • 8390
  • 8391
  • 8392
  • 8393
  • 8394
  • 8395
  • 8396
  • 8397
  • 8398
  • 8399
  • 8400
  • 8401
  • 8402
  • 8403
  • 8404
  • 8452
  • 8453
  • 8454
  • 8455
  • 8456
  • 8457
  • 8458
  • 8459
  • 8460
  • 8461
  • 8462
  • 8463
  • 8464
  • 8465
  • 8466
  • 8467
  • 8468
  • 8469
  • 8470
  • 8471
  • 8472
  • 8473
  • 8474
  • 8475
  • 8476
  • 8477
  • 8478
  • 8479
  • 8480
  • 8481
  • 8482
  • 8483
  • 8484
  • 8485
  • 8486
  • 8487
  • 8488
  • 8489
  • 8490
  • 8491
  • 8492
  • 8493
  • 8494
  • 8495
  • 8496
  • 8497
  • 8514
  • 8576
  • 8577
  • 8578
  • 8579
  • 8580
  • 8581
  • 8610
  • 8611
  • 8612
  • 8613
  • 8614
  • 8615
  • 8616
  • 8617
  • 8618
  • 8619
  • 8620
  • 8621
  • 8622
  • 8623
  • 8624
  • 8625
  • 8673
  • 8674
  • 8675
  • 8676
  • 8677
  • 8678
  • 8679
  • 8680
  • 8681
  • 8682
  • 8683
  • 8684
  • 8685
  • 8686
  • 8687
  • 8688
  • 8689
  • 8690
  • 8691
  • 8692
  • 8693
  • 8694
  • 8695
  • 8696
  • 8697
  • 8698
  • 8699
  • 8700
  • 8701
  • 8702
  • 8703
  • 8704
  • 8705
  • 8706
  • 8707
  • 8708
  • 8709
  • 8710
  • 8711
  • 8712
  • 8713
  • 8714
  • 8715
  • 8716
  • 8717
  • 8718
  • 8735
  • 8797
  • 8798
  • 8799
  • 8800
  • 8801
  • 8802
  • 8831
  • 8832
  • 8833
  • 8834
  • 8835
  • 8836
  • 8837
  • 8838
  • 8839
  • 8840
  • 8841
  • 8842
  • 8843
  • 8844
  • 8845
  • 8846
  • 8894
  • 8895
  • 8896
  • 8897
  • 8898
  • 8899
  • 8900
  • 8901
  • 8902
  • 8903
  • 8904
  • 8905
  • 8906
  • 8907
  • 8908
  • 8909
  • 8910
  • 8911
  • 8912
  • 8913
  • 8914
  • 8915
  • 8916
  • 8917
  • 8918
  • 8919
  • 8920
  • 8921
  • 8922
  • 8923
  • 8924
  • 8925
  • 8926
  • 8927
  • 8928
  • 8929
  • 8930
  • 8931
  • 8932
  • 8933
  • 8934
  • 8935
  • 8936
  • 8937
  • 8938
  • 8939
  • 8956
  • 9018
  • 9019
  • 9020
  • 9021
  • 9022
  • 9023
  • 9052
  • 9053
  • 9054
  • 9055
  • 9056
  • 9057
  • 9058
  • 9059
  • 9060
  • 9061
  • 9062
  • 9063
  • 9064
  • 9065
  • 9066
  • 9067
  • 9115
  • 9116
  • 9117
  • 9118
  • 9119
  • 9120
  • 9121
  • 9122
  • 9123
  • 9124
  • 9125
  • 9126
  • 9127
  • 9128
  • 9129
  • 9130
  • 9131
  • 9132
  • 9133
  • 9134
  • 9135
  • 9136
  • 9137
  • 9138
  • 9139
  • 9140
  • 9141
  • 9142
  • 9143
  • 9144
  • 9145
  • 9146
  • 9147
  • 9148
  • 9149
  • 9150
  • 9151
  • 9152
  • 9153
  • 9154
  • 9155
  • 9156
  • 9157
  • 9158
  • 9159
  • 9160
  • 9177
  • 9239
  • 9240
  • 9241
  • 9242
  • 9243
  • 9244
  • 9273
  • 9274
  • 9275
  • 9276
  • 9277
  • 9278
  • 9279
  • 9280
  • 9281
  • 9282
  • 9283
  • 9284
  • 9285
  • 9286
  • 9287
  • 9288
  • 9336
  • 9337
  • 9338
  • 9339
  • 9340
  • 9341
  • 9342
  • 9343
  • 9344
  • 9345
  • 9346
  • 9347
  • 9348
  • 9349
  • 9350
  • 9351
  • 9352
  • 9353
  • 9354
  • 9355
  • 9356
  • 9357
  • 9358
  • 9359
  • 9360
  • 9361
  • 9362
  • 9363
  • 9364
  • 9365
  • 9366
  • 9367
  • 9368
  • 9369
  • 9370
  • 9371
  • 9372
  • 9373
  • 9374
  • 9375
  • 9376
  • 9377
  • 9378
  • 9379
  • 9380
  • 9381
  • 9398
  • 9460
  • 9461
  • 9462
  • 9463
  • 9464
  • 9465
  • 9494
  • 9495
  • 9496
  • 9497
  • 9498
  • 9499
  • 9500
  • 9501
  • 9502
  • 9503
  • 9504
  • 9505
  • 9506
  • 9507
  • 9508
  • 9509
  • 9557
  • 9558
  • 9559
  • 9560
  • 9561
  • 9562
  • 9563
  • 9564
  • 9565
  • 9566
  • 9567
  • 9568
  • 9569
  • 9570
  • 9571
  • 9572
  • 9573
  • 9574
  • 9575
  • 9576
  • 9577
  • 9578
  • 9579
  • 9580
  • 9581
  • 9582
  • 9583
  • 9584
  • 9585
  • 9586
  • 9587
  • 9588
  • 9589
  • 9590
  • 9591
  • 9592
  • 9593
  • 9594
  • 9595
  • 9596
  • 9597
  • 9598
  • 9599
  • 9600
  • 9601
  • 9602
  • 9619
  • 9681
  • 9682
  • 9683
  • 9684
  • 9685
  • 9686
  • 9715
  • 9716
  • 9717
  • 9718
  • 9719
  • 9720
  • 9721
  • 9722
  • 9723
  • 9724
  • 9725
  • 9726
  • 9727
  • 9728
  • 9729
  • 9730
  • 9731
  • 9748
  • 9810
  • 9811
  • 9812
  • 9813
  • 9814
  • 9815
  • 9844
  • 9845
  • 9846
  • 9847
  • 9848
  • 9849
  • 9850
  • 9851
  • 9852
  • 9853
  • 9854
  • 9855
  • 9856
  • 9857
  • 9858
  • 9859
  • 9907
  • 9908
  • 9909
  • 9910
  • 9911
  • 9912
  • 9913
  • 9914
  • 9915
  • 9916
  • 9917
  • 9918
  • 9919
  • 9920
  • 9921
  • 9922
  • 9923
  • 9924
  • 9925
  • 9926
  • 9927
  • 9928
  • 9929
  • 9930
  • 9931
  • 9932
  • 9933
  • 9934
  • 9935
  • 9936
  • 9937
  • 9938
  • 9939
  • 9940
  • 9941
  • 9942
  • 9943
  • 9944
  • 9945
  • 9946
  • 9947
  • 9948
  • 9949
  • 9950
  • 9951
  • 9952
  • 9969
  • 10031
  • 10032
  • 10033
  • 10034
  • 10035
  • 10036
  • 10065
  • 10066
  • 10067
  • 10068
  • 10069
  • 10070
  • 10071
  • 10072
  • 10073
  • 10074
  • 10075
  • 10076
  • 10077
  • 10078
  • 10079
  • 10080
  • 10128
  • 10129
  • 10130
  • 10131
  • 10132
  • 10133
  • 10134
  • 10135
  • 10136
  • 10137
  • 10138
  • 10139
  • 10140
  • 10141
  • 10142
  • 10143
  • 10144
  • 10145
  • 10146
  • 10147
  • 10148
  • 10149
  • 10150
  • 10151
  • 10152
  • 10153
  • 10154
  • 10155
  • 10156
  • 10157
  • 10158
  • 10159
  • 10160
  • 10161
  • 10162
  • 10163
  • 10164
  • 10165
  • 10166
  • 10167
  • 10168
  • 10169
  • 10170
  • 10171
  • 10172
  • 10173
  • 10190
  • 10252
  • 10253
  • 10254
  • 10255
  • 10256
  • 10257
  • 10286
  • 10287
  • 10288
  • 10289
  • 10290
  • 10291
  • 10292
  • 10293
  • 10294
  • 10295
  • 10296
  • 10297
  • 10298
  • 10299
  • 10300
  • 10301
  • 10349
  • 10350
  • 10351
  • 10352
  • 10353
  • 10354
  • 10355
  • 10356
  • 10357
  • 10358
  • 10359
  • 10360
  • 10361
  • 10362
  • 10363
  • 10364
  • 10365
  • 10366
  • 10367
  • 10368
  • 10369
  • 10370
  • 10371
  • 10372
  • 10373
  • 10374
  • 10375
  • 10376
  • 10377
  • 10378
  • 10379
  • 10380
  • 10381
  • 10382
  • 10383
  • 10384
  • 10385
  • 10386
  • 10387
  • 10388
  • 10389
  • 10390
  • 10391
  • 10392
  • 10393
  • 10394
  • 10411
  • 10473
  • 10474
  • 10475
  • 10476
  • 10477
  • 10478
  • 10507
  • 10508
  • 10509
  • 10510
  • 10511
  • 10512
  • 10513
  • 10514
  • 10515
  • 10516
  • 10517
  • 10518
  • 10519
  • 10520
  • 10521
  • 10522
  • 10570
  • 10571
  • 10572
  • 10573
  • 10574
  • 10575
  • 10576
  • 10577
  • 10578
  • 10579
  • 10580
  • 10581
  • 10582
  • 10583
  • 10584
  • 10585
  • 10586
  • 10587
  • 10588
  • 10589
  • 10590
  • 10591
  • 10592
  • 10593
  • 10594
  • 10595
  • 10596
  • 10597
  • 10598
  • 10599
  • 10600
  • 10601
  • 10602
  • 10603
  • 10604
  • 10605
  • 10606
  • 10607
  • 10608
  • 10609
  • 10610
  • 10611
  • 10612
  • 10613
  • 10614
  • 10615
  • 10632
  • 10694
  • 10695
  • 10696
  • 10697
  • 10698
  • 10699
  • 10728
  • 10729
  • 10730
  • 10731
  • 10732
  • 10733
  • 10734
  • 10735
  • 10736
  • 10737
  • 10738
  • 10739
  • 10740
  • 10741
  • 10742
  • 10743
  • 10791
  • 10792
  • 10793
  • 10794
  • 10795
  • 10796
  • 10797
  • 10798
  • 10799
  • 10800
  • 10801
  • 10802
  • 10803
  • 10804
  • 10805
  • 10806
  • 10807
  • 10808
  • 10809
  • 10810
  • 10811
  • 10812
  • 10813
  • 10814
  • 10815
  • 10816
  • 10817
  • 10818
  • 10819
  • 10820
  • 10821
  • 10822
  • 10823
  • 10824
  • 10825
  • 10826
  • 10827
  • 10828
  • 10829
  • 10830
  • 10831
  • 10832
  • 10833
  • 10834
  • 10835
  • 10836
  • 10853
  • 10915
  • 10916
  • 10917
  • 10918
  • 10919
  • 10920
  • 10949
  • 10950
  • 10951
  • 10952
  • 10953
  • 10954
  • 10955
  • 10956
  • 10957
  • 10958
  • 10959
  • 10960
  • 10961
  • 10962
  • 10963
  • 10964
  • 11012
  • 11013
  • 11014
  • 11015
  • 11016
  • 11017
  • 11018
  • 11019
  • 11020
  • 11021
  • 11022
  • 11023
  • 11024
  • 11025
  • 11026
  • 11027
  • 11028
  • 11029
  • 11030
  • 11031
  • 11032
  • 11033
  • 11034
  • 11035
  • 11036
  • 11037
  • 11038
  • 11039
  • 11040
  • 11041
  • 11042
  • 11043
  • 11044
  • 11045
  • 11046
  • 11047
  • 11048
  • 11049
  • 11050
  • 11051
  • 11052
  • 11053
  • 11054
  • 11055
  • 11056
  • 11057
  • 11074
  • 11136
  • 11137
  • 11138
  • 11139
  • 11140
  • 11141
  • 11170
  • 11171
  • 11172
  • 11173
  • 11174
  • 11175
  • 11176
  • 11177
  • 11178
  • 11179
  • 11180
  • 11181
  • 11182
  • 11183
  • 11184
  • 11185
  • 11233
  • 11234
  • 11235
  • 11236
  • 11237
  • 11238
  • 11239
  • 11240
  • 11241
  • 11242
  • 11243
  • 11244
  • 11245
  • 11246
  • 11247
  • 11248
  • 11249
  • 11250
  • 11251
  • 11252
  • 11253
  • 11254
  • 11255
  • 11256
  • 11257
  • 11258
  • 11259
  • 11260
  • 11261
  • 11262
  • 11263
  • 11264
  • 11265
  • 11266
  • 11267
  • 11268
  • 11269
  • 11270
  • 11271
  • 11272
  • 11273
  • 11274
  • 11275
  • 11276
  • 11277
  • 11278
  • 11295
  • 11357
  • 11358
  • 11359
  • 11360
  • 11361
  • 11362
  • 11391
  • 11392
  • 11393
  • 11394
  • 11395
  • 11396
  • 11397
  • 11398
  • 11399
  • 11400
  • 11401
  • 11402
  • 11403
  • 11404
  • 11405
  • 11406
  • 11454
  • 11455
  • 11456
  • 11457
  • 11458
  • 11459
  • 11460
  • 11461
  • 11462
  • 11463
  • 11464
  • 11465
  • 11466
  • 11467
  • 11468
  • 11469
  • 11470
  • 11471
  • 11472
  • 11473
  • 11474
  • 11475
  • 11476
  • 11477
  • 11478
  • 11479
  • 11480
  • 11481
  • 11482
  • 11483
  • 11484
  • 11485
  • 11486
  • 11487
  • 11488
  • 11489
  • 11490
  • 11491
  • 11492
  • 11493
  • 11494
  • 11495
  • 11496
  • 11497
  • 11498
  • 11499
  • 11516
  • 11578
  • 11579
  • 11580
  • 11581
  • 11582
  • 11583
  • 11612
  • 11613
  • 11614
  • 11615
  • 11616
  • 11617
  • 11618
  • 11619
  • 11620
  • 11621
  • 11622
  • 11623
  • 11624
  • 11625
  • 11626
  • 11627
  • 11675
  • 11676
  • 11677
  • 11678
  • 11679
  • 11680
  • 11681
  • 11682
  • 11683
  • 11684
  • 11685
  • 11686
  • 11687
  • 11688
  • 11689
  • 11690
  • 11691
  • 11692
  • 11693
  • 11694
  • 11695
  • 11696
  • 11697
  • 11698
  • 11699
  • 11700
  • 11701
  • 11702
  • 11703
  • 11704
  • 11705
  • 11706
  • 11707
  • 11708
  • 11709
  • 11710
  • 11711
  • 11712
  • 11713
  • 11714
  • 11715
  • 11716
  • 11717
  • 11718
  • 11719
  • 11720
  • 11737
  • 11799
  • 11800
  • 11801
  • 11802
  • 11803
  • 11804
  • 11833
  • 11834
  • 11835
  • 11836
  • 11837
  • 11838
  • 11839
  • 11840
  • 11841
  • 11842
  • 11843
  • 11844
  • 11845
  • 11846
  • 11847
  • 11848
  • 11896
  • 11897
  • 11898
  • 11899
  • 11900
  • 11901
  • 11902
  • 11903
  • 11904
  • 11905
  • 11906
  • 11907
  • 11908
  • 11909
  • 11910
  • 11911
  • 11912
  • 11913
  • 11914
  • 11915
  • 11916
  • 11917
  • 11918
  • 11919
  • 11920
  • 11921
  • 11922
  • 11923
  • 11924
  • 11925
  • 11926
  • 11927
  • 11928
  • 11929
  • 11930
  • 11931
  • 11932
  • 11933
  • 11934
  • 11935
  • 11936
  • 11937
  • 11938
  • 11939
  • 11940
  • 11941
  • 11958
  • 12020
  • 12021
  • 12022
  • 12023
  • 12024
  • 12025
  • 12054
  • 12055
  • 12056
  • 12057
  • 12058
  • 12059
  • 12060
  • 12061
  • 12062
  • 12063
  • 12064
  • 12065
  • 12066
  • 12067
  • 12068
  • 12069
  • 12117
  • 12118
  • 12119
  • 12120
  • 12121
  • 12122
  • 12123
  • 12124
  • 12125
  • 12126
  • 12127
  • 12128
  • 12129
  • 12130
  • 12131
  • 12132
  • 12133
  • 12134
  • 12135
  • 12136
  • 12137
  • 12138
  • 12139
  • 12140
  • 12141
  • 12142
  • 12143
  • 12144
  • 12145
  • 12146
  • 12147
  • 12148
  • 12149
  • 12150
  • 12151
  • 12152
  • 12153
  • 12154
  • 12155
  • 12156
  • 12157
  • 12158
  • 12159
  • 12160
  • 12161
  • 12162
  • 12179
  • 12241
  • 12242
  • 12243
  • 12244
  • 12245
  • 12246
  • 12275
  • 12276
  • 12277
  • 12278
  • 12279
  • 12280
  • 12281
  • 12282
  • 12283
  • 12284
  • 12285
  • 12286
  • 12287
  • 12288
  • 12289
  • 12290
  • 12338
  • 12339
  • 12340
  • 12341
  • 12342
  • 12343
  • 12344
  • 12345
  • 12346
  • 12347
  • 12348
  • 12349
  • 12350
  • 12351
  • 12352
  • 12353
  • 12354
  • 12355
  • 12356
  • 12357
  • 12358
  • 12359
  • 12360
  • 12361
  • 12362
  • 12363
  • 12364
  • 12365
  • 12366
  • 12367
  • 12368
  • 12369
  • 12370
  • 12371
  • 12372
  • 12373
  • 12374
  • 12375
  • 12376
  • 12377
  • 12378
  • 12379
  • 12380
  • 12381
  • 12382
  • 12383
  • 12400
  • 12462
  • 12463
  • 12464
  • 12465
  • 12466
  • 12467
  • 12496
  • 12497
  • 12498
  • 12499
  • 12500
  • 12501
  • 12502
  • 12503
  • 12504
  • 12505
  • 12506
  • 12507
  • 12508
  • 12509
  • 12510
  • 12511
  • 12559
  • 12560
  • 12561
  • 12562
  • 12563
  • 12564
  • 12565
  • 12566
  • 12567
  • 12568
  • 12569
  • 12570
  • 12571
  • 12572
  • 12573
  • 12574
  • 12575
  • 12576
  • 12577
  • 12578
  • 12579
  • 12580
  • 12581
  • 12582
  • 12583
  • 12584
  • 12585
  • 12586
  • 12587
  • 12588
  • 12589
  • 12590
  • 12591
  • 12592
  • 12593
  • 12594
  • 12595
  • 12596
  • 12597
  • 12598
  • 12599
  • 12600
  • 12601
  • 12602
  • 12603
  • 12604
  • 12621
  • 12683
  • 12684
  • 12685
  • 12686
  • 12687
  • 12688
  • 12717
  • 12718
  • 12719
  • 12720
  • 12721
  • 12722
  • 12723
  • 12724
  • 12725
  • 12726
  • 12727
  • 12728
  • 12729
  • 12730
  • 12731
  • 12732
  • 12780
  • 12781
  • 12782
  • 12783
  • 12784
  • 12785
  • 12786
  • 12787
  • 12788
  • 12789
  • 12790
  • 12791
  • 12792
  • 12793
  • 12794
  • 12795
  • 12796
  • 12797
  • 12798
  • 12799
  • 12800
  • 12801
  • 12802
  • 12803
  • 12804
  • 12805
  • 12806
  • 12807
  • 12808
  • 12809
  • 12810
  • 12811
  • 12812
  • 12813
  • 12814
  • 12815
  • 12816
  • 12817
  • 12818
  • 12819
  • 12820
  • 12821
  • 12822
  • 12823
  • 12824
  • 12825
  • 12842
  • 12904
  • 12905
  • 12906
  • 12907
  • 12908
  • 12909
  • 12938
  • 12939
  • 12940
  • 12941
  • 12942
  • 12943
  • 12944
  • 12945
  • 12946
  • 12947
  • 12948
  • 12949
  • 12950
  • 12951
  • 12952
  • 12953
  • 13001
  • 13002
  • 13003
  • 13004
  • 13005
  • 13006
  • 13007
  • 13008
  • 13009
  • 13010
  • 13011
  • 13012
  • 13013
  • 13014
  • 13015
  • 13016
  • 13017
  • 13018
  • 13019
  • 13020
  • 13021
  • 13022
  • 13023
  • 13024
  • 13025
  • 13026
  • 13027
  • 13028
  • 13029
  • 13030
  • 13031
  • 13032
  • 13033
  • 13034
  • 13035
  • 13036
  • 13037
  • 13038
  • 13039
  • 13040
  • 13041
  • 13042
  • 13043
  • 13044
  • 13045
  • 13046
  • 13063
  • 13125
  • 13126
  • 13127
  • 13128
  • 13129
  • 13130
  • 13159
  • 13160
  • 13161
  • 13162
  • 13163
  • 13164
  • 13165
  • 13166
  • 13167
  • 13168
  • 13169
  • 13170
  • 13171
  • 13172
  • 13173
  • 13174
  • 13222
  • 13223
  • 13224
  • 13225
  • 13226
  • 13227
  • 13228
  • 13229
  • 13230
  • 13231
  • 13232
  • 13233
  • 13234
  • 13235
  • 13236
  • 13237
  • 13238
  • 13239
  • 13240
  • 13241
  • 13242
  • 13243
  • 13244
  • 13245
  • 13246
  • 13247
  • 13248
  • 13249
  • 13250
  • 13251
  • 13252
  • 13253
  • 13254
  • 13255
  • 13256
  • 13257
  • 13258
  • 13259
  • 13260
  • 13261
  • 13262
  • 13263
  • 13264
  • 13265
  • 13266
  • 13267
  • 13284
  • 13346
  • 13347
  • 13348
  • 13349
  • 13350
  • 13351
  • 13380
  • 13381
  • 13382
  • 13383
  • 13384
  • 13385
  • 13386
  • 13387
  • 13388
  • 13389
  • 13390
  • 13391
  • 13392
  • 13393
  • 13394
  • 13395
  • 13443
  • 13444
  • 13445
  • 13446
  • 13447
  • 13448
  • 13449
  • 13450
  • 13451
  • 13452
  • 13453
  • 13454
  • 13455
  • 13456
  • 13457
  • 13458
  • 13459
  • 13460
  • 13461
  • 13462
  • 13463
  • 13464
  • 13465
  • 13466
  • 13467
  • 13468
  • 13469
  • 13470
  • 13471
  • 13472
  • 13473
  • 13474
  • 13475
  • 13476
  • 13477
  • 13478
  • 13479
  • 13480
  • 13481
  • 13482
  • 13483
  • 13484
  • 13485
  • 13486
  • 13487
  • 13488
  • 13505
  • 13567
  • 13568
  • 13569
  • 13570
  • 13571
  • 13572
  • 13601
  • 13602
  • 13603
  • 13604
  • 13605
  • 13606
  • 13607
  • 13608
  • 13609
  • 13610
  • 13611
  • 13612
  • 13613
  • 13614
  • 13615
  • 13616
  • 13664
  • 13665
  • 13666
  • 13667
  • 13668
  • 13669
  • 13670
  • 13671
  • 13672
  • 13673
  • 13674
  • 13675
  • 13676
  • 13677
  • 13678
  • 13679
  • 13680
  • 13681
  • 13682
  • 13683
  • 13684
  • 13685
  • 13686
  • 13687
  • 13688
  • 13689
  • 13690
  • 13691
  • 13692
  • 13693
  • 13694
  • 13695
  • 13696
  • 13697
  • 13698
  • 13699
  • 13700
  • 13701
  • 13702
  • 13703
  • 13704
  • 13705
  • 13706
  • 13707
  • 13708
  • 13709
  • 13726
  • 13788
  • 13789
  • 13790
  • 13791
  • 13792
  • 13793
  • 13822
  • 13823
  • 13824
  • 13825
  • 13826
  • 13827
  • 13828
  • 13829
  • 13830
  • 13831
  • 13832
  • 13833
  • 13834
  • 13835
  • 13836
  • 13837
  • 13885
  • 13886
  • 13887
  • 13888
  • 13889
  • 13890
  • 13891
  • 13892
  • 13893
  • 13894
  • 13895
  • 13896
  • 13897
  • 13898
  • 13899
  • 13900
  • 13901
  • 13902
  • 13903
  • 13904
  • 13905
  • 13906
  • 13907
  • 13908
  • 13909
  • 13910
  • 13911
  • 13912
  • 13913
  • 13914
  • 13915
  • 13916
  • 13917
  • 13918
  • 13919
  • 13920
  • 13921
  • 13922
  • 13923
  • 13924
  • 13925
  • 13926
  • 13927
  • 13928
  • 13929
  • 13930
  • 13947
  • 14009
  • 14010
  • 14011
  • 14012
  • 14013
  • 14014
  • 14043
  • 14044
  • 14045
  • 14046
  • 14047
  • 14048
  • 14049
  • 14050
  • 14051
  • 14052
  • 14053
  • 14054
  • 14055
  • 14056
  • 14057
  • 14058
  • 14106
  • 14107
  • 14108
  • 14109
  • 14110
  • 14111
  • 14112
  • 14113
  • 14114
  • 14115
  • 14116
  • 14117
  • 14118
  • 14119
  • 14120
  • 14121
  • 14122
  • 14123
  • 14124
  • 14125
  • 14126
  • 14127
  • 14128
  • 14129
  • 14130
  • 14131
  • 14132
  • 14133
  • 14134
  • 14135
  • 14136
  • 14137
  • 14138
  • 14139
  • 14140
  • 14141
  • 14142
  • 14143
  • 14144
  • 14145
  • 14146
  • 14147
  • 14148
  • 14149
  • 14150
  • 14151
  • 14168
  • 14230
  • 14231
  • 14232
  • 14233
  • 14234
  • 14235
  • 14264
  • 14265
  • 14266
  • 14267
  • 14268
  • 14269
  • 14270
  • 14271
  • 14272
  • 14273
  • 14274
  • 14275
  • 14276
  • 14277
  • 14278
  • 14279
  • 14327
  • 14328
  • 14329
  • 14330
  • 14331
  • 14332
  • 14333
  • 14334
  • 14335
  • 14336
  • 14337
  • 14338
  • 14339
  • 14340
  • 14341
  • 14342
  • 14343
  • 14344
  • 14345
  • 14346
  • 14347
  • 14348
  • 14349
  • 14350
  • 14351
  • 14352
  • 14353
  • 14354
  • 14355
  • 14356
  • 14357
  • 14358
  • 14359
  • 14360
  • 14361
  • 14362
  • 14363
  • 14364
  • 14365
  • 14366
  • 14367
  • 14368
  • 14369
  • 14370
  • 14371
  • 14372
  • 14389
  • 14451
  • 14452
  • 14453
  • 14454
  • 14455
  • 14456
  • 14485
  • 14486
  • 14487
  • 14488
  • 14489
  • 14490
  • 14491
  • 14492
  • 14493
  • 14494
  • 14495
  • 14496
  • 14497
  • 14498
  • 14499
  • 14500
  • 14548
  • 14549
  • 14550
  • 14551
  • 14552
  • 14553
  • 14554
  • 14555
  • 14556
  • 14557
  • 14558
  • 14559
  • 14560
  • 14561
  • 14562
  • 14563
  • 14564
  • 14565
  • 14566
  • 14567
  • 14568
  • 14569
  • 14570
  • 14571
  • 14572
  • 14573
  • 14574
  • 14575
  • 14576
  • 14577
  • 14578
  • 14579
  • 14580
  • 14581
  • 14582
  • 14583
  • 14584
  • 14585
  • 14586
  • 14587
  • 14588
  • 14589
  • 14590
  • 14591
  • 14592
  • 14593
  • 14610
  • 14672
  • 14673
  • 14674
  • 14675
  • 14676
  • 14677
  • 14706
  • 14707
  • 14708
  • 14709
  • 14710
  • 14711
  • 14712
  • 14713
  • 14714
  • 14715
  • 14716
  • 14717
  • 14718
  • 14719
  • 14720
  • 14721
  • 14769
  • 14770
  • 14771
  • 14772
  • 14773
  • 14774
  • 14775
  • 14776
  • 14777
  • 14778
  • 14779
  • 14780
  • 14781
  • 14782
  • 14783
  • 14784
  • 14785
  • 14786
  • 14787
  • 14788
  • 14789
  • 14790
  • 14791
  • 14792
  • 14793
  • 14794
  • 14795
  • 14796
  • 14797
  • 14798
  • 14799
  • 14800
  • 14801
  • 14802
  • 14803
  • 14804
  • 14805
  • 14806
  • 14807
  • 14808
  • 14809
  • 14810
  • 14811
  • 14812
  • 14813
  • 14814
  • 14831
  • 14893
  • 14894
  • 14895
  • 14896
  • 14897
  • 14898
  • 14927
  • 14928
  • 14929
  • 14930
  • 14931
  • 14932
  • 14933
  • 14934
  • 14935
  • 14936
  • 14937
  • 14938
  • 14939
  • 14940
  • 14941
  • 14942
  • 14990
  • 14991
  • 14992
  • 14993
  • 14994
  • 14995
  • 14996
  • 14997
  • 14998
  • 14999
  • 15000
  • 15001
  • 15002
  • 15003
  • 15004
  • 15005
  • 15006
  • 15007
  • 15008
  • 15009
  • 15010
  • 15011
  • 15012
  • 15013
  • 15014
  • 15015
  • 15016
  • 15017
  • 15018
  • 15019
  • 15020
  • 15021
  • 15022
  • 15023
  • 15024
  • 15025
  • 15026
  • 15027
  • 15028
  • 15029
  • 15030
  • 15031
  • 15032
  • 15033
  • 15034
  • 15035
  • 15052
  • 15114
  • 15115
  • 15116
  • 15117
  • 15118
  • 15119
  • 15148
  • 15149
  • 15150
  • 15151
  • 15152
  • 15153
  • 15154
  • 15155
  • 15156
  • 15157
  • 15158
  • 15159
  • 15160
  • 15161
  • 15162
  • 15163
  • 15211
  • 15212
  • 15213
  • 15214
  • 15215
  • 15216
  • 15217
  • 15218
  • 15219
  • 15220
  • 15221
  • 15222
  • 15223
  • 15224
  • 15225
  • 15226
  • 15227
  • 15228
  • 15229
  • 15230
  • 15231
  • 15232
  • 15233
  • 15234
  • 15235
  • 15236
  • 15237
  • 15238
  • 15239
  • 15240
  • 15241
  • 15242
  • 15243
  • 15244
  • 15245
  • 15246
  • 15247
  • 15248
  • 15249
  • 15250
  • 15251
  • 15252
  • 15253
  • 15254
  • 15255
  • 15256
  • 15273
  • 15335
  • 15336
  • 15337
  • 15338
  • 15339
  • 15340
  • 15369
  • 15370
  • 15371
  • 15372
  • 15373
  • 15374
  • 15375
  • 15376
  • 15377
  • 15378
  • 15379
  • 15380
  • 15381
  • 15382
  • 15383
  • 15384
  • 15432
  • 15433
  • 15434
  • 15435
  • 15436
  • 15437
  • 15438
  • 15439
  • 15440
  • 15441
  • 15442
  • 15443
  • 15444
  • 15445
  • 15446
  • 15447
  • 15448
  • 15449
  • 15450
  • 15451
  • 15452
  • 15453
  • 15454
  • 15455
  • 15456
  • 15457
  • 15458
  • 15459
  • 15460
  • 15461
  • 15462
  • 15463
  • 15464
  • 15465
  • 15466
  • 15467
  • 15468
  • 15469
  • 15470
  • 15471
  • 15472
  • 15473
  • 15474
  • 15475
  • 15476
  • 15477
  • 15494
  • 15556
  • 15557
  • 15558
  • 15559
  • 15560
  • 15561
  • 15590
  • 15591
  • 15592
  • 15593
  • 15594
  • 15595
  • 15596
  • 15597
  • 15598
  • 15599
  • 15600
  • 15601
  • 15602
  • 15603
  • 15604
  • 15605
  • 15653
  • 15654
  • 15655
  • 15656
  • 15657
  • 15658
  • 15659
  • 15660
  • 15661
  • 15662
  • 15663
  • 15664
  • 15665
  • 15666
  • 15667
  • 15668
  • 15669
  • 15670
  • 15671
  • 15672
  • 15673
  • 15674
  • 15675
  • 15676
  • 15677
  • 15678
  • 15679
  • 15680
  • 15681
  • 15682
  • 15683
  • 15684
  • 15685
  • 15686
  • 15687
  • 15688
  • 15689
  • 15690
  • 15691
  • 15692
  • 15693
  • 15694
  • 15695
  • 15696
  • 15697
  • 15698
  • 15715
  • 15777
  • 15778
  • 15779
  • 15780
  • 15781
  • 15782
  • 15811
  • 15812
  • 15813
  • 15814
  • 15815
  • 15816
  • 15817
  • 15818
  • 15819
  • 15820
  • 15821
  • 15822
  • 15823
  • 15824
  • 15825
  • 15826
  • 15874
  • 15875
  • 15876
  • 15877
  • 15878
  • 15879
  • 15880
  • 15881
  • 15882
  • 15883
  • 15884
  • 15885
  • 15886
  • 15887
  • 15888
  • 15889
  • 15890
  • 15891
  • 15892
  • 15893
  • 15894
  • 15895
  • 15896
  • 15897
  • 15898
  • 15899
  • 15900
  • 15901
  • 15902
  • 15903
  • 15904
  • 15905
  • 15906
  • 15907
  • 15908
  • 15909
  • 15910
  • 15911
  • 15912
  • 15913
  • 15914
  • 15915
  • 15916
  • 15917
  • 15918
  • 15919
  • 15936
  • 15998
  • 15999
  • 16000
  • 16001
  • 16002
  • 16003
  • 16032
  • 16033
  • 16034
  • 16035
  • 16036
  • 16037
  • 16038
  • 16039
  • 16040
  • 16041
  • 16042
  • 16043
  • 16044
  • 16045
  • 16046
  • 16047
  • 16095
  • 16096
  • 16097
  • 16098
  • 16099
  • 16100
  • 16101
  • 16102
  • 16103
  • 16104
  • 16105
  • 16106
  • 16107
  • 16108
  • 16109
  • 16110
  • 16111
  • 16112
  • 16113
  • 16114
  • 16115
  • 16116
  • 16117
  • 16118
  • 16119
  • 16120
  • 16121
  • 16122
  • 16123
  • 16124
  • 16125
  • 16126
  • 16127
  • 16128
  • 16129
  • 16130
  • 16131
  • 16132
  • 16133
  • 16134
  • 16135
  • 16136
  • 16137
  • 16138
  • 16139
  • 16140
  • 16157
  • 16219
  • 16220
  • 16221
  • 16222
  • 16223
  • 16224
  • 16253
  • 16254
  • 16255
  • 16256
  • 16257
  • 16258
  • 16259
  • 16260
  • 16261
  • 16262
  • 16263
  • 16264
  • 16265
  • 16266
  • 16267
  • 16268
  • 16316
  • 16317
  • 16318
  • 16319
  • 16320
  • 16321
  • 16322
  • 16323
  • 16324
  • 16325
  • 16326
  • 16327
  • 16328
  • 16329
  • 16330
  • 16331
  • 16332
  • 16333
  • 16334
  • 16335
  • 16336
  • 16337
  • 16338
  • 16339
  • 16340
  • 16341
  • 16342
  • 16343
  • 16344
  • 16345
  • 16346
  • 16347
  • 16348
  • 16349
  • 16350
  • 16351
  • 16352
  • 16353
  • 16354
  • 16355
  • 16356
  • 16357
  • 16358
  • 16359
  • 16360
  • 16361
  • 16378
  • 16440
  • 16441
  • 16442
  • 16443
  • 16444
  • 16445
  • 16474
  • 16475
  • 16476
  • 16477
  • 16478
  • 16479
  • 16480
  • 16481
  • 16482
  • 16483
  • 16484
  • 16485
  • 16486
  • 16487
  • 16488
  • 16489
  • 16537
  • 16538
  • 16539
  • 16540
  • 16541
  • 16542
  • 16543
  • 16544
  • 16545
  • 16546
  • 16547
  • 16548
  • 16549
  • 16550
  • 16551
  • 16552
  • 16553
  • 16554
  • 16555
  • 16556
  • 16557
  • 16558
  • 16559
  • 16560
  • 16561
  • 16562
  • 16563
  • 16564
  • 16565
  • 16566
  • 16567
  • 16568
  • 16569
  • 16570
  • 16571
  • 16572
  • 16573
  • 16574
  • 16575
  • 16576
  • 16577
  • 16578
  • 16579
  • 16580
  • 16581
  • 16582
  • 16599
  • 16661
  • 16662
  • 16663
  • 16664
  • 16665
  • 16666
  • 16695
  • 16696
  • 16697
  • 16698
  • 16699
  • 16700
  • 16701
  • 16702
  • 16703
  • 16704
  • 16705
  • 16706
  • 16707
  • 16708
  • 16709
  • 16710
  • 16758
  • 16759
  • 16760
  • 16761
  • 16762
  • 16763
  • 16764
  • 16765
  • 16766
  • 16767
  • 16768
  • 16769
  • 16770
  • 16771
  • 16772
  • 16773
  • 16774
  • 16775
  • 16776
  • 16777
  • 16778
  • 16779
  • 16780
  • 16781
  • 16782
  • 16783
  • 16784
  • 16785
  • 16786
  • 16787
  • 16788
  • 16789
  • 16790
  • 16791
  • 16792
  • 16793
  • 16794
  • 16795
  • 16796
  • 16797
  • 16798
  • 16799
  • 16800
  • 16801
  • 16802
  • 16803
  • 16820
  • 16882
  • 16883
  • 16884
  • 16885
  • 16886
  • 16887
  • 16916
  • 16917
  • 16918
  • 16919
  • 16920
  • 16921
  • 16922
  • 16923
  • 16924
  • 16925
  • 16926
  • 16927
  • 16928
  • 16929
  • 16930
  • 16931
  • 16979
  • 16980
  • 16981
  • 16982
  • 16983
  • 16984
  • 16985
  • 16986
  • 16987
  • 16988
  • 16989
  • 16990
  • 16991
  • 16992
  • 16993
  • 16994
  • 16995
  • 16996
  • 16997
  • 16998
  • 16999
  • 17000
  • 17001
  • 17002
  • 17003
  • 17004
  • 17005
  • 17006
  • 17007
  • 17008
  • 17009
  • 17010
  • 17011
  • 17012
  • 17013
  • 17014
  • 17015
  • 17016
  • 17017
  • 17018
  • 17019
  • 17020
  • 17021
  • 17022
  • 17023
  • 17024
  • 17041
  • 17103
  • 17104
  • 17105
  • 17106
  • 17107
  • 17108
  • 17137
  • 17138
  • 17139
  • 17140
  • 17141
  • 17142
  • 17143
  • 17144
  • 17145
  • 17146
  • 17147
  • 17148
  • 17149
  • 17150
  • 17151
  • 17152
  • 17200
  • 17201
  • 17202
  • 17203
  • 17204
  • 17205
  • 17206
  • 17207
  • 17208
  • 17209
  • 17210
  • 17211
  • 17212
  • 17213
  • 17214
  • 17215
  • 17216
  • 17217
  • 17218
  • 17219
  • 17220
  • 17221
  • 17222
  • 17223
  • 17224
  • 17225
  • 17226
  • 17227
  • 17228
  • 17229
  • 17230
  • 17231
  • 17232
  • 17233
  • 17234
  • 17235
  • 17236
  • 17237
  • 17238
  • 17239
  • 17240
  • 17241
  • 17242
  • 17243
  • 17244
  • 17245
  • 17262
  • 17324
  • 17325
  • 17326
  • 17327
  • 17328
  • 17329
  • 17358
  • 17359
  • 17360
  • 17361
  • 17362
  • 17363
  • 17364
  • 17365
  • 17366
  • 17367
  • 17368
  • 17369
  • 17370
  • 17371
  • 17372
  • 17373
  • 17421
  • 17422
  • 17423
  • 17424
  • 17425
  • 17426
  • 17427
  • 17428
  • 17429
  • 17430
  • 17431
  • 17432
  • 17433
  • 17434
  • 17435
  • 17436
  • 17437
  • 17438
  • 17439
  • 17440
  • 17441
  • 17442
  • 17443
  • 17444
  • 17445
  • 17446
  • 17447
  • 17448
  • 17449
  • 17450
  • 17451
  • 17452
  • 17453
  • 17454
  • 17455
  • 17456
  • 17457
  • 17458
  • 17459
  • 17460
  • 17461
  • 17462
  • 17463
  • 17464
  • 17465
  • 17466
  • 17483
  • 17545
  • 17546
  • 17547
  • 17548
  • 17549
  • 17550
  • 17579
  • 17580
  • 17581
  • 17582
  • 17583
  • 17584
  • 17585
  • 17586
  • 17587
  • 17588
  • 17589
  • 17590
  • 17591
  • 17592
  • 17593
  • 17594
  • 17642
  • 17643
  • 17644
  • 17645
  • 17646
  • 17647
  • 17648
  • 17649
  • 17650
  • 17651
  • 17652
  • 17653
  • 17654
  • 17655
  • 17656
  • 17657
  • 17658
  • 17659
  • 17660
  • 17661
  • 17662
  • 17663
  • 17664
  • 17665
  • 17666
  • 17667
  • 17668
  • 17669
  • 17670
  • 17671
  • 17672
  • 17673
  • 17674
  • 17675
  • 17676
  • 17677
  • 17678
  • 17679
  • 17680
  • 17681
  • 17682
  • 17683
  • 17684
  • 17685
  • 17686
  • 17687
  • 17704
  • 17766
  • 17767
  • 17768
  • 17769
  • 17770
  • 17771
  • 17800
  • 17801
  • 17802
  • 17803
  • 17804
  • 17805
  • 17806
  • 17807
  • 17808
  • 17809
  • 17810
  • 17811
  • 17812
  • 17813
  • 17814
  • 17815
  • 17863
  • 17864
  • 17865
  • 17866
  • 17867
  • 17868
  • 17869
  • 17870
  • 17871
  • 17872
  • 17873
  • 17874
  • 17875
  • 17876
  • 17877
  • 17878
  • 17879
  • 17880
  • 17881
  • 17882
  • 17883
  • 17884
  • 17885
  • 17886
  • 17887
  • 17888
  • 17889
  • 17890
  • 17891
  • 17892
  • 17893
  • 17894
  • 17895
  • 17896
  • 17897
  • 17898
  • 17899
  • 17900
  • 17901
  • 17902
  • 17903
  • 17904
  • 17905
  • 17906
  • 17907
  • 17908
  • 17925
  • 17987
  • 17988
  • 17989
  • 17990
  • 17991
  • 17992
  • 18021
  • 18022
  • 18023
  • 18024
  • 18025
  • 18026
  • 18027
  • 18028
  • 18029
  • 18030
  • 18031
  • 18032
  • 18033
  • 18034
  • 18035
  • 18036
  • 18084
  • 18085
  • 18086
  • 18087
  • 18088
  • 18089
  • 18090
  • 18091
  • 18092
  • 18093
  • 18094
  • 18095
  • 18096
  • 18097
  • 18098
  • 18099
  • 18100
  • 18101
  • 18102
  • 18103
  • 18104
  • 18105
  • 18106
  • 18107
  • 18108
  • 18109
  • 18110
  • 18111
  • 18112
  • 18113
  • 18114
  • 18115
  • 18116
  • 18117
  • 18118
  • 18119
  • 18120
  • 18121
  • 18122
  • 18123
  • 18124
  • 18125
  • 18126
  • 18127
  • 18128
  • 18129
  • 18146
  • 18208
  • 18209
  • 18210
  • 18211
  • 18212
  • 18213
  • 18242
  • 18243
  • 18244
  • 18245
  • 18246
  • 18247
  • 18248
  • 18249
  • 18250
  • 18251
  • 18252
  • 18253
  • 18254
  • 18255
  • 18256
  • 18257
  • 18305
  • 18306
  • 18307
  • 18308
  • 18309
  • 18310
  • 18311
  • 18312
  • 18313
  • 18314
  • 18315
  • 18316
  • 18317
  • 18318
  • 18319
  • 18320
  • 18321
  • 18322
  • 18323
  • 18324
  • 18325
  • 18326
  • 18327
  • 18328
  • 18329
  • 18330
  • 18331
  • 18332
  • 18333
  • 18334
  • 18335
  • 18336
  • 18337
  • 18338
  • 18339
  • 18340
  • 18341
  • 18342
  • 18343
  • 18344
  • 18345
  • 18346
  • 18347
  • 18348
  • 18349
  • 18350
  • 18367
  • 18429
  • 18430
  • 18431
  • 18432
  • 18433
  • 18434
  • 18463
  • 18464
  • 18465
  • 18466
  • 18467
  • 18468
  • 18469
  • 18470
  • 18471
  • 18472
  • 18473
  • 18474
  • 18475
  • 18476
  • 18477
  • 18478
  • 18526
  • 18527
  • 18528
  • 18529
  • 18530
  • 18531
  • 18532
  • 18533
  • 18534
  • 18535
  • 18536
  • 18537
  • 18538
  • 18539
  • 18540
  • 18541
  • 18542
  • 18543
  • 18544
  • 18545
  • 18546
  • 18547
  • 18548
  • 18549
  • 18550
  • 18551
  • 18552
  • 18553
  • 18554
  • 18555
  • 18556
  • 18557
  • 18558
  • 18559
  • 18560
  • 18561
  • 18562
  • 18563
  • 18564
  • 18565
  • 18566
  • 18567
  • 18568
  • 18569
  • 18570
  • 18571
  • 18588
  • 18639
  • 18656
  • 18718
  • 18719
  • 18720
  • 18721
  • 18722
  • 18723
  • 18752
  • 18753
  • 18754
  • 18755
  • 18756
  • 18757
  • 18758
  • 18759
  • 18760
  • 18761
  • 18762
  • 18763
  • 18764
  • 18765
  • 18766
  • 18767
  • 18815
  • 18816
  • 18817
  • 18818
  • 18819
  • 18820
  • 18821
  • 18822
  • 18823
  • 18824
  • 18825
  • 18826
  • 18827
  • 18828
  • 18829
  • 18830
  • 18831
  • 18832
  • 18833
  • 18834
  • 18835
  • 18836
  • 18837
  • 18838
  • 18839
  • 18840
  • 18841
  • 18842
  • 18843
  • 18844
  • 18845
  • 18846
  • 18847
  • 18848
  • 18849
  • 18850
  • 18851
  • 18852
  • 18853
  • 18854
  • 18855
  • 18856
  • 18857
  • 18858
  • 18859
  • 18860
  • 18877
  • 18939
  • 18940
  • 18941
  • 18942
  • 18943
  • 18944
  • 18973
  • 18974
  • 18975
  • 18976
  • 18977
  • 18978
  • 18979
  • 18980
  • 18981
  • 18982
  • 18983
  • 18984
  • 18985
  • 18986
  • 18987
  • 18988
  • 19036
  • 19037
  • 19038
  • 19039
  • 19040
  • 19041
  • 19042
  • 19043
  • 19044
  • 19045
  • 19046
  • 19047
  • 19048
  • 19049
  • 19050
  • 19051
  • 19052
  • 19053
  • 19054
  • 19055
  • 19056
  • 19057
  • 19058
  • 19059
  • 19060
  • 19061
  • 19062
  • 19063
  • 19064
  • 19065
  • 19066
  • 19067
  • 19068
  • 19069
  • 19070
  • 19071
  • 19072
  • 19073
  • 19074
  • 19075
  • 19076
  • 19077
  • 19078
  • 19079
  • 19080
  • 19081
  • 19098
  • 19160
  • 19161
  • 19162
  • 19163
  • 19164
  • 19165
  • 19194
  • 19195
  • 19196
  • 19197
  • 19198
  • 19199
  • 19200
  • 19201
  • 19202
  • 19203
  • 19204
  • 19205
  • 19206
  • 19207
  • 19208
  • 19209
  • 19257
  • 19258
  • 19259
  • 19260
  • 19261
  • 19262
  • 19263
  • 19264
  • 19265
  • 19266
  • 19267
  • 19268
  • 19269
  • 19270
  • 19271
  • 19272
  • 19273
  • 19274
  • 19275
  • 19276
  • 19277
  • 19278
  • 19279
  • 19280
  • 19281
  • 19282
  • 19283
  • 19284
  • 19285
  • 19286
  • 19287
  • 19288
  • 19289
  • 19290
  • 19291
  • 19292
  • 19293
  • 19294
  • 19295
  • 19296
  • 19297
  • 19298
  • 19299
  • 19300
  • 19301
  • 19302
  • 19319
  • 19381
  • 19382
  • 19383
  • 19384
  • 19385
  • 19386
  • 19415
  • 19416
  • 19417
  • 19418
  • 19419
  • 19420
  • 19421
  • 19422
  • 19423
  • 19424
  • 19425
  • 19426
  • 19427
  • 19428
  • 19429
  • 19430
  • 19478
  • 19479
  • 19480
  • 19481
  • 19482
  • 19483
  • 19484
  • 19485
  • 19486
  • 19487
  • 19488
  • 19489
  • 19490
  • 19491
  • 19492
  • 19493
  • 19494
  • 19495
  • 19496
  • 19497
  • 19498
  • 19499
  • 19500
  • 19501
  • 19502
  • 19503
  • 19504
  • 19505
  • 19506
  • 19507
  • 19508
  • 19509
  • 19510
  • 19511
  • 19512
  • 19513
  • 19514
  • 19515
  • 19516
  • 19517
  • 19518
  • 19519
  • 19520
  • 19521
  • 19522
  • 19523
  • 19540
  • 19602
  • 19603
  • 19604
  • 19605
  • 19606
  • 19607
  • 19636
  • 19637
  • 19638
  • 19639
  • 19640
  • 19641
  • 19642
  • 19643
  • 19644
  • 19645
  • 19646
  • 19647
  • 19648
  • 19649
  • 19650
  • 19651
  • 19699
  • 19700
  • 19701
  • 19702
  • 19703
  • 19704
  • 19705
  • 19706
  • 19707
  • 19708
  • 19709
  • 19710
  • 19711
  • 19712
  • 19713
  • 19714
  • 19715
  • 19716
  • 19717
  • 19718
  • 19719
  • 19720
  • 19721
  • 19722
  • 19723
  • 19724
  • 19725
  • 19726
  • 19727
  • 19728
  • 19729
  • 19730
  • 19731
  • 19732
  • 19733
  • 19734
  • 19735
  • 19736
  • 19737
  • 19738
  • 19739
  • 19740
  • 19741
  • 19742
  • 19743
  • 19744
  • 19761
  • 19823
  • 19824
  • 19825
  • 19826
  • 19827
  • 19828
  • 19857
  • 19858
  • 19859
  • 19860
  • 19861
  • 19862
  • 19863
  • 19864
  • 19865
  • 19866
  • 19867
  • 19868
  • 19869
  • 19870
  • 19871
  • 19872
  • 19920
  • 19921
  • 19922
  • 19923
  • 19924
  • 19925
  • 19926
  • 19927
  • 19928
  • 19929
  • 19930
  • 19931
  • 19932
  • 19933
  • 19934
  • 19935
  • 19936
  • 19937
  • 19938
  • 19939
  • 19940
  • 19941
  • 19942
  • 19943
  • 19944
  • 19945
  • 19946
  • 19947
  • 19948
  • 19949
  • 19950
  • 19951
  • 19952
  • 19953
  • 19954
  • 19955
  • 19956
  • 19957
  • 19958
  • 19959
  • 19960
  • 19961
  • 19962
  • 19963
  • 19964
  • 19965
  • 19982
  • 20044
  • 20045
  • 20046
  • 20047
  • 20048
  • 20049
  • 20078
  • 20079
  • 20080
  • 20081
  • 20082
  • 20083
  • 20084
  • 20085
  • 20086
  • 20087
  • 20088
  • 20089
  • 20090
  • 20091
  • 20092
  • 20093
  • 20141
  • 20142
  • 20143
  • 20144
  • 20145
  • 20146
  • 20147
  • 20148
  • 20149
  • 20150
  • 20151
  • 20152
  • 20153
  • 20154
  • 20155
  • 20156
  • 20157
  • 20158
  • 20159
  • 20160
  • 20161
  • 20162
  • 20163
  • 20164
  • 20165
  • 20166
  • 20167
  • 20168
  • 20169
  • 20170
  • 20171
  • 20172
  • 20173
  • 20174
  • 20175
  • 20176
  • 20177
  • 20178
  • 20179
  • 20180
  • 20181
  • 20182
  • 20183
  • 20184
  • 20185
  • 20186
  • 20203
  • 20265
  • 20266
  • 20267
  • 20268
  • 20269
  • 20270
  • 20299
  • 20300
  • 20301
  • 20302
  • 20303
  • 20304
  • 20305
  • 20306
  • 20307
  • 20308
  • 20309
  • 20310
  • 20311
  • 20312
  • 20313
  • 20314
  • 20362
  • 20363
  • 20364
  • 20365
  • 20366
  • 20367
  • 20368
  • 20369
  • 20370
  • 20371
  • 20372
  • 20373
  • 20374
  • 20375
  • 20376
  • 20377
  • 20378
  • 20379
  • 20380
  • 20381
  • 20382
  • 20383
  • 20384
  • 20385
  • 20386
  • 20387
  • 20388
  • 20389
  • 20390
  • 20391
  • 20392
  • 20393
  • 20394
  • 20395
  • 20396
  • 20397
  • 20398
  • 20399
  • 20400
  • 20401
  • 20402
  • 20403
  • 20404
  • 20405
  • 20406
  • 20407
  • 20424
  • 20486
  • 20487
  • 20488
  • 20489
  • 20490
  • 20491
  • 20520
  • 20521
  • 20522
  • 20523
  • 20524
  • 20525
  • 20526
  • 20527
  • 20528
  • 20529
  • 20530
  • 20531
  • 20532
  • 20533
  • 20534
  • 20535
  • 20583
  • 20584
  • 20585
  • 20586
  • 20587
  • 20588
  • 20589
  • 20590
  • 20591
  • 20592
  • 20593
  • 20594
  • 20595
  • 20596
  • 20597
  • 20598
  • 20599
  • 20600
  • 20601
  • 20602
  • 20603
  • 20604
  • 20605
  • 20606
  • 20607
  • 20608
  • 20609
  • 20610
  • 20611
  • 20612
  • 20613
  • 20614
  • 20615
  • 20616
  • 20617
  • 20618
  • 20619
  • 20620
  • 20621
  • 20622
  • 20623
  • 20624
  • 20625
  • 20626
  • 20627
  • 20628
  • 20645
  • 20707
  • 20708
  • 20709
  • 20710
  • 20711
  • 20712
  • 20741
  • 20742
  • 20743
  • 20744
  • 20745
  • 20746
  • 20747
  • 20748
  • 20749
  • 20750
  • 20751
  • 20752
  • 20753
  • 20754
  • 20755
  • 20756
  • 20804
  • 20805
  • 20806
  • 20807
  • 20808
  • 20809
  • 20810
  • 20811
  • 20812
  • 20813
  • 20814
  • 20815
  • 20816
  • 20817
  • 20818
  • 20819
  • 20820
  • 20821
  • 20822
  • 20823
  • 20824
  • 20825
  • 20826
  • 20827
  • 20828
  • 20829
  • 20830
  • 20831
  • 20832
  • 20833
  • 20834
  • 20835
  • 20836
  • 20837
  • 20838
  • 20839
  • 20840
  • 20841
  • 20842
  • 20843
  • 20844
  • 20845
  • 20846
  • 20847
  • 20848
  • 20849
  • 20866
  • 20928
  • 20929
  • 20930
  • 20931
  • 20932
  • 20933
  • 20962
  • 20963
  • 20964
  • 20965
  • 20966
  • 20967
  • 20968
  • 20969
  • 20970
  • 20971
  • 20972
  • 20973
  • 20974
  • 20975
  • 20976
  • 20977
  • 21025
  • 21026
  • 21027
  • 21028
  • 21029
  • 21030
  • 21031
  • 21032
  • 21033
  • 21034
  • 21035
  • 21036
  • 21037
  • 21038
  • 21039
  • 21040
  • 21041
  • 21042
  • 21043
  • 21044
  • 21045
  • 21046
  • 21047
  • 21048
  • 21049
  • 21050
  • 21051
  • 21052
  • 21053
  • 21054
  • 21055
  • 21056
  • 21057
  • 21058
  • 21059
  • 21060
  • 21061
  • 21062
  • 21063
  • 21064
  • 21065
  • 21066
  • 21067
  • 21068
  • 21069
  • 21070
  • 21087
  • 21149
  • 21150
  • 21151
  • 21152
  • 21153
  • 21154
  • 21183
  • 21184
  • 21185
  • 21186
  • 21187
  • 21188
  • 21189
  • 21190
  • 21191
  • 21192
  • 21193
  • 21194
  • 21195
  • 21196
  • 21197
  • 21198
  • 21246
  • 21247
  • 21248
  • 21249
  • 21250
  • 21251
  • 21252
  • 21253
  • 21254
  • 21255
  • 21256
  • 21257
  • 21258
  • 21259
  • 21260
  • 21261
  • 21262
  • 21263
  • 21264
  • 21265
  • 21266
  • 21267
  • 21268
  • 21269
  • 21270
  • 21271
  • 21272
  • 21273
  • 21274
  • 21275
  • 21276
  • 21277
  • 21278
  • 21279
  • 21280
  • 21281
  • 21282
  • 21283
  • 21284
  • 21285
  • 21286
  • 21287
  • 21288
  • 21289
  • 21290
  • 21291
  • 21308
  • 21370
  • 21371
  • 21372
  • 21373
  • 21374
  • 21375
  • 21404
  • 21405
  • 21406
  • 21407
  • 21408
  • 21409
  • 21410
  • 21411
  • 21412
  • 21413
  • 21414
  • 21415
  • 21416
  • 21417
  • 21418
  • 21419
  • 21467
  • 21468
  • 21469
  • 21470
  • 21471
  • 21472
  • 21473
  • 21474
  • 21475
  • 21476
  • 21477
  • 21478
  • 21479
  • 21480
  • 21481
  • 21482
  • 21483
  • 21484
  • 21485
  • 21486
  • 21487
  • 21488
  • 21489
  • 21490
  • 21491
  • 21492
  • 21493
  • 21494
  • 21495
  • 21496
  • 21497
  • 21498
  • 21499
  • 21500
  • 21501
  • 21502
  • 21503
  • 21504
  • 21505
  • 21506
  • 21507
  • 21508
  • 21509
  • 21510
  • 21511
  • 21512
  • 21529
  • 21591
  • 21592
  • 21593
  • 21594
  • 21595
  • 21596
  • 21625
  • 21626
  • 21627
  • 21628
  • 21629
  • 21630
  • 21631
  • 21632
  • 21633
  • 21634
  • 21635
  • 21636
  • 21637
  • 21638
  • 21639
  • 21640
  • 21688
  • 21689
  • 21690
  • 21691
  • 21692
  • 21693
  • 21694
  • 21695
  • 21696
  • 21697
  • 21698
  • 21699
  • 21700
  • 21701
  • 21702
  • 21703
  • 21704
  • 21705
  • 21706
  • 21707
  • 21708
  • 21709
  • 21710
  • 21711
  • 21712
  • 21713
  • 21714
  • 21715
  • 21716
  • 21717
  • 21718
  • 21719
  • 21720
  • 21721
  • 21722
  • 21723
  • 21724
  • 21725
  • 21726
  • 21727
  • 21728
  • 21729
  • 21730
  • 21731
  • 21732
discharge_volume   number  optional    

Must not be greater than 2147483647. Example: 25

discharge_points_count   number  optional    

Must not be greater than 3. Example: 3

sludge_generation   boolean  optional    

Example: true

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": "guideline_version",
            "profile_type": "report_profile",
            "service_id": null,
            "single_select": 1,
            "type": "integer",
            "required": 1,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": 1,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater 2.2",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 2,
                    "external_id": 8,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Purchasing",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 3,
                    "external_id": 10,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Traceability",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 5,
                    "external_id": 12,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Air Emissions Guidelines",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 6,
                    "external_id": 13,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical-Related Waste Disposal",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 7,
                    "external_id": 14,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Management Strategy",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 8,
                    "external_id": 15,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Safe Chemical Storage",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 9,
                    "external_id": 16,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Waste Management",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 10,
                    "external_id": 17,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Handling & Worker Safety",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 11,
                    "external_id": 18,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Document and Process Control",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 13,
                    "external_id": 20,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Continuous Improvement Actions",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 16,
                    "external_id": 23,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 17,
                    "external_id": 24,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater and sludge",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 26,
                    "external_id": 38,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck Reporting",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 27,
                    "external_id": 39,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Input Materials Purchasing",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 29,
                    "external_id": 41,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Materials Traceability",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 30,
                    "external_id": 42,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "ETP Assessment",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 34,
                    "external_id": 26,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Water Efficiency",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                }
            ]
        },
        {
            "id": 1,
            "name": "guideline_version",
            "profile_type": "report_profile",
            "service_id": null,
            "single_select": 1,
            "type": "integer",
            "required": 1,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": 1,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater 2.2",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 2,
                    "external_id": 8,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Purchasing",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 3,
                    "external_id": 10,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Traceability",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 5,
                    "external_id": 12,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Air Emissions Guidelines",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 6,
                    "external_id": 13,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical-Related Waste Disposal",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 7,
                    "external_id": 14,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Management Strategy",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 8,
                    "external_id": 15,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Safe Chemical Storage",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 9,
                    "external_id": 16,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Waste Management",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 10,
                    "external_id": 17,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Handling & Worker Safety",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 11,
                    "external_id": 18,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Document and Process Control",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 13,
                    "external_id": 20,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Continuous Improvement Actions",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 16,
                    "external_id": 23,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 17,
                    "external_id": 24,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater and sludge",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 26,
                    "external_id": 38,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck Reporting",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 27,
                    "external_id": 39,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Input Materials Purchasing",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 29,
                    "external_id": 41,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Materials Traceability",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 30,
                    "external_id": 42,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "ETP Assessment",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                },
                {
                    "id": 34,
                    "external_id": 26,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Water Efficiency",
                    "selectable": 1,
                    "order": null,
                    "facility_types": []
                }
            ]
        }
    ]
}
 

Request      

GET api/organisations/supplier-profile/attribute-groups

Headers

Authorization        

Example: Bearer {YOUR_AUTH_KEY}

Content-Type        

Example: application/json

Accept        

Example: application/json

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/et?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/et"
);

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": "api_requests",
            "level": "DEBUG",
            "message": "Api response sent to https://scmf.roadmaptozero.com/api/substances/facility/v1/schema",
            "context": {
                "status": 200,
                "response": "{\"status\":\"success\",\"api_identifier\":\"getsubstancesbyfacility-schema\",\"request\":{\"parameters\":[{\"name\":\"guideline_version\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/guideline\\/versions\\/v1\"},{\"name\":\"industry_type\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/industry\\/types\\/v1\"},{\"name\":\"facility_type\",\"type\":\"array\",\"items\":{\"type\":\"integer\"},\"required\":true,\"multi_select\":true,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/facility\\/types\\/v1\"},{\"name\":\"discharge_type\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/discharge\\/types\\/v1\"},{\"name\":\"above_15m\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values\":{\"0\":\"less than 15m\\u00b3 per day\",\"1\":\"more than or equal 15m\\u00b3 per day\"}},{\"name\":\"has_sludge\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values\":{\"0\":\"No\",\"1\":\"Yes\"}},{\"name\":\"disposal_pathway\",\"type\":\"integer\",\"required\":false,\"multi_select\":false,\"virtual_values\":{\"0\":\"Not applicable\\/none\"},\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/disposal\\/pathways\\/v1\",\"comment\":\"Error if required and not provided\"},{\"name\":\"fiber_type\",\"type\":\"integer\",\"required\":false,\"multi_select\":false,\"virtual_values\":{\"0\":\"Not applicable\\/none\"},\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/fiber\\/types\\/v1\",\"comment\":\"Error if required and not provided\"}]}}",
                "requestBody": []
            },
            "created_at": "2025-11-14 09:21:43",
            "deleted_at": null
        },
        {
            "id": 1,
            "channel": "api_requests",
            "level": "DEBUG",
            "message": "Api response sent to https://scmf.roadmaptozero.com/api/substances/facility/v1/schema",
            "context": {
                "status": 200,
                "response": "{\"status\":\"success\",\"api_identifier\":\"getsubstancesbyfacility-schema\",\"request\":{\"parameters\":[{\"name\":\"guideline_version\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/guideline\\/versions\\/v1\"},{\"name\":\"industry_type\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/industry\\/types\\/v1\"},{\"name\":\"facility_type\",\"type\":\"array\",\"items\":{\"type\":\"integer\"},\"required\":true,\"multi_select\":true,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/facility\\/types\\/v1\"},{\"name\":\"discharge_type\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/discharge\\/types\\/v1\"},{\"name\":\"above_15m\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values\":{\"0\":\"less than 15m\\u00b3 per day\",\"1\":\"more than or equal 15m\\u00b3 per day\"}},{\"name\":\"has_sludge\",\"type\":\"integer\",\"required\":true,\"multi_select\":false,\"values\":{\"0\":\"No\",\"1\":\"Yes\"}},{\"name\":\"disposal_pathway\",\"type\":\"integer\",\"required\":false,\"multi_select\":false,\"virtual_values\":{\"0\":\"Not applicable\\/none\"},\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/disposal\\/pathways\\/v1\",\"comment\":\"Error if required and not provided\"},{\"name\":\"fiber_type\",\"type\":\"integer\",\"required\":false,\"multi_select\":false,\"virtual_values\":{\"0\":\"Not applicable\\/none\"},\"values_endpoint\":\"https:\\/\\/scmf.roadmaptozero.com\\/api\\/fiber\\/types\\/v1\",\"comment\":\"Error if required and not provided\"}]}}",
                "requestBody": []
            },
            "created_at": "2025-11-14 09:21:43",
            "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: et

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/ut/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/ut/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"
}
 

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

Archive

requires authentication

Archive logs (soft delete)

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/system/logs/channel/qui/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/qui/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"
}
 

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

Delete Archived

requires authentication

Delete archived logs (force delete)

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/system/logs/channel/esse/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/esse/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: esse

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/ea" \
    --header "Authorization: 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/ea"
);

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

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\": \"et\",
    \"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": "et",
    "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: et

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/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/system/organisation/1/mail/preview/id"
);

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"
}
 

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

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=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-service/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": "2025-11-14T09:21:45.000000Z",
        "updated_at": "2025-11-14T09:21:45.000000Z",
        "public_file_url": "https://staging-api.vm400.consulting1x1.info/storage/terms-and-service/TaS Example.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: 3

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=10&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": "10",
    "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": "2025-11-14T09:21:45.000000Z",
        "updated_at": "2025-11-14T09:21:45.000000Z",
        "public_file_url": "https://staging-api.vm400.consulting1x1.info/storage/terms-and-service/TaS Example.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: 10

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/phpfPOjkE" 
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/phpfPOjkE

Store

requires authentication

Store a new terms and conditions document.

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/system/user/1/terms-and-conditions" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "document=@/tmp/phppKkpnE" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/system/user/1/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: 1

Body Parameters

document   file     

Must be a file. Example: /tmp/phppKkpnE

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/1/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/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 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: 1

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/1/notifications?page=1&per_page=6" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"read\": false,
    \"unread\": false
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/users/1/notifications"
);

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",
};

let body = {
    "read": false,
    "unread": false
};

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

Example response (200):


{
    "data": [
        {
            "id": 222,
            "user_id": 28083,
            "type": "organisation_updates",
            "message": "Lab Request Accepted - [ZDHC test company SBX] | ClearStream\nEmail: schulz@zdhc.org\nPhone: 00312012345678",
            "url": "https://zdhcsandboxdev.consulting1x1.info/organisations/60301/clearstream/action-steps",
            "read_at": "2026-01-09 10:05:47",
            "created_at": "2026-01-09T08:31:03.000000Z",
            "updated_at": "2026-01-09T10:05:47.000000Z"
        },
        {
            "id": 222,
            "user_id": 28083,
            "type": "organisation_updates",
            "message": "Lab Request Accepted - [ZDHC test company SBX] | ClearStream\nEmail: schulz@zdhc.org\nPhone: 00312012345678",
            "url": "https://zdhcsandboxdev.consulting1x1.info/organisations/60301/clearstream/action-steps",
            "read_at": "2026-01-09 10:05:47",
            "created_at": "2026-01-09T08:31:03.000000Z",
            "updated_at": "2026-01-09T10:05:47.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: 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 50 Example: 6

Body Parameters

read   boolean  optional    

Example: false

unread   boolean  optional    

Example: false

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/1/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/1/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: 1

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/1/notifications/mark-as-read/222" \
    --header "Authorization: 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/1/notifications/mark-as-read/222"
);

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

notification   integer  optional    

Example: 222

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/1/notifications/mark-as-unread/222" \
    --header "Authorization: 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/1/notifications/mark-as-unread/222"
);

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

notification_id   integer     

The ID of the notification. Example: 222

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/1/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/1/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"
}
 

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

Update Notification Settings

requires authentication

Update notification settings for a user.

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/users/1/notifications/settings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"product_updates\": true,
    \"organisation_updates\": false,
    \"weekly_notification_digest\": false,
    \"marketing_updates\": true
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/users/1/notifications/settings"
);

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

let body = {
    "product_updates": true,
    "organisation_updates": false,
    "weekly_notification_digest": false,
    "marketing_updates": true
};

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

Body Parameters

product_updates   boolean     

Example: true

organisation_updates   boolean     

Example: false

weekly_notification_digest   boolean     

Example: false

marketing_updates   boolean     

Example: true

Show

requires authentication

Get the properties of a user.

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/users/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/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": "02-TXFQXFYRE4ACK-M",
        "ulid": "01k0y9mg650dbx0cp4nhq1vm7m",
        "pdc_id": null,
        "role_id": 2,
        "first_name": "System",
        "last_name": "User",
        "email": "admin@localhost",
        "email_verified_at": null,
        "phone": "+13523381248",
        "location": null,
        "locale": "es_BO",
        "created_at": "2025-07-24T13:23:18.000000Z",
        "updated_at": "2025-12-08T15:12:52.000000Z",
        "deleted_at": null,
        "last_active_at": "2025-12-02T13:51:01.000000Z",
        "profile_reviewed_at": null,
        "status": "active",
        "profile_picture_url": null,
        "location_name": null
    }
}
 

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

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/1" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"lvlgdwggjtfsqp\",
    \"last_name\": \"nebtyjmpakbzwidealoweubo\",
    \"email\": \"ullrich.lauretta@example.com\",
    \"phone\": \"+1234567890\",
    \"password\": \"=~M)~qM`}:fno_b2N:fI\",
    \"location\": \"US\",
    \"locale\": \"ti_ET\",
    \"profile_picture\": \"exoymlupjw\"
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/users/1"
);

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

let body = {
    "first_name": "lvlgdwggjtfsqp",
    "last_name": "nebtyjmpakbzwidealoweubo",
    "email": "ullrich.lauretta@example.com",
    "phone": "+1234567890",
    "password": "=~M)~qM`}:fno_b2N:fI",
    "location": "US",
    "locale": "ti_ET",
    "profile_picture": "exoymlupjw"
};

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

Body Parameters

first_name   string     

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

last_name   string     

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

email   string     

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

phone   string     

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

password   string  optional    

Must not be greater than 255 characters. Example: =~M)~qM}:fno_b2N:fI`

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

profile_picture   string  optional    

Must not be greater than 2048 characters. Example: exoymlupjw

Destroy

requires authentication

Delete a user

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/users/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/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, 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: 1

IsRegistered

requires authentication

Checks if user is registered

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

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/1/organisations?pending=&non_accepted=&only_trashed=&per_page=12&sort=reference_id%2Cname%2Crole_name%2Cmembership_accepted_at%2Cmembership_deleted_at&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/1/organisations"
);

const params = {
    "pending": "0",
    "non_accepted": "0",
    "only_trashed": "0",
    "per_page": "12",
    "sort": "reference_id,name,role_name,membership_accepted_at,membership_deleted_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",
};


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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "maxio_customer_id": 225589,
            "reference_id": "01-CR698383XMWJ2-P",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "type_id": 2,
            "status": "approved",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "contact_first_name": "Alfonzo",
            "contact_last_name": "Crooks",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": "Update your business registration document",
            "registration_mail_sent_at": "1994-04-10 08:31:47",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "profile_reviewed_by_user_id": 73080,
            "location_name": "Botswana",
            "type": {
                "id": 2,
                "name": "Supplier",
                "display_name": "Supplier",
                "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
                "selectable": 1,
                "created_at": "2025-11-14T09:21:46.000000Z",
                "updated_at": "2026-03-24T14:59:35.000000Z"
            },
            "organisation_users": [
                {
                    "id": 1,
                    "organisation_id": 1,
                    "user_id": 1,
                    "invited_by": null,
                    "role_id": 4,
                    "last_authorization": "2025-12-02T13:51:01.000000Z",
                    "invitation_sent_at": "2025-11-14T09:21:52.000000Z",
                    "invitation_accepted_at": "2025-11-14T09:21:52.000000Z",
                    "created_at": "2025-07-24T13:23:28.000000Z",
                    "updated_at": "2025-12-02T13:51:01.000000Z",
                    "deleted_at": null,
                    "role": {
                        "id": 4,
                        "parent_id": 3,
                        "name": "ORGANISATION_ADMIN"
                    },
                    "organisation": {
                        "id": 1,
                        "maxio_customer_id": 225589,
                        "reference_id": "01-CR698383XMWJ2-P",
                        "pdc_id": null,
                        "gateway_aid": null,
                        "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                        "type_id": 2,
                        "status": "approved",
                        "name": "test-Supplier System",
                        "legal_name": "Schroeder Ltd",
                        "address_1": "149 Koss Dam Suite 796",
                        "address_2": "Suite 708",
                        "city": "Bergemouth",
                        "state": "Michigan",
                        "location": "BW",
                        "zip": "26306",
                        "phone": "+17728385594",
                        "email": "yessenia18@bahringer.net",
                        "contact_first_name": "Alfonzo",
                        "contact_last_name": "Crooks",
                        "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": "Update your business registration document",
                        "registration_mail_sent_at": "1994-04-10 08:31:47",
                        "created_at": "2025-07-24T13:23:28.000000Z",
                        "updated_at": "2026-03-24T08:26:00.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": "2026-03-24 08:26:00",
                        "profile_reviewed_by_user_id": 73080,
                        "location_name": "Botswana"
                    }
                }
            ]
        },
        {
            "id": 1,
            "maxio_customer_id": 225589,
            "reference_id": "01-CR698383XMWJ2-P",
            "pdc_id": null,
            "gateway_aid": null,
            "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
            "type_id": 2,
            "status": "approved",
            "name": "test-Supplier System",
            "legal_name": "Schroeder Ltd",
            "address_1": "149 Koss Dam Suite 796",
            "address_2": "Suite 708",
            "city": "Bergemouth",
            "state": "Michigan",
            "location": "BW",
            "zip": "26306",
            "phone": "+17728385594",
            "email": "yessenia18@bahringer.net",
            "contact_first_name": "Alfonzo",
            "contact_last_name": "Crooks",
            "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
            "avatar_url": null,
            "applicant_comment": null,
            "reviewer_comment": "Update your business registration document",
            "registration_mail_sent_at": "1994-04-10 08:31:47",
            "created_at": "2025-07-24T13:23:28.000000Z",
            "updated_at": "2026-03-24T08:26:00.000000Z",
            "reviewer_comment_category": null,
            "profile_reviewed_at": "2026-03-24 08:26:00",
            "profile_reviewed_by_user_id": 73080,
            "location_name": "Botswana",
            "type": {
                "id": 2,
                "name": "Supplier",
                "display_name": "Supplier",
                "description": "Deserunt nesciunt quia fugiat quisquam dolorem facilis dolores. Officia id facere et error. Dolorem saepe animi asperiores. Deleniti atque sed quia quas omnis totam est enim. In qui sit omnis in.",
                "selectable": 1,
                "created_at": "2025-11-14T09:21:46.000000Z",
                "updated_at": "2026-03-24T14:59:35.000000Z"
            },
            "organisation_users": [
                {
                    "id": 1,
                    "organisation_id": 1,
                    "user_id": 1,
                    "invited_by": null,
                    "role_id": 4,
                    "last_authorization": "2025-12-02T13:51:01.000000Z",
                    "invitation_sent_at": "2025-11-14T09:21:52.000000Z",
                    "invitation_accepted_at": "2025-11-14T09:21:52.000000Z",
                    "created_at": "2025-07-24T13:23:28.000000Z",
                    "updated_at": "2025-12-02T13:51:01.000000Z",
                    "deleted_at": null,
                    "role": {
                        "id": 4,
                        "parent_id": 3,
                        "name": "ORGANISATION_ADMIN"
                    },
                    "organisation": {
                        "id": 1,
                        "maxio_customer_id": 225589,
                        "reference_id": "01-CR698383XMWJ2-P",
                        "pdc_id": null,
                        "gateway_aid": null,
                        "uuid": "9f77ac50-60f5-4fda-b908-438a1a6f92e4",
                        "type_id": 2,
                        "status": "approved",
                        "name": "test-Supplier System",
                        "legal_name": "Schroeder Ltd",
                        "address_1": "149 Koss Dam Suite 796",
                        "address_2": "Suite 708",
                        "city": "Bergemouth",
                        "state": "Michigan",
                        "location": "BW",
                        "zip": "26306",
                        "phone": "+17728385594",
                        "email": "yessenia18@bahringer.net",
                        "contact_first_name": "Alfonzo",
                        "contact_last_name": "Crooks",
                        "website": "http://www.hermiston.com/qui-molestiae-cum-ut-deserunt-incidunt-ratione-illum",
                        "avatar_url": null,
                        "applicant_comment": null,
                        "reviewer_comment": "Update your business registration document",
                        "registration_mail_sent_at": "1994-04-10 08:31:47",
                        "created_at": "2025-07-24T13:23:28.000000Z",
                        "updated_at": "2026-03-24T08:26:00.000000Z",
                        "reviewer_comment_category": null,
                        "profile_reviewed_at": "2026-03-24 08:26:00",
                        "profile_reviewed_by_user_id": 73080,
                        "location_name": "Botswana"
                    }
                }
            ]
        }
    ],
    "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: 1

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

per_page   integer  optional    

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

sort   string  optional    

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

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/1/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/1/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: 1

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/1/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/1/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: 1

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/2/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/2/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"
}
 

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

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": "guideline_version",
            "profile_type": "report_profile",
            "service_id": null,
            "single_select": 1,
            "type": "integer",
            "required": 1,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": 1,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater 2.2",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 2,
                    "external_id": 8,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Purchasing",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 3,
                    "external_id": 10,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Traceability",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 5,
                    "external_id": 12,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Air Emissions Guidelines",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 6,
                    "external_id": 13,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical-Related Waste Disposal",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 7,
                    "external_id": 14,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Management Strategy",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 8,
                    "external_id": 15,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Safe Chemical Storage",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 9,
                    "external_id": 16,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Waste Management",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 10,
                    "external_id": 17,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Handling & Worker Safety",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 11,
                    "external_id": 18,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Document and Process Control",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 13,
                    "external_id": 20,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Continuous Improvement Actions",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 16,
                    "external_id": 23,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 17,
                    "external_id": 24,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater and sludge",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 26,
                    "external_id": 38,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck Reporting",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 27,
                    "external_id": 39,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Input Materials Purchasing",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 29,
                    "external_id": 41,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Materials Traceability",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 30,
                    "external_id": 42,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "ETP Assessment",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 34,
                    "external_id": 26,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Water Efficiency",
                    "selectable": 1,
                    "order": null
                }
            ]
        },
        {
            "id": 1,
            "name": "guideline_version",
            "profile_type": "report_profile",
            "service_id": null,
            "single_select": 1,
            "type": "integer",
            "required": 1,
            "items_type": null,
            "attributes": [
                {
                    "id": 1,
                    "external_id": 1,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater 2.2",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 2,
                    "external_id": 8,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Purchasing",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 3,
                    "external_id": 10,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Traceability",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 5,
                    "external_id": 12,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Air Emissions Guidelines",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 6,
                    "external_id": 13,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical-Related Waste Disposal",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 7,
                    "external_id": 14,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Management Strategy",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 8,
                    "external_id": 15,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Safe Chemical Storage",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 9,
                    "external_id": 16,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Waste Management",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 10,
                    "external_id": 17,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Chemical Handling & Worker Safety",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 11,
                    "external_id": 18,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Document and Process Control",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 13,
                    "external_id": 20,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Continuous Improvement Actions",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 16,
                    "external_id": 23,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 17,
                    "external_id": 24,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Wastewater and sludge",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 26,
                    "external_id": 38,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "InCheck Reporting",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 27,
                    "external_id": 39,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Input Materials Purchasing",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 29,
                    "external_id": 41,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Materials Traceability",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 30,
                    "external_id": 42,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "ETP Assessment",
                    "selectable": 1,
                    "order": null
                },
                {
                    "id": 34,
                    "external_id": 26,
                    "group_id": 1,
                    "parent_id": null,
                    "short": null,
                    "name": "Water Efficiency",
                    "selectable": 1,
                    "order": 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/2/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/2/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": 2,
        "report_id": 2,
        "version_id": 1,
        "requires_testing": 1,
        "completed_at": "2025-11-14 10:16:53",
        "created_at": "2025-11-14T10:16:44.000000Z",
        "updated_at": "2025-11-14T10:16:53.000000Z",
        "attributes": [
            {
                "id": 1,
                "external_id": 1,
                "group_id": 1,
                "parent_id": null,
                "short": null,
                "name": "Wastewater 2.2",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 1
                }
            },
            {
                "id": 36,
                "external_id": 1,
                "group_id": 2,
                "parent_id": null,
                "short": null,
                "name": "Textile",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 36
                }
            },
            {
                "id": 52,
                "external_id": 13,
                "group_id": 3,
                "parent_id": null,
                "short": null,
                "name": "Vertically integrated Mill",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 52
                }
            },
            {
                "id": 53,
                "external_id": 14,
                "group_id": 3,
                "parent_id": null,
                "short": null,
                "name": "Down and Feathers processor",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 53
                }
            },
            {
                "id": 54,
                "external_id": 15,
                "group_id": 3,
                "parent_id": null,
                "short": null,
                "name": "Raw hide/skin to tanned",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 54
                }
            },
            {
                "id": 55,
                "external_id": 16,
                "group_id": 3,
                "parent_id": null,
                "short": null,
                "name": "Raw hide/skin to crust",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 55
                }
            },
            {
                "id": 74,
                "external_id": 1,
                "group_id": 4,
                "parent_id": null,
                "short": null,
                "name": "Direct",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 74
                }
            },
            {
                "id": 80,
                "external_id": 0,
                "group_id": 5,
                "parent_id": null,
                "short": null,
                "name": "less than 15m³ per day",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 80
                }
            },
            {
                "id": 82,
                "external_id": 0,
                "group_id": 6,
                "parent_id": null,
                "short": null,
                "name": "No",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 82
                }
            },
            {
                "id": 91,
                "external_id": 0,
                "group_id": 7,
                "parent_id": null,
                "short": null,
                "name": "Not applicable/none",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 91
                }
            },
            {
                "id": 98,
                "external_id": 0,
                "group_id": 8,
                "parent_id": null,
                "short": null,
                "name": "Not applicable/none",
                "selectable": 1,
                "order": null,
                "pivot": {
                    "profile_id": 2,
                    "attribute_id": 98
                }
            }
        ]
    }
}
 

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

Store

requires authentication

Get facility information

Example request:
curl --request POST \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/facility-information" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"complete\": true,
    \"guideline_version\": 10,
    \"industry_type\": 38,
    \"facility_type\": [],
    \"discharge_type\": 76,
    \"above_15m\": 81,
    \"has_sludge\": 83,
    \"disposal_pathway\": 89,
    \"fiber_type\": 95
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/facility-information"
);

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

let body = {
    "complete": true,
    "guideline_version": 10,
    "industry_type": 38,
    "facility_type": [],
    "discharge_type": 76,
    "above_15m": 81,
    "has_sludge": 83,
    "disposal_pathway": 89,
    "fiber_type": 95
};

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

Body Parameters

complete   boolean  optional    

Example: true

guideline_version   integer     

Example: 10

Must be one of:
  • 1
  • 2
  • 3
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 13
  • 16
  • 17
  • 26
  • 27
  • 29
  • 30
  • 34
industry_type   integer     

Example: 38

Must be one of:
  • 36
  • 37
  • 38
  • 39
facility_type   object     
Must be one of:
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
discharge_type   integer     

Example: 76

Must be one of:
  • 74
  • 75
  • 76
  • 77
  • 79
above_15m   integer     

Example: 81

Must be one of:
  • 80
  • 81
has_sludge   integer     

Example: 83

Must be one of:
  • 82
  • 83
disposal_pathway   integer  optional    

Example: 89

Must be one of:
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
fiber_type   integer  optional    

Example: 95

Must be one of:
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98

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=14&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": "14",
    "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": 2,
            "report_id": 2,
            "laboratory_id": 238,
            "reporting_cycle": "2026-1",
            "location": "NL",
            "status": "CLOSED",
            "upload_method": "manual",
            "sampling_completed_at": "2025-11-14T10:17:35.000000Z",
            "testing_started_at": "2025-11-17 13:37:00",
            "testing_completed_at": "2025-11-17T13:37:22.000000Z",
            "closed_at": null,
            "accepted_at": "2025-11-14 10:17:27",
            "rejected_at": null,
            "accepted_by_supplier_at": "2025-11-17 13:37:50",
            "rejected_by_supplier_at": null,
            "rejection_reason": null,
            "rejection_reason_by_supplier": null,
            "supplier_rejection_additional_info": null,
            "created_at": "2025-11-14T10:17:10.000000Z",
            "updated_at": "2025-11-17T13:37:50.000000Z"
        },
        {
            "id": 2,
            "report_id": 2,
            "laboratory_id": 238,
            "reporting_cycle": "2026-1",
            "location": "NL",
            "status": "CLOSED",
            "upload_method": "manual",
            "sampling_completed_at": "2025-11-14T10:17:35.000000Z",
            "testing_started_at": "2025-11-17 13:37:00",
            "testing_completed_at": "2025-11-17T13:37:22.000000Z",
            "closed_at": null,
            "accepted_at": "2025-11-14 10:17:27",
            "rejected_at": null,
            "accepted_by_supplier_at": "2025-11-17 13:37:50",
            "rejected_by_supplier_at": null,
            "rejection_reason": null,
            "rejection_reason_by_supplier": null,
            "supplier_rejection_additional_info": null,
            "created_at": "2025-11-14T10:17:10.000000Z",
            "updated_at": "2025-11-17T13:37:50.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: 14

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/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/wastewater/reporting/laboratory-requests/2"
);

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": 2,
        "report_id": 2,
        "laboratory_id": 238,
        "reporting_cycle": "2026-1",
        "location": "NL",
        "status": "CLOSED",
        "upload_method": "manual",
        "sampling_completed_at": "2025-11-14T10:17:35.000000Z",
        "testing_started_at": "2025-11-17 13:37:00",
        "testing_completed_at": "2025-11-17T13:37:22.000000Z",
        "closed_at": null,
        "accepted_at": "2025-11-14 10:17:27",
        "rejected_at": null,
        "accepted_by_supplier_at": "2025-11-17 13:37:50",
        "rejected_by_supplier_at": null,
        "rejection_reason": null,
        "rejection_reason_by_supplier": null,
        "supplier_rejection_additional_info": null,
        "created_at": "2025-11-14T10:17:10.000000Z",
        "updated_at": "2025-11-17T13:37:50.000000Z",
        "report": {
            "id": 2,
            "reference_id": "60-HSER7PY6S32L-W",
            "uuid": "a05aba8c-5c93-4e50-91e7-04327509c58d",
            "organisation_id": 64,
            "status": "PASSED",
            "created_at": "2025-11-14T10:16:12.000000Z",
            "updated_at": "2025-11-19T14:24:04.000000Z",
            "archived_at": "2025-11-19 14:24:04",
            "last_viewed_at": "2025-11-19 14:24:00",
            "payment_completed_at": "2025-11-17 13:36:39",
            "organisation": {
                "id": 64,
                "maxio_customer_id": 226048,
                "reference_id": "01-CR6986RX4H7WL-N",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac5b-67a0-445a-b72e-e86db5d454b1",
                "type_id": 2,
                "status": "approved",
                "name": "test-Supplier a.rahman",
                "legal_name": "Hyatt Inc",
                "address_1": "3614 Swaniawski Ports Suite 956",
                "address_2": "Apt. 823",
                "city": "Alfordview",
                "state": "Connecticut",
                "location": "SO",
                "zip": "21152-3340",
                "phone": "+16058376916",
                "email": "nyasia32@reichert.com",
                "contact_first_name": "Priscilla",
                "contact_last_name": "Breitenberg",
                "website": "https://www.ferry.com/praesentium-provident-qui-nostrum-repellendus-animi-explicabo-ut",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1970-02-12 06:44:40",
                "created_at": "2025-07-24T13:23:35.000000Z",
                "updated_at": "2026-02-07T00:00:18.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-01-19 09:42:53",
                "profile_reviewed_by_user_id": 8,
                "location_name": "Somalia"
            },
            "profile": {
                "id": 2,
                "report_id": 2,
                "version_id": 1,
                "requires_testing": 1,
                "completed_at": "2025-11-14 10:16:53",
                "created_at": "2025-11-14T10:16:44.000000Z",
                "updated_at": "2025-11-14T10:16:53.000000Z",
                "attributes": [
                    {
                        "id": 1,
                        "external_id": 1,
                        "group_id": 1,
                        "parent_id": null,
                        "short": null,
                        "name": "Wastewater 2.2",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 1
                        },
                        "group": {
                            "id": 1,
                            "name": "guideline_version",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 36,
                        "external_id": 1,
                        "group_id": 2,
                        "parent_id": null,
                        "short": null,
                        "name": "Textile",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 36
                        },
                        "group": {
                            "id": 2,
                            "name": "industry_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 52,
                        "external_id": 13,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Vertically integrated Mill",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 52
                        },
                        "group": {
                            "id": 3,
                            "name": "facility_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 0,
                            "type": "array",
                            "required": 1,
                            "items_type": "integer"
                        }
                    },
                    {
                        "id": 53,
                        "external_id": 14,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Down and Feathers processor",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 53
                        },
                        "group": {
                            "id": 3,
                            "name": "facility_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 0,
                            "type": "array",
                            "required": 1,
                            "items_type": "integer"
                        }
                    },
                    {
                        "id": 54,
                        "external_id": 15,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Raw hide/skin to tanned",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 54
                        },
                        "group": {
                            "id": 3,
                            "name": "facility_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 0,
                            "type": "array",
                            "required": 1,
                            "items_type": "integer"
                        }
                    },
                    {
                        "id": 55,
                        "external_id": 16,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Raw hide/skin to crust",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 55
                        },
                        "group": {
                            "id": 3,
                            "name": "facility_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 0,
                            "type": "array",
                            "required": 1,
                            "items_type": "integer"
                        }
                    },
                    {
                        "id": 74,
                        "external_id": 1,
                        "group_id": 4,
                        "parent_id": null,
                        "short": null,
                        "name": "Direct",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 74
                        },
                        "group": {
                            "id": 4,
                            "name": "discharge_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 80,
                        "external_id": 0,
                        "group_id": 5,
                        "parent_id": null,
                        "short": null,
                        "name": "less than 15m³ per day",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 80
                        },
                        "group": {
                            "id": 5,
                            "name": "above_15m",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 82,
                        "external_id": 0,
                        "group_id": 6,
                        "parent_id": null,
                        "short": null,
                        "name": "No",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 82
                        },
                        "group": {
                            "id": 6,
                            "name": "has_sludge",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 1,
                            "items_type": null
                        }
                    },
                    {
                        "id": 91,
                        "external_id": 0,
                        "group_id": 7,
                        "parent_id": null,
                        "short": null,
                        "name": "Not applicable/none",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 91
                        },
                        "group": {
                            "id": 7,
                            "name": "disposal_pathway",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 0,
                            "items_type": null
                        }
                    },
                    {
                        "id": 98,
                        "external_id": 0,
                        "group_id": 8,
                        "parent_id": null,
                        "short": null,
                        "name": "Not applicable/none",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 98
                        },
                        "group": {
                            "id": 8,
                            "name": "fiber_type",
                            "profile_type": "report_profile",
                            "service_id": null,
                            "single_select": 1,
                            "type": "integer",
                            "required": 0,
                            "items_type": null
                        }
                    }
                ]
            }
        }
    }
}
 

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

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/2/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/2/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: 2

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/2/reject?rejection_reason=a" \
    --header "Authorization: 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/2/reject"
);

const params = {
    "rejection_reason": "a",
};
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: 2

Query Parameters

rejection_reason   string     

Example: a

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/2/laboratory-requests?laboratory_id=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/organisation/1/wastewater/reporting/2/laboratory-requests"
);

const params = {
    "laboratory_id": "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: "POST",
    headers,
}).then(response => response.json());

Example response (200):


{
    "message": "OK"
}
 

Example response (200):


{
    "data": {
        "id": 2,
        "report_id": 2,
        "laboratory_id": 238,
        "reporting_cycle": "2026-1",
        "location": "NL",
        "status": "CLOSED",
        "upload_method": "manual",
        "sampling_completed_at": "2025-11-14T10:17:35.000000Z",
        "testing_started_at": "2025-11-17 13:37:00",
        "testing_completed_at": "2025-11-17T13:37:22.000000Z",
        "closed_at": null,
        "accepted_at": "2025-11-14 10:17:27",
        "rejected_at": null,
        "accepted_by_supplier_at": "2025-11-17 13:37:50",
        "rejected_by_supplier_at": null,
        "rejection_reason": null,
        "rejection_reason_by_supplier": null,
        "supplier_rejection_additional_info": null,
        "created_at": "2025-11-14T10:17:10.000000Z",
        "updated_at": "2025-11-17T13:37:50.000000Z",
        "report": {
            "id": 2,
            "reference_id": "60-HSER7PY6S32L-W",
            "uuid": "a05aba8c-5c93-4e50-91e7-04327509c58d",
            "organisation_id": 64,
            "status": "PASSED",
            "created_at": "2025-11-14T10:16:12.000000Z",
            "updated_at": "2025-11-19T14:24:04.000000Z",
            "archived_at": "2025-11-19 14:24:04",
            "last_viewed_at": "2025-11-19 14:24:00",
            "payment_completed_at": "2025-11-17 13:36:39",
            "organisation": {
                "id": 64,
                "maxio_customer_id": 226048,
                "reference_id": "01-CR6986RX4H7WL-N",
                "pdc_id": null,
                "gateway_aid": null,
                "uuid": "9f77ac5b-67a0-445a-b72e-e86db5d454b1",
                "type_id": 2,
                "status": "approved",
                "name": "test-Supplier a.rahman",
                "legal_name": "Hyatt Inc",
                "address_1": "3614 Swaniawski Ports Suite 956",
                "address_2": "Apt. 823",
                "city": "Alfordview",
                "state": "Connecticut",
                "location": "SO",
                "zip": "21152-3340",
                "phone": "+16058376916",
                "email": "nyasia32@reichert.com",
                "contact_first_name": "Priscilla",
                "contact_last_name": "Breitenberg",
                "website": "https://www.ferry.com/praesentium-provident-qui-nostrum-repellendus-animi-explicabo-ut",
                "avatar_url": null,
                "applicant_comment": null,
                "reviewer_comment": null,
                "registration_mail_sent_at": "1970-02-12 06:44:40",
                "created_at": "2025-07-24T13:23:35.000000Z",
                "updated_at": "2026-02-07T00:00:18.000000Z",
                "reviewer_comment_category": null,
                "profile_reviewed_at": "2026-01-19 09:42:53",
                "profile_reviewed_by_user_id": 8,
                "location_name": "Somalia"
            },
            "profile": {
                "id": 2,
                "report_id": 2,
                "version_id": 1,
                "requires_testing": 1,
                "completed_at": "2025-11-14 10:16:53",
                "created_at": "2025-11-14T10:16:44.000000Z",
                "updated_at": "2025-11-14T10:16:53.000000Z",
                "attributes": [
                    {
                        "id": 1,
                        "external_id": 1,
                        "group_id": 1,
                        "parent_id": null,
                        "short": null,
                        "name": "Wastewater 2.2",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 1
                        }
                    },
                    {
                        "id": 36,
                        "external_id": 1,
                        "group_id": 2,
                        "parent_id": null,
                        "short": null,
                        "name": "Textile",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 36
                        }
                    },
                    {
                        "id": 52,
                        "external_id": 13,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Vertically integrated Mill",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 52
                        }
                    },
                    {
                        "id": 53,
                        "external_id": 14,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Down and Feathers processor",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 53
                        }
                    },
                    {
                        "id": 54,
                        "external_id": 15,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Raw hide/skin to tanned",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 54
                        }
                    },
                    {
                        "id": 55,
                        "external_id": 16,
                        "group_id": 3,
                        "parent_id": null,
                        "short": null,
                        "name": "Raw hide/skin to crust",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 55
                        }
                    },
                    {
                        "id": 74,
                        "external_id": 1,
                        "group_id": 4,
                        "parent_id": null,
                        "short": null,
                        "name": "Direct",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 74
                        }
                    },
                    {
                        "id": 80,
                        "external_id": 0,
                        "group_id": 5,
                        "parent_id": null,
                        "short": null,
                        "name": "less than 15m³ per day",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 80
                        }
                    },
                    {
                        "id": 82,
                        "external_id": 0,
                        "group_id": 6,
                        "parent_id": null,
                        "short": null,
                        "name": "No",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 82
                        }
                    },
                    {
                        "id": 91,
                        "external_id": 0,
                        "group_id": 7,
                        "parent_id": null,
                        "short": null,
                        "name": "Not applicable/none",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 91
                        }
                    },
                    {
                        "id": 98,
                        "external_id": 0,
                        "group_id": 8,
                        "parent_id": null,
                        "short": null,
                        "name": "Not applicable/none",
                        "selectable": 1,
                        "order": null,
                        "pivot": {
                            "profile_id": 2,
                            "attribute_id": 98
                        }
                    }
                ]
            }
        }
    }
}
 

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

Query Parameters

laboratory_id   integer     

The id of an existing record in the organisations table. Example: 4

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/2/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/2/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: 2

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/2/store-test-results" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parameters\": [
        {
            \"id\": 7,
            \"non_detected\": true
        }
    ]
}"
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/2/store-test-results"
);

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

let body = {
    "parameters": [
        {
            "id": 7,
            "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: 2

Body Parameters

parameters   object[]  optional    
id   integer     

Example: 7

value   string  optional    
method   string  optional    
non_detected   boolean  optional    

Example: true

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/2/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/2/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: 2

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/2/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/2/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: 2

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/2/reject-by-supplier?rejection_reason=values_are_incorrect&additional_details=c&return_to_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/laboratory-requests/2/reject-by-supplier"
);

const params = {
    "rejection_reason": "values_are_incorrect",
    "additional_details": "c",
    "return_to_reporting": "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: "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: 2

Query Parameters

rejection_reason   string     

Example: values_are_incorrect

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

return_to_reporting   boolean  optional    

Example: false

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/2/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/2/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: 2

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/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/wastewater/reporting/labs/test-results/2"
);

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,
        "report_id": 2,
        "parameters_filled": "2025-11-14 10:16:57",
        "test_date": null,
        "last_viewed_at": null,
        "created_at": "2025-11-14T10:16:54.000000Z",
        "updated_at": "2025-11-14T10:16:57.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: 2

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/2?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/reporting/labs/test-result-parameter-parents/2"
);

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": 45,
            "guideline_id": 1,
            "test_result_id": 3,
            "unit_id": 2,
            "method_id": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": null,
            "name": "ZDHC Heavy Metals",
            "matrix": "Discharged wastewater",
            "status": "passed",
            "cas_number": "",
            "alternative_value": null,
            "is_passing": 0,
            "mandatory": 1,
            "created_at": "2025-11-14T10:16:54.000000Z",
            "updated_at": "2026-03-20T09:28:55.000000Z",
            "parent_id": null,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 0,
            "non_detected": 0
        },
        {
            "id": 45,
            "guideline_id": 1,
            "test_result_id": 3,
            "unit_id": 2,
            "method_id": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": null,
            "name": "ZDHC Heavy Metals",
            "matrix": "Discharged wastewater",
            "status": "passed",
            "cas_number": "",
            "alternative_value": null,
            "is_passing": 0,
            "mandatory": 1,
            "created_at": "2025-11-14T10:16:54.000000Z",
            "updated_at": "2026-03-20T09:28:55.000000Z",
            "parent_id": null,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 0,
            "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: 2

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

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/2?per_page=1&group=16&page=1&search=ut&filter%5Bmatrix%5D=omnis&filter%5Bparent_name%5D=asperiores&filter%5Bonly_with_rca_cap%5D=consequuntur&column=matrix&sort=name%2Cparent_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/2"
);

const params = {
    "per_page": "1",
    "group": "16",
    "page": "1",
    "search": "ut",
    "filter[matrix]": "omnis",
    "filter[parent_name]": "asperiores",
    "filter[only_with_rca_cap]": "consequuntur",
    "column": "matrix",
    "sort": "name,parent_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": 45,
            "guideline_id": 1,
            "test_result_id": 3,
            "unit_id": 2,
            "method_id": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": null,
            "name": "ZDHC Heavy Metals",
            "matrix": "Discharged wastewater",
            "status": "passed",
            "cas_number": "",
            "alternative_value": null,
            "is_passing": 0,
            "mandatory": 1,
            "created_at": "2025-11-14T10:16:54.000000Z",
            "updated_at": "2026-03-20T09:28:55.000000Z",
            "parent_id": null,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 0,
            "non_detected": 0,
            "limits": [],
            "methods": [],
            "selected_method": null,
            "parent": null,
            "rca": null,
            "unit": {
                "id": 2,
                "name": ""
            }
        },
        {
            "id": 45,
            "guideline_id": 1,
            "test_result_id": 3,
            "unit_id": 2,
            "method_id": null,
            "resulting_limit_id": null,
            "visibility": "always",
            "measured_value": null,
            "name": "ZDHC Heavy Metals",
            "matrix": "Discharged wastewater",
            "status": "passed",
            "cas_number": "",
            "alternative_value": null,
            "is_passing": 0,
            "mandatory": 1,
            "created_at": "2025-11-14T10:16:54.000000Z",
            "updated_at": "2026-03-20T09:28:55.000000Z",
            "parent_id": null,
            "data_type": null,
            "value_type": null,
            "scoring_applicable": 0,
            "non_detected": 0,
            "limits": [],
            "methods": [],
            "selected_method": null,
            "parent": null,
            "rca": null,
            "unit": {
                "id": 2,
                "name": ""
            }
        }
    ]
}
 

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

Query Parameters

per_page   integer  optional    

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

group   integer  optional    

Example: 16

page   integer  optional    

the page number to show. Example: 1

search   string  optional    

Search in all of these columns: name, parent.name Example: ut

filter[matrix]   string  optional    

Filter column matrix by any accepted value. Matches part of the value. Example: omnis

filter[parent_name]   string  optional    

Filter column parent_name by any accepted value. Matches part of the value. Example: asperiores

filter[selectedMethod.method]   string  optional    

Filter column selectedMethod.method by any accepted value. Matches part of the value. Example: nihil

filter[only_with_rca_cap]   string  optional    

Filter column only_with_rca_cap by any accepted value. Matches part of the value. Example: consequuntur

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,parent_name

Export test result parameters

requires authentication

Esports the test result parameters for a specific report

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/labs/test-results/2/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/2/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"
}
 

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

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=10&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": "10",
    "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": 2,
            "reference_id": "60-HSER7PY6S32L-W",
            "uuid": "a05aba8c-5c93-4e50-91e7-04327509c58d",
            "organisation_id": 64,
            "status": "PASSED",
            "created_at": "2025-11-14T10:16:12.000000Z",
            "updated_at": "2025-11-19T14:24:04.000000Z",
            "archived_at": "2025-11-19 14:24:04",
            "last_viewed_at": "2025-11-19 14:24:00",
            "payment_completed_at": "2025-11-17 13:36:39"
        },
        {
            "id": 2,
            "reference_id": "60-HSER7PY6S32L-W",
            "uuid": "a05aba8c-5c93-4e50-91e7-04327509c58d",
            "organisation_id": 64,
            "status": "PASSED",
            "created_at": "2025-11-14T10:16:12.000000Z",
            "updated_at": "2025-11-19T14:24:04.000000Z",
            "archived_at": "2025-11-19 14:24:04",
            "last_viewed_at": "2025-11-19 14:24:00",
            "payment_completed_at": "2025-11-17 13:36:39"
        }
    ],
    "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: 10

page   integer  optional    

the page number to show. 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/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/wastewater/reporting/progress/2"
);

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"
}
 

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

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/2/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/2/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: 2

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/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/wastewater/reporting/details/2"
);

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"
}
 

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

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/2/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/2/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": 2,
        "effluent_discharge_method_id": 74,
        "project_number": "23",
        "wastewater_type": "Industrial Wastewater",
        "industrial_wastewater_volume_more_than_15qm": 0,
        "created_at": "2025-11-14T10:17:35.000000Z",
        "updated_at": "2025-11-14T10:17:35.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: 2

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/2/sampling-information" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "project_number=dfqvmwxxjafugfkdpgtk"\
    --form "effluent_discharge_method_id=velit"\
    --form "wastewater_type=Industrial Wastewater mixed with Domestic Wastewater"\
    --form "industrial_wastewater_volume_more_than_15qm=1"\
    --form "sample_points[][name]=ut"\
    --form "sample_points[][latitude]=11"\
    --form "sample_points[][longitude]=11"\
    --form "sample_points[][type]=untreated"\
    --form "sample_points[][discharge_to_aquatic_bodies]=1"\
    --form "sample_points[][pre_treatments][]=natus"\
    --form "sample_points[][temperature_safety_risk]="\
    --form "sample_points[][persistent_foam_safety_risk]=1"\
    --form "sample_points[][major_disposal_pathway]=Offsite Incineration at >1000°C"\
    --form "sample_points[][disposal_pathway_percentage]=5"\
    --form "sample_points[][filename]=@/tmp/phpgOBdka"     --form "sample_points[][temperature_safety_risk_file]=@/tmp/phpefEhka"     --form "sample_points[][persistent_foam_safety_risk_file]=@/tmp/phpLkjika" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/laboratory-requests/2/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', 'dfqvmwxxjafugfkdpgtk');
body.append('effluent_discharge_method_id', 'velit');
body.append('wastewater_type', 'Industrial Wastewater mixed with Domestic Wastewater');
body.append('industrial_wastewater_volume_more_than_15qm', '1');
body.append('sample_points[][name]', 'ut');
body.append('sample_points[][latitude]', '11');
body.append('sample_points[][longitude]', '11');
body.append('sample_points[][type]', 'untreated');
body.append('sample_points[][discharge_to_aquatic_bodies]', '1');
body.append('sample_points[][pre_treatments][]', 'natus');
body.append('sample_points[][temperature_safety_risk]', '');
body.append('sample_points[][persistent_foam_safety_risk]', '1');
body.append('sample_points[][major_disposal_pathway]', 'Offsite Incineration at >1000°C');
body.append('sample_points[][disposal_pathway_percentage]', '5');
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: 2

Body Parameters

project_number   string     

Must not be greater than 255 characters. Example: dfqvmwxxjafugfkdpgtk

effluent_discharge_method_id   string     

The id of an existing record in the supplier_attributes table. Example: velit

wastewater_type   string     

Example: Industrial Wastewater mixed with Domestic 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: ut

latitude   number     

Must be at least -90. Must not be greater than 90. Example: 11

longitude   number     

Must be at least -180. Must not be greater than 180. Example: 11

type   string     

Example: untreated

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

persistent_foam_safety_risk   boolean  optional    

Example: true

major_disposal_pathway   string  optional    

Example: Offsite Incineration at >1000°C

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

filename   file  optional    

Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpgOBdka

temperature_safety_risk_file   file  optional    

Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpefEhka

persistent_foam_safety_risk_file   file  optional    

Must be a file. Must not be greater than 5000 kilobytes. Example: /tmp/phpLkjika

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/2/rca/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/wastewater/reporting/2/rca/2"
);

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"
}
 

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

id   integer     

The ID of the rca. Example: 2

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/2/rca" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "parameter_id=19"\
    --form "is_resolved=1"\
    --form "reason_for_failure=htifm"\
    --form "corrective_action=knhxfuftjx"\
    --form "notes=voluptatem"\
    --form "action_notes=cupiditate"\
    --form "planned_resolution_date=2026-03-24 14:59:58"\
    --form "evidence=@/tmp/phppBfInb" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/rca"
);

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

const body = new FormData();
body.append('parameter_id', '19');
body.append('is_resolved', '1');
body.append('reason_for_failure', 'htifm');
body.append('corrective_action', 'knhxfuftjx');
body.append('notes', 'voluptatem');
body.append('action_notes', 'cupiditate');
body.append('planned_resolution_date', '2026-03-24 14:59:58');
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": 2,
        "parameter_id": 89,
        "is_resolved": false,
        "reason_for_failure": "Incorrect dosing of treatment chemicals",
        "corrective_action": "Optimise treatment chemical dosing",
        "notes": null,
        "action_notes": null,
        "planned_resolution_date": "2025-11-25T01:00:00.000000Z",
        "created_at": "2025-11-17T13:38:26.000000Z",
        "updated_at": "2025-11-17T13:38:26.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: 2

Body Parameters

parameter_id   integer     

The id of an existing record in the wastewater_test_result_parameters table. Example: 19

is_resolved   boolean  optional    

Example: true

reason_for_failure   string     

Must not be greater than 255 characters. Example: htifm

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

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

action_notes   string  optional    

Example: cupiditate

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-03-24 14:59:58

evidence   file  optional    

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/phppBfInb

Update

requires authentication

Update a given RCA record

Example request:
curl --request PUT \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/rca/2" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "parameter_id=9"\
    --form "is_resolved="\
    --form "reason_for_failure=nnqdwypilyygxtdffiw"\
    --form "corrective_action=ctjis"\
    --form "notes=incidunt"\
    --form "action_notes=ducimus"\
    --form "planned_resolution_date=2026-03-24 14:59:58"\
    --form "evidence=@/tmp/phpfiedPc" 
const url = new URL(
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/rca/2"
);

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

const body = new FormData();
body.append('parameter_id', '9');
body.append('is_resolved', '');
body.append('reason_for_failure', 'nnqdwypilyygxtdffiw');
body.append('corrective_action', 'ctjis');
body.append('notes', 'incidunt');
body.append('action_notes', 'ducimus');
body.append('planned_resolution_date', '2026-03-24 14:59:58');
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": 2,
        "parameter_id": 89,
        "is_resolved": false,
        "reason_for_failure": "Incorrect dosing of treatment chemicals",
        "corrective_action": "Optimise treatment chemical dosing",
        "notes": null,
        "action_notes": null,
        "planned_resolution_date": "2025-11-25T01:00:00.000000Z",
        "created_at": "2025-11-17T13:38:26.000000Z",
        "updated_at": "2025-11-17T13:38:26.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: 2

id   integer     

The ID of the rca. Example: 2

Body Parameters

parameter_id   integer     

The id of an existing record in the wastewater_test_result_parameters table. Example: 9

is_resolved   boolean  optional    

Example: false

reason_for_failure   string     

Must not be greater than 255 characters. Example: nnqdwypilyygxtdffiw

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

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

action_notes   string  optional    

Example: ducimus

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-03-24 14:59:58

evidence   file  optional    

Must be a file. Must not be greater than 5120 kilobytes. Example: /tmp/phpfiedPc

Delete File

requires authentication

Delete the evidence file

Example request:
curl --request DELETE \
    "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/rca/2/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/2/rca/2/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": 2,
        "parameter_id": 89,
        "is_resolved": false,
        "reason_for_failure": "Incorrect dosing of treatment chemicals",
        "corrective_action": "Optimise treatment chemical dosing",
        "notes": null,
        "action_notes": null,
        "planned_resolution_date": "2025-11-25T01:00:00.000000Z",
        "created_at": "2025-11-17T13:38:26.000000Z",
        "updated_at": "2025-11-17T13:38:26.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: 2

rca_id   integer     

The ID of the rca. Example: 2

RCA Overview PDF

Generate

requires authentication

Generate the Rca Overview Pdf

Example request:
curl --request GET \
    --get "https://staging-api.vm400.consulting1x1.info/api/organisation/1/wastewater/reporting/2/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/2/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: 2

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/2/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/2/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: 2