With the smart-me REST API you get Access to all your devices in the smart-me Cloud and you can add your own devices.
Bring your own key. This API needs your own smart-me key - get one from the provider, add it once below, and the proxy injects it on every call. Your OmniStream plan covers the unified SDK, key storage, and proxy - the provider's own rate limits still apply to your key.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("smart-me/AccessToken_Put");One install, one key - the same client calls every API on the marketplace.
Creates a Access Token to write on a Card (e.g. NFC)
Set an action for the specified device.
Gets all available Actions of a Device
Gets the additional information (e.g. Firmware Version) about a device.
Gets all Custom Devices
Creates or updates a Custom Device or updates it's values.
/**
* smartme - generated by OmniStream from smart-me's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/smart-me";
export class smartmeError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `smartme error ${status}`);
this.name = "smartmeError";
this.status = status;
this.code = code;
}
}
export interface smartmeOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class smartme {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: smartmeOptions = {}) {
if (!token) throw new Error("smartme: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new smartmeError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Creates a Access Token to write on a Card (e.g. NFC) */
accessTokenPut(body: unknown): Promise<any> {
return this._request("PUT", "/api/AccessToken", { body });
}
accountLogin(): Promise<any> {
return this._request("GET", "/api/Account/login", {});
}
postapiAccountLogin(): Promise<any> {
return this._request("POST", "/api/Account/login", { });
}
/** Set an action for the specified device. */
actionsPost(body: unknown): Promise<any> {
return this._request("POST", "/api/Actions", { body });
}
/** Gets all available Actions of a Device */
actionsGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/Actions/{id}", { params });
}
/** Gets the additional information (e.g. Firmware Version) about a device. */
additionalDeviceInformationGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/AdditionalDeviceInformation/{id}", { params });
}
/** Gets all Custom Devices */
customDeviceGet(): Promise<any> {
return this._request("GET", "/api/CustomDevice", {});
}
/** Creates or updates a Custom Device or updates it's values. */
customDevicePost(body: unknown): Promise<any> {
return this._request("POST", "/api/CustomDevice", { body });
}
/** Gets a Custom Device by it's ID */
getapiCustomdeviceId(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/CustomDevice/{id}", { params });
}
/** Gets a Device by it's Serial Number. The Serial is the part before the "-". */
deviceBySerialGet(params: { "serial": number }): Promise<any> {
return this._request("GET", "/api/DeviceBySerial", { params });
}
/** Gets all Devices */
devicesGet(): Promise<any> {
return this._request("GET", "/api/Devices", {});
}
/** Creates or updates a Device or updates it's values. */
devicesPost(body: unknown): Promise<any> {
return this._request("POST", "/api/Devices", { body });
}
/** Gets a Device by it's ID */
getapiDevicesId(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/Devices/{id}", { params });
}
/** Updates the On/Off Switch on a device.
For new implementations please use the "actions" command */
devicesPut(params: { "id": string; "switchState": boolean; "switchNumber"?: number }): Promise<any> {
return this._request("PUT", "/api/Devices/{id}", { params });
}
/** Gets all Devices for an Energy Type */
devicesByEnergyGet(params: { "meterEnergyType": string }): Promise<any> {
return this._request("GET", "/api/DevicesByEnergy", { params });
}
/** Gets all Devices by it's Sub Type (e.g. E-Charging Station) */
devicesBySubTypeGet(params: { "meterSubType": string }): Promise<any> {
return this._request("GET", "/api/DevicesBySubType", { params });
}
/** Force a device to send the data every second (if supported). This for about 30s.
Don't use this call to force a device to send the data every second for a longer time. */
fastSendDeviceValuesGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/FastSendDeviceValues/{id}", { params });
}
/** Gets the Values for a folder or a meter */
folderGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/Folder/{id}", { params });
}
/** Gets the folder menu items (each item might contain child items) */
folderMenuGet(params: { "filter"?: string }): Promise<any> {
return this._request("GET", "/api/FolderMenu", { params });
}
/** Creates and updates the folder menu items */
folderMenuPost(body: unknown): Promise<any> {
return this._request("POST", "/api/FolderMenu", { body });
}
/** A method returning HTTP 200 OK when queried.
It is used by Kubernetes probes to determine whether the app is healthy. */
healthGet(): Promise<any> {
return this._request("GET", "/api/Health", {});
}
/** M-BUS API: Adds data of a M-BUS Meter to the smart-me Cloud.
Just send us the M-BUS Telegram (RSP_UD) and we will do the Rest. */
mBusPost(body: unknown): Promise<any> {
return this._request("POST", "/api/MBus", { body });
}
/** Sets the Name of a Meter or a Folder */
meterFolderInformationPost(body: unknown): Promise<any> {
return this._request("POST", "/api/MeterFolderInformation", { body });
}
/** Beta: Gets the General Information for a Meter or a Folder */
meterFolderInformationGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/MeterFolderInformation/{id}", { params });
}
/** Gets the Values for a Meter at a given Date.
The first Value found before the given Date is returned. */
meterValuesGet(params: { "id": string; "date": string }): Promise<any> {
return this._request("GET", "/api/MeterValues/{id}", { params });
}
/** Gets all registrations for the Realtime API. */
registerForRealtimeApiGet(): Promise<any> {
return this._request("GET", "/api/RegisterForRealtimeApi", {});
}
/** Creates a new registration for the realtime API. The Realtime API sends you the data of the registred devices as soon as we have them on the cloud.
More Information about the realtime API: https://www.smart-me.com/Description/api/realtimeapi.aspx */
registerForRealtimeApiPost(body: unknown): Promise<any> {
return this._request("POST", "/api/RegisterForRealtimeApi", { body });
}
/** Deletes a realtime API registration. */
registerForRealtimeApiDelete(params: { "id": string }): Promise<any> {
return this._request("DELETE", "/api/RegisterForRealtimeApi/{id}", { params });
}
/** Sets the configuration of a smart-me device. The device needs to be online. */
smartMeDeviceConfigurationPost(body: unknown): Promise<any> {
return this._request("POST", "/api/SmartMeDeviceConfiguration", { body });
}
/** Gets the configuration of a smart-me device. */
smartMeDeviceConfigurationGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/SmartMeDeviceConfiguration/{id}", { params });
}
/** Creates or updates a subuser.
To create a new user set no ID (empty) */
subUserPost(body: unknown): Promise<any> {
return this._request("POST", "/api/SubUser", { body });
}
/** Get a sub user. The user must be assigend to the user that makes this call. */
subUserGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/SubUser/{id}", { params });
}
/** Delete a subuser */
subUserDelete(params: { "id": string }): Promise<any> {
return this._request("DELETE", "/api/SubUser/{id}", { params });
}
/** Gets the informations for the user. */
userGet(): Promise<any> {
return this._request("GET", "/api/User", {});
}
/** Triggers user account deletion. */
userDelete(): Promise<any> {
return this._request("DELETE", "/api/User", {});
}
/** Gets all (last) values of a device */
valuesGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/Values/{id}", { params });
}
/** Gets all (last) values of a device
The first Value found before the given Date is returned. */
valuesInPastGet(params: { "id": string; "date": string }): Promise<any> {
return this._request("GET", "/api/ValuesInPast/{id}", { params });
}
/** Gets multiple values of a device. This call needs a smart-me professional licence. */
valuesInPastMultipleGet(params: { "id": string; "startDate": string; "endDate": string; "interval": number }): Promise<any> {
return this._request("GET", "/api/ValuesInPastMultiple/{id}", { params });
}
/** Beta: Gets all active virtual meters */
virtualBillingMeterActiveGet(): Promise<any> {
return this._request("GET", "/api/VirtualBillingMeterActive", {});
}
/** Beta: Virtual Meter API: Activates a Meter and add the Consumption to a Virtual Meter assosiated with the User. */
virtualBillingMeterActivePost(body: unknown): Promise<any> {
return this._request("POST", "/api/VirtualBillingMeterActive", { body });
}
/** Beta: Virtual Meter API: Deactivates a Virtual Meter. */
virtualBillingMeterDeactivatePost(body: unknown): Promise<any> {
return this._request("POST", "/api/VirtualBillingMeterDeactivate", { body });
}
/** Beta: Gets all Meters available to activate as a Virtual Meter. */
virtualBillingMetersGet(): Promise<any> {
return this._request("GET", "/api/VirtualBillingMeters", {});
}
/** Calculates a virtual meter from a formula.
A meter is coded as ID("METERID") */
virtualMeterCalculateFormulaGet(params: { "formula": string }): Promise<any> {
return this._request("GET", "/api/VirtualMeterCalculateFormula", { params });
}
/** Gets all Virtual Tariffs of a user */
virtualTariffGet(): Promise<any> {
return this._request("GET", "/api/VirtualTariff", {});
}
/** Gets all virtual tariffs of a folder */
getapiVirtualtariffId(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/VirtualTariff/{id}", { params });
}
/** Gets the consumption of a folder with a virtuall tariffs. */
virtualTariffConsumptionGet(params: { "folderId": string; "startDate": string; "endDate": string }): Promise<any> {
return this._request("GET", "/api/VirtualTariffConsumption", { params });
}
/** Gets all Virtual Tariffs for a property (folder) */
virtualTariffsForPropertyGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/VirtualTariffsForProperty/{id}", { params });
}
/** Gets the calculation status for a virtual tariff property */
virtualTariffsStatusForPropertyGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/VirtualTariffsStatusForProperty/{id}", { params });
}
/** Assign a folder (source) or meter to another folder (target). Can be used to create a folder structure. */
folderAssignPost(params: { "source": string; "target": string }): Promise<any> {
return this._request("POST", "/api/folder/assign", { params });
}
/** Gets the settings of a folder or meter */
folderSettingsGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/folder/settings/{id}", { params });
}
/** Add or edit a folder or a meter. To add a new folder use and empty ID */
folderSettingsPost(body: unknown, params: { "id": string }): Promise<any> {
return this._request("POST", "/api/folder/settings/{id}", { body, params });
}
/** Deletes a folder */
folderSettingsDelete(params: { "id": string }): Promise<any> {
return this._request("DELETE", "/api/folder/settings/{id}", { params });
}
/** Assign a user to a folder */
userToFolderAssignPost(params: { "source": string; "target": string; "oldFolder": string }): Promise<any> {
return this._request("POST", "/api/folder/user/assign", { params });
}
/** Deletes a user to folder assignement */
userToFolderAssignDelete(params: { "source": string; "target": string }): Promise<any> {
return this._request("DELETE", "/api/folder/user/assign", { params });
}
oAuthAuthorize(params: { "client_id": string; "redirect_uri": string; "state": string; "scope"?: string; "client_secret"?: string }): Promise<any> {
return this._request("GET", "/api/oauth/authorize", { params });
}
postapiOauthAuthorize(params: { "client_id": string; "redirect_uri": string; "state": string; "scope"?: string; "client_secret"?: string }): Promise<any> {
return this._request("POST", "/api/oauth/authorize", { params });
}
/** Gets all pico charging stations for this user */
picoGet(): Promise<any> {
return this._request("GET", "/api/pico", {});
}
/** Gets the active charging data of a pico station */
picoChargingGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/pico/charging/{id}", { params });
}
/** Gets the last charging history for a pico station */
picoChargingHistoryGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/pico/history/{id}", { params });
}
/** GET: api/pico/loadmanagementgroup
Returns all available load management groups */
getapiPicoLoadmanagementgroup(): Promise<any> {
return this._request("GET", "/api/pico/loadmanagementgroup", {});
}
/** Sets the dynamic current of a load management group or a single station. */
picoLoadmanagementSetDynamicCurrentPost(params: { "serial": number; "current": number }): Promise<any> {
return this._request("POST", "/api/pico/loadmanagementgroup/current/{serial}", { params });
}
/** GET: api/pico/loadmanagementgroup
Returns a pico load management group by it's id */
picoLoadmanagementGroupGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/pico/loadmanagementgroup/{id}", { params });
}
/** GET: api/pico/settings
Returns the settings of a pico charging station. */
picoSettingsGet(params: { "id": string }): Promise<any> {
return this._request("GET", "/api/pico/settings/{id}", { params });
}
/** Try to fix lock the cable of a pico. The pico must be online and a cable (without car) needs to be connected. Otherwise this will fail. */
picoEnableFixCableLockPost(params: { "id": string }): Promise<any> {
return this._request("POST", "/api/pico/tryenablecablelock/{id}", { params });
}
}
export default smartme;
No reviews yet. Be the first to rate this API.
Yes. smart-me uses basic authentication, so you bring your own key from the provider. You store it once on OmniStream and the proxy injects it into every call, so your code only ever sends your Omni key.
With the smart-me REST API you get Access to all your devices in the smart-me Cloud and you can add your own devices. It exposes 64 endpoints over PUT, GET, POST, DELETE, including PUT /api/AccessToken, GET /api/Account/login, POST /api/Account/login.
Install the OmniStream SDK for your language and call smart-me through it. The client is generated from this API's OpenAPI spec, so parameters and responses are fully typed, and the same client also calls every other API in the marketplace.
You can start on the free plan. OmniStream charges for the unified SDK, key storage and proxy rather than for smart-me itself, and smart-me's own rate limits still apply to your provider key.
QuickChart: An API to generate charts and QR codes using QuickChart services.
Gets a Custom Device by it's ID
Gets a Device by it's Serial Number. The Serial is the part before the "-".
Gets all Devices
Creates or updates a Device or updates it's values.
Gets a Device by it's ID
Updates the On/Off Switch on a device. For new implementations please use the "actions" command
Gets all Devices for an Energy Type
Gets all Devices by it's Sub Type (e.g. E-Charging Station)
Force a device to send the data every second (if supported). This for about 30s. Don't use this call to force a device to send the data every second for a longer time.
Gets the Values for a folder or a meter
Gets the folder menu items (each item might contain child items)
Creates and updates the folder menu items
A method returning HTTP 200 OK when queried. It is used by Kubernetes probes to determine whether the app is healthy.
M-BUS API: Adds data of a M-BUS Meter to the smart-me Cloud. Just send us the M-BUS Telegram (RSP_UD) and we will do the Rest.
Sets the Name of a Meter or a Folder
Beta: Gets the General Information for a Meter or a Folder
Gets the Values for a Meter at a given Date. The first Value found before the given Date is returned.
Gets all registrations for the Realtime API.
Creates a new registration for the realtime API. The Realtime API sends you the data of the registred devices as soon as we have them on the cloud. More Information about the realtime API: https://www.smart-me.com/Description/api/realtimeapi.aspx
Deletes a realtime API registration.
Sets the configuration of a smart-me device. The device needs to be online.
Gets the configuration of a smart-me device.
Creates or updates a subuser. To create a new user set no ID (empty)
Get a sub user. The user must be assigend to the user that makes this call.
Delete a subuser
Gets the informations for the user.
Triggers user account deletion.
Gets all (last) values of a device
Gets all (last) values of a device The first Value found before the given Date is returned.
Gets multiple values of a device. This call needs a smart-me professional licence.
Beta: Gets all active virtual meters
Beta: Virtual Meter API: Activates a Meter and add the Consumption to a Virtual Meter assosiated with the User.
Beta: Virtual Meter API: Deactivates a Virtual Meter.
Beta: Gets all Meters available to activate as a Virtual Meter.
Calculates a virtual meter from a formula. A meter is coded as ID("METERID")
Gets all Virtual Tariffs of a user
Gets all virtual tariffs of a folder
Gets the consumption of a folder with a virtuall tariffs.
Gets all Virtual Tariffs for a property (folder)
Gets the calculation status for a virtual tariff property
Assign a folder (source) or meter to another folder (target). Can be used to create a folder structure.
Gets the settings of a folder or meter
Add or edit a folder or a meter. To add a new folder use and empty ID
Deletes a folder
Assign a user to a folder
Deletes a user to folder assignement
Gets all pico charging stations for this user
Gets the active charging data of a pico station
Gets the last charging history for a pico station
GET: api/pico/loadmanagementgroup Returns all available load management groups
Sets the dynamic current of a load management group or a single station.
GET: api/pico/loadmanagementgroup Returns a pico load management group by it's id
GET: api/pico/settings Returns the settings of a pico charging station.
Try to fix lock the cable of a pico. The pico must be online and a cable (without car) needs to be connected. Otherwise this will fail.