ClimateAI Platform API

ClimateAI authentication and routing gateway for platform services. Covers accounts, account configuration, users, roles, permissions, device API keys, products, platform labels, reports, transactional email and request routing/proxying. Authenticated with a JWT Authorization header or an X-Api-Key device key.

Operations 76

POST /account/ #
GET /account/ Gets all accounts #
PUT /account/{account_id} #
DELETE /account/{account_id} #
GET /account/{account_id} #
POST /account/{account_id}/is_onboarded #
GET /account/{account_id}/platform #
POST /account/{account_id}/user/{user_id}/relation #
PUT /account/{account_id}/user/{user_id}/relation #
DELETE /account/{account_id}/user/{user_id}/relation #
GET /account/{account_id}/user/{user_id}/relation #
POST /account/{account_id}/user/{user_id}/relation/activate #
POST /account_config/ #
GET /account_config/ #
DELETE /account_config/account/{account_id} #
GET /account_config/account/{account_id} #
POST /account_config/delete #
PUT /account_config/{account_config_id} #
DELETE /account_config/{account_config_id} #
GET /account_config/{account_config_id} #
POST /auth/login #
POST /auth/logout #
POST /auth/refresh #
GET /auth/status Returns a 200 code #
POST /auth/sudo/{user_id} #
POST /auth/switch_account/{account_id} #
GET /auth/verify_token Returns a 200 code if authentication passes #
GET /device/ Gets a listing of the available devices #
POST /device/account/{account_id} Creates a new device for account by id #
GET /device/account/{account_id} #
POST /device/api_trial Creates an api trial api key #
PUT /device/{device_id} Updates a device #
DELETE /device/{device_id} Deletes a device by id #
GET /device/{device_id} #
POST /email/send Sends an email via notification service proxy #
POST /permission/ Creates a new Permission #
GET /permission/ #
PUT /permission/{permission_id} Updates a permission #
DELETE /permission/{permission_id} Deletes a permission by id #
GET /permission/{permission_id} #
POST /platform/ #
GET /platform/ #
GET /platform/skins Fetches all skins #
PUT /platform/{platform_id} Updates a platform #
GET /platform/{platform_id} Fetches a platform by id #
POST /product/ Creates a new product #
GET /product/ #
PUT /product/{product_id} Updates product #
DELETE /product/{product_id} Deletes product #
GET /product/{product_id} #
POST /report/ Creates a new report #
GET /report/ Gets all accounts #
DELETE /report/{report_id} Disables an account #
GET /report/{report_id} Gets a specific account by its id #
POST /role/ Creates a new Role #
GET /role/ #
PUT /role/{role_id} Updates a role #
DELETE /role/{role_id} Deletes a role by id #
GET /role/{role_id} #
POST /role/{role_id}/permission/{permission_id} Adds a new Role/Permission association #
DELETE /role/{role_id}/permission/{permission_id} Removes a Role/Permission association #
POST /user/ #
GET /user/ List all registered users #
POST /user/change_password Changes the user's password #
POST /user/reset_password Gets reset password token #
PUT /user/reset_password Resets password #
PUT /user/{user_id}/ #
DELETE /user/{user_id}/ Deletes a user by id #
GET /user/{user_id}/ #
GET /user/{user_id}/account/relation #
POST /{path} #
PUT /{path} #
DELETE /{path} #
GET /{path} #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/platform"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

climateai-platform-swagger.json Raw ↑
{
    "swagger": "2.0",
    "basePath": "/",
    "paths": {
        "/account/": {
            "post": {
                "responses": {
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/account_response"
                        }
                    },
                    "500": {
                        "description": "Error creating account"
                    },
                    "201": {
                        "description": "Successfully created new account."
                    }
                },
                "operationId": "Create an account",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/account_payload"
                        }
                    }
                ],
                "tags": [
                    "account"
                ]
            },
            "get": {
                "responses": {
                    "200": {
                        "description": "Successfully retrieved accounts."
                    },
                    "500": {
                        "description": "Error retrieving accounts."
                    },
                    "204": {
                        "description": "No accounts found."
                    }
                },
                "summary": "Gets all accounts",
                "operationId": "Retrieve all accounts",
                "tags": [
                    "account"
                ]
            }
        },
        "/account/search": {
            "post": {
                "responses": {
                    "200": {
                        "description": "Accounts successfully fetched."
                    },
                    "500": {
                        "description": "Error searching."
                    },
                    "204": {
                        "description": "No accounts found."
                    }
                },
                "operationId": "Search accounts",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/search_payload"
                        }
                    }
                ],
                "tags": [
                    "account"
                ]
            }
        },
        "/account/{account_id}": {
            "parameters": [
                {
                    "name": "account_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "put": {
                "responses": {
                    "200": {
                        "description": "Successfully updated account."
                    },
                    "500": {
                        "description": "Error updating account."
                    },
                    "404": {
                        "description": "No account with given ID found."
                    }
                },
                "operationId": "Update information about a specific account",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/account%20update"
                        }
                    }
                ],
                "tags": [
                    "account"
                ]
            },
            "delete": {
                "responses": {
                    "200": {
                        "description": "Successfully disabled account."
                    },
                    "500": {
                        "description": "Error disabling account."
                    },
                    "404": {
                        "description": "No account with given ID found."
                    }
                },
                "operationId": "Disable account by id",
                "tags": [
                    "account"
                ]
            },
            "get": {
                "responses": {
                    "200": {
                        "description": "Successfully retrieved account."
                    },
                    "500": {
                        "description": "Error retrieving account."
                    },
                    "404": {
                        "description": "No account with given ID found."
                    }
                },
                "operationId": "Retrieve account by id",
                "tags": [
                    "account"
                ]
            }
        },
        "/account/{account_id}/is_onboarded": {
            "parameters": [
                {
                    "name": "account_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "post": {
                "responses": {
                    "200": {
                        "description": "Successfully updated is_onboarded account"
                    },
                    "500": {
                        "description": "Error updating account."
                    },
                    "404": {
                        "description": "No account with given ID found."
                    }
                },
                "operationId": "Update an account is_onboarded",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/account_is_onboarded"
                        }
                    }
                ],
                "tags": [
                    "account"
                ]
            }
        },
        "/account/{account_id}/platform": {
            "parameters": [
                {
                    "name": "account_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "get": {
                "responses": {
                    "200": {
                        "description": "succesfully retrieved platform"
                    },
                    "500": {
                        "description": "Error getting platform linked to account"
                    },
                    "404": {
                        "description": "Account not found."
                    }
                },
                "operationId": "Gets a platform based on the account_id",
                "tags": [
                    "account"
                ]
            }
        },
        "/account/{account_id}/user/{user_id}/relation": {
            "parameters": [
                {
                    "name": "account_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                },
                {
                    "name": "user_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "post": {
                "responses": {
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/account_user_relation_response"
                        }
                    },
                    "500": {
                        "description": "Error creating account-user relationship."
                    },
                    "201": {
                        "description": "Successfully created new account-user relationship."
                    }
                },
                "operationId": "Add a new account-user relationship",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/account_user_relation_payload"
                        }
                    }
                ],
                "tags": [
                    "account"
                ]
            },
            "put": {
                "responses": {
                    "200": {
                        "description": "Successfully modified account-user relationship."
                    },
                    "500": {
                        "description": "Error modifying account-user relationship."
                    }
                },
                "operationId": "Modify an existing account-user relationship",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/account_user_relation_payload"
                        }
                    }
                ],
                "tags": [
                    "account"
                ]
            },
            "delete": {
                "responses": {
                    "500": {
                        "description": "Error removing account-user relation."
                    },
                    "404": {
                        "description": "No relation found for the account/user combination."
                    },
                    "200": {
                        "description": "Successfully deleted account-user relation."
                    }
                },
                "operationId": "Delete an account-user relation",
                "tags": [
                    "account"
                ]
            },
            "get": {
                "responses": {
                    "200": {
                        "description": "Successfully retrieved relation."
                    },
                    "500": {
                        "description": "Error retrieving relation."
                    },
                    "404": {
                        "description": "No relation found for the account/user combination."
                    }
                },
                "operationId": "Get a relation between the account/user",
                "tags": [
                    "account"
                ]
            }
        },
        "/account/{account_id}/user/{user_id}/relation/activate": {
            "parameters": [
                {
                    "name": "account_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                },
                {
                    "name": "user_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "post": {
                "responses": {
                    "200": {
                        "description": "Successfully activated account-user relationship."
                    },
                    "500": {
                        "description": "Error activating account-user relationship."
                    }
                },
                "operationId": "Activate an account-user relationship",
                "tags": [
                    "account"
                ]
            }
        },
        "/account_config/": {
            "post": {
                "responses": {
                    "500": {
                        "description": "Error creating account configs."
                    },
                    "409": {
                        "description": "Account config already exists."
                    },
                    "201": {
                        "description": "Account configs successfully created."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/account_config_response"
                            }
                        }
                    }
                },
                "operationId": "Create account configurations",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/account_config_payload"
                            }
                        }
                    }
                ],
                "tags": [
                    "account_config"
                ]
            },
            "get": {
                "responses": {
                    "200": {
                        "description": "Successfully retrieved account config."
                    },
                    "500": {
                        "description": "Error retrieving account config."
                    },
                    "204": {
                        "description": "No account config found."
                    }
                },
                "operationId": "Get all account configurations",
                "tags": [
                    "account_config"
                ]
            }
        },
        "/account_config/account/{account_id}": {
            "parameters": [
                {
                    "in": "path",
                    "description": "The account id related to config",
                    "name": "account_id",
                    "required": true,
                    "type": "string"
                }
            ],
            "delete": {
                "responses": {
                    "500": {
                        "description": "Error deleting account config."
                    },
                    "404": {
                        "description": "Account config not found."
                    },
                    "200": {
                        "description": "Account config successfully deleted."
                    }
                },
                "operationId": "delete configuration for an account",
                "tags": [
                    "account_config"
                ]
            },
            "get": {
                "responses": {
                    "500": {
                        "description": "Error fetching account config."
                    },
                    "204": {
                        "description": "Account config not found."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/account_config_response"
                            }
                        }
                    }
                },
                "operationId": "fetch all configuration for an account",
                "parameters": [
                    {
                        "description": "Filter by config type",
                        "type": "String",
                        "name": "config_type",
                        "in": "query"
                    }
                ],
                "tags": [
                    "account_config"
                ]
            }
        },
        "/account_config/delete": {
            "post": {
                "responses": {
                    "500": {
                        "description": "Error deleting account config(s)."
                    },
                    "409": {
                        "description": "Account config(s) does not exist."
                    },
                    "201": {
                        "description": "Account configs successfully deleted."
                    }
                },
                "operationId": "Delete account configurations by id",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/multi_account_config_ids"
                        }
                    }
                ],
                "tags": [
                    "account_config"
                ]
            }
        },
        "/account_config/{account_config_id}": {
            "parameters": [
                {
                    "in": "path",
                    "description": "The id of the config object",
                    "name": "account_config_id",
                    "required": true,
                    "type": "string"
                }
            ],
            "put": {
                "responses": {
                    "404": {
                        "description": "Account config not found."
                    },
                    "500": {
                        "description": "Error updating account config."
                    },
                    "201": {
                        "description": "Account config successfully updated."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/account_config_response"
                        }
                    }
                },
                "operationId": "update an account config",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/account_config_payload"
                        }
                    }
                ],
                "tags": [
                    "account_config"
                ]
            },
            "delete": {
                "responses": {
                    "404": {
                        "description": "Account config not found."
                    },
                    "500": {
                        "description": "Error deleting account config."
                    },
                    "200": {
                        "description": "Account config successfully deleted."
                    }
                },
                "operationId": "delete an account config by id",
                "tags": [
                    "account_config"
                ]
            },
            "get": {
                "responses": {
                    "404": {
                        "description": "Account config not found."
                    },
                    "500": {
                        "description": "Error fetching account config."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/account_config_response"
                        }
                    }
                },
                "operationId": "fetch an account config object",
                "tags": [
                    "account_config"
                ]
            }
        },
        "/auth/login": {
            "post": {
                "responses": {
                    "500": {
                        "description": "Error logging in"
                    },
                    "403": {
                        "description": "Inactive user"
                    },
                    "401": {
                        "description": "Invalid credentials"
                    },
                    "400": {
                        "description": "Bad input"
                    },
                    "200": {
                        "description": "Logged in"
                    }
                },
                "operationId": "user login",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/auth_details"
                        }
                    }
                ],
                "tags": [
                    "auth"
                ]
            }
        },
        "/auth/logout": {
            "post": {
                "responses": {
                    "500": {
                        "description": "Error logging out"
                    },
                    "401": {
                        "description": "Invalid auth token"
                    },
                    "200": {
                        "description": "Logged out"
                    }
                },
                "operationId": "logout a user",
                "parameters": [
                    {
                        "name": "Authorization",
                        "in": "header",
                        "type": "string",
                        "required": true
                    }
                ],
                "tags": [
                    "auth"
                ]
            }
        },
        "/auth/refresh": {
            "post": {
                "responses": {
                    "401": {
                        "description": "Error refreshing token"
                    },
                    "200": {
                        "description": "Refresh successful"
                    }
                },
                "operationId": "refresh a jwt token",
                "tags": [
                    "auth"
                ]
            }
        },
        "/auth/status": {
            "get": {
                "responses": {
                    "200": {
                        "description": "OK."
                    }
                },
                "summary": "Returns a 200 code",
                "operationId": "test request to check status",
                "tags": [
                    "auth"
                ]
            }
        },
        "/auth/sudo/{user_id}": {
            "parameters": [
                {
                    "name": "user_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "post": {
                "responses": {
                    "500": {
                        "description": "Error generating token"
                    },
                    "403": {
                        "description": "Not allowed to generate token"
                    },
                    "200": {
                        "description": "Sudo token generated"
                    }
                },
                "operationId": "generates a jwt token with the given user_id",
                "tags": [
                    "auth"
                ]
            }
        },
        "/auth/switch_account/{account_id}": {
            "parameters": [
                {
                    "name": "account_id",
                    "in": "path",
                    "required": true,
                    "type": "string"
                }
            ],
            "post": {
                "responses": {
                    "500": {
                        "description": "Error switching account"
                    },
                    "400": {
                        "description": "Bad input"
                    },
                    "200": {
                        "description": "Switched account"
                    }
                },
                "operationId": "switch account",
                "tags": [
                    "auth"
                ]
            }
        },
        "/auth/verify_token": {
            "get": {
                "responses": {
                    "422": {
                        "description": "Signature verification failed."
                    },
                    "401": {
                        "description": "Unauthorized."
                    },
                    "200": {
                        "description": "OK."
                    }
                },
                "summary": "Returns a 200 code if authentication passes",
                "operationId": "Verify credentials for reverse proxy",
                "security": [
                    {
                        "jwt": []
                    },
                    {
                        "apikey": []
                    }
                ],
                "tags": [
                    "auth"
                ]
            }
        },
        "/device/": {
            "get": {
                "responses": {
                    "200": {
                        "description": "Successfully retrieved devices."
                    },
                    "500": {
                        "description": "Error retrieving devices."
                    },
                    "404": {
                        "description": "No devices found."
                    }
                },
                "summary": "Gets a listing of the available devices",
                "operationId": "Get all devices",
                "tags": [
                    "device"
                ]
            }
        },
        "/device/account/{account_id}": {
            "parameters": [
                {
                    "in": "path",
                    "description": "The account id",
                    "name": "account_id",
                    "required": true,
                    "type": "string"
                }
            ],
            "post": {
                "responses": {
                    "404": {
                        "description": "Account not found."
                    },
                    "500": {
                        "description": "Error creating device."
                    },
                    "409": {
                        "description": "Device already exists."
                    },
                    "400": {
                        "description": "Bad input."
                    },
                    "201": {
                        "description": "Device successfully created."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/device_response"
                        }
                    }
                },
                "summary": "Creates a new device for account by id",
                "operationId": "register a new device for account by id",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/device_payload"
                        }
                    }
                ],
                "tags": [
                    "device"
                ]
            },
            "get": {
                "responses": {
                    "404": {
                        "description": "No devices found for account."
                    },
                    "200": {
                        "description": "Successfully retrieved devices."
                    },
                    "500": {
                        "description": "Error retrieving devices."
                    }
                },
                "operationId": "Get all devices for account by id",
                "tags": [
                    "device"
                ]
            }
        },
        "/device/api_trial": {
            "post": {
                "responses": {
                    "500": {
                        "description": "Error creating api trial."
                    },
                    "409": {
                        "description": "Api trial already exists."
                    },
                    "400": {
                        "description": "Bad input."
                    },
                    "201": {
                        "description": "Api trial successfully created."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/device_response"
                        }
                    }
                },
                "summary": "Creates an api trial api key",
                "operationId": "get api trial",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/api_trial_payload"
                        }
                    }
                ],
                "tags": [
                    "device"
                ]
            }
        },
        "/device/{device_id}": {
            "parameters": [
                {
                    "in": "path",
                    "description": "The device id",
                    "name": "device_id",
                    "required": true,
                    "type": "string"
                }
            ],
            "put": {
                "responses": {
                    "404": {
                        "description": "Device not found."
                    },
                    "500": {
                        "description": "Error updating device."
                    },
                    "400": {
                        "description": "Bad input."
                    },
                    "201": {
                        "description": "Device successfully updated."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/device_response"
                        }
                    }
                },
                "summary": "Updates a device",
                "operationId": "update a device",
                "parameters": [
                    {
                        "name": "payload",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/device_payload"
                        }
                    }
                ],
                "tags": [
                    "device"
                ]
            },
            "delete": {
                "responses": {
                    "404": {
                        "description": "Device not found."
                    },
                    "500": {
                        "description": "Error deleting device."
                    },
                    "200": {
                        "description": "Device successfully deleted."
                    }
                },
                "summary": "Deletes a device by id",
                "operationId": "delete a device",
                "tags": [
                    "device"
                ]
            },
            "get": {
                "responses": {
                    "404": {
                        "description": "Device not found."
                    },
                    "500": {
                        "description": "Error fetching device."
                    },
                    "200": {
                        "description": "Success",
                        "schema": {
                            "$ref": "#/definitions/device_response"
                        }
                    }
                },
                "operationId": "fetch a device",
                "tags": [
                    "device"
                ]
            }
        },
        "/email/send": {
  

# --- truncated at 32 KB (112 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/climateai/refs/heads/main/openapi/_original/climateai-platform-swagger.json