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.

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