Intellimter Canada Inc. Official REST API (Beta)
Overview
Welcome to the Intellimeter Canada Inc. Official REST API!
This API allows you programmatic access to all your data, and billing information so you can seamlessly integrate our system into yours.
If you encounter any issues using our API, please see the Help and Support section.
Authentication
OAuth 2.0
This API uses the Open Authentication 2.0 protocol for authorization. To learn more about OAuth2.0, please see the Official OAuth 2.0 Website.
In order to acquire the Client ID and Client Secret codes, which are required to authenticate, please create a new application in the Application section of your Intellimter Cloud Portal.
Client Credentials
This flow of the API allows you to access your own data from our API. You will only be able to access scopes you have enabled your application access to, and you will only have access to admin scopes if the user you are authenticating is an admin.
Request
This can be achieved by sending a POST
request to http://134.122.43.196:5000/api/v1/auth
along with the following request JSON:
Name | Type | Description |
---|---|---|
grant_type |
string |
Must be client_credentials |
client_id |
string |
The Client ID given to you when you created your application |
client_secret |
string |
The Client Secret given to you when you created your application |
scope |
string |
A space separated list of scopes you wish to access. For a full list, please see the Scopes section |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/auth' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "client_id": "[client_id]", "client_secret": "[client_secret]", "grant_type": "client_credentials", "scope": "[requested_scope]" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/auth" payload = json.dumps({ "client_id": "[client_id]", "client_secret": "[client_secret]", "grant_type": "client_credentials", "scope": "[requested_scope]" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "client_id": "[client_id]", "client_secret": "[client_secret]", "grant_type": "client_credentials", "scope": "[requested_scope]" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/auth"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"client_id\": \"[client_id]\",\r\n \"client_secret\": \"[client_secret]\",\r\n \"grant_type\": \"client_credentials\",\r\n \"scope\": \"[requested_scope]\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/auth") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/auth"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"client_id\": \"[client_id]\",\r\n \"client_secret\": \"[client_secret]\",\r\n \"grant_type\": \"client_credentials\",\r\n \"scope\": \"[requested_scope]\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
access_token |
string |
The token to use in subsequent requests which require authorization |
expires_in |
time |
The time until the token expires in the format HH:MM:SS - This will almost always be 1:00:00 (1 hour) |
refresh_token |
string |
The token to use to refresh the access token when it expires. See the Refresh Token for more information |
scope |
string |
The scopes you have been authenticated to use. This may not match the scopes you have requested due to application configuration, and admin status of your account |
token_type |
string |
Will always be bearer |
{ "access_token": "[access_token]", "expires_in": "1:00:00", "refresh_token": "[refresh_token]", "scope": "[approved_scopes]", "token_type": "bearer" }
Refresh Token
When your access token expires (regardless of the flow used to acquire the token), this flow grants you a new token which you may continue using. Once your old token expires, it will become invalid and no longer useful, which is an additional security feature of the API.
Request
This can be achieved by sending a POST
request to http://134.122.43.196:5000/api/v1/auth
along with the following request JSON:
Name | Type | Description |
---|---|---|
grant_type |
string |
Must be refresh_token |
access_token |
string |
The access token you wish to refresh |
refresh_token |
string |
The refresh token which was issued to you when you when you were issued your access token |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/auth' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "access_token": "[access token]", "grant_type": "refresh_token", "refresh_token": "[refresh token]" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/auth" payload = json.dumps({ "access_token": "[access token]", "grant_type": "refresh_token", "refresh_token": "[refresh token]" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "access_token": "[access token]", "grant_type": "refresh_token", "refresh_token": "[refresh token]" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/auth"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"access_token\": \"[access token]\",\r\n \"grant_type\": \"refresh_token\",\r\n \"refresh_token\": \"[refresh token]\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/auth") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/auth"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"access_token\": \"[access token]\",\r\n \"grant_type\": \"refresh_token\",\r\n \"refresh_token\": \"[refresh token]\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
access_token |
string |
The new token to use in subsequent requests which require authorization |
expires_in |
time |
The time until the token expires in the format HH:MM:SS - This will almost always be 1:00:00 (1 hour) |
refresh_token |
string |
The token to use to refresh your new access token when it expires |
token_type |
string |
Will always be bearer |
{ "access_token": "[access_token]", "expires_in": "1:00:00", "refresh_token": "[refresh_token]", "token_type": "bearer" }
Authorization Code
This flow of the API allows you to access data from another user's account if they grant you access. This flow will only work on a website, or any application which runs in the web browser. You will only be able to access scopes you have enabled your application access to, and you will only have access to admin scopes if the user you are authenticating is an admin.
To begin, start by redirecting the user to the URL http://134.122.43.196:5000/api/v1/auth/authorization with the following query parameters
Name | Type | Description |
---|---|---|
client_id |
string |
The Client ID given to you when you created your application |
redirect_uri |
string |
The URL the user should be redirected to after they allow access to their account. This should be an endpoint on your web application. The user will be redirected with important information in the request parameters which will be needed to complete the request. Do not forget to URL Encode this first! |
response_type |
string |
Must be code |
The user will then be presented with a screen where they can view each of the requested scopes, and can accept or deny the request. If they have already accepted, they will immediately be redirected to the redirect_uri
URL.
The user will be redirected with the following query parameter.
Name | Type | Description |
---|---|---|
code |
string |
The authorization code which will be used to complete the request |
Request
From here, send a POST
request to http://134.122.43.196:5000/api/v1/auth
along with the following request JSON to complete the validation (the access code is useless without this step):
Name | Type | Description |
---|---|---|
grant_type |
string |
Must be authorization_code |
client_id |
string |
The Client ID given to you when you created your application |
client_secret |
string |
The Client Secret given to you when you created your application |
code |
string |
The code received in the previous step when the user was redirected back to your application |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/auth' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "client_id": "[client id]", "client_secret": "[client secret]", "code": "[code]", "grant_type": "authorization_code" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/auth" payload = json.dumps({ "client_id": "[client id]", "client_secret": "[client secret]", "code": "[code]", "grant_type": "authorization_code" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "client_id": "[client id]", "client_secret": "[client secret]", "code": "[code]", "grant_type": "authorization_code" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/auth"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"client_id\": \"[client id]\",\r\n \"client_secret\": \"[client secret]\",\r\n \"code\": \"[code]\",\r\n \"grant_type\": \"authorization_code\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/auth") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/auth"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"client_id\": \"[client id]\",\r\n \"client_secret\": \"[client secret]\",\r\n \"code\": \"[code]\",\r\n \"grant_type\": \"authorization_code\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
access_token |
string |
The token to use in subsequent requests which require authorization |
expires_in |
time |
The time until the token expires in the format HH:MM:SS - This will almost always be 1:00:00 (1 hour) |
refresh_token |
string |
The token to use to refresh the access token when it expires. See the Refresh Token for more information |
scope |
string |
The scopes you have been authenticated to use. This may not match the scopes you have requested due to application configuration, and admin status of your account |
token_type |
string |
Will always be bearer |
{ "access_token": "[access_token]", "expires_in": "1:00:00", "refresh_token": "[refresh_token]", "scope": "[approved_scopes]", "token_type": "bearer" }
Device Code
This flow of the API allows you to access data from another user's account if they grant you access. This flow will work applications not in a browser. This flow can even work on devices without a screen! You will only be able to access scopes you have enabled your application access to, and you will only have access to admin scopes if the user you are authenticating is an admin.
Request
To begin, send a POST
request to http://134.122.43.196:5000/api/v1/auth
along with the following request JSON:
Name | Type | Description |
---|---|---|
grant_type |
string |
Must be device_code |
client_id |
string |
The Client ID given to you when you created your application |
client_secret |
string |
The Client Secret given to you when you created your application |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/auth' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "client_id": "[client id]", "client_secret": "[client secret]", "grant_type": "device_code" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/auth" payload = json.dumps({ "client_id": "[client id]", "client_secret": "[client secret]", "grant_type": "device_code" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "client_id": "[client id]", "client_secret": "[client secret]", "grant_type": "device_code" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/auth"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"client_id\": \"[client id]\",\r\n \"client_secret\": \"[client secret]\",\r\n \"grant_type\": \"device_code\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/auth") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/auth"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"client_id\": \"[client id]\",\r\n \"client_secret\": \"[client secret]\",\r\n \"grant_type\": \"device_code\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
device_code |
string |
This is the code you will use to poll the API to check the status of the authorization process |
user_code |
string |
The code which the user should enter when they visit verification_uri |
verification_uri |
string |
The URL to instruct the user to visit |
interval |
time |
The interval at which you may poll this endpoint. This will be in the format HH:MM:SS - This will almost always be 0:00:05 (5 Seconds) |
expires_in |
time |
The amount of time until the code expires, at which point, you will need to start from the beginning. This will be in the format HH:MM:SS - This will almost always be 0:10:00 (10 Minutes) |
{ "device_code": "[device code]", "expires_in": "0:10:00", "interval": "0:00:05", "user_code": "[user code]", "verification_uri": "[verification uri]" }
If you can, and you wish to help the user out, you can always open a browser window (if, for example, you are on a mobile or desktop application) to the verification_uri
with a single query parameter of user_code
which has a value of the user code. It will save the user needing to enter the URL and code themselves which will make for a better overall experience.
Request
At this point, polling may begin! Simply send a POST
request to http://134.122.43.196:5000/api/v1/auth
along with the following request JSON at a rate no faster than interval
:
Name | Type | Description |
---|---|---|
grant_type |
string |
Must be device_code |
device_code |
string |
The device code issued to you in the previous step |
client_id |
string |
The Client ID given to you when you created your application |
client_secret |
string |
The Client Secret given to you when you created your application |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/auth' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "client_id": "[client id]", "client_secret": "[client secret]", "device_code": "[device_code]", "grant_type": "device_code" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/auth" payload = json.dumps({ "client_id": "[client id]", "client_secret": "[client secret]", "device_code": "[device_code]", "grant_type": "device_code" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "client_id": "[client id]", "client_secret": "[client secret]", "device_code": "[device_code]", "grant_type": "device_code" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/auth"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"client_id\": \"[client id]\",\r\n \"client_secret\": \"[client secret]\",\r\n \"device_code\": \"[device_code]\",\r\n \"grant_type\": \"device_code\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/auth") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/auth"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"client_id\": \"[client id]\",\r\n \"client_secret\": \"[client secret]\",\r\n \"device_code\": \"[device_code]\",\r\n \"grant_type\": \"device_code\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Responses
When polling this endpoint, there are 5 possible responses you could receive. Each are listed below with an explanation.
If the user has authorized the request, you will receive the following response
Name | Type | Description |
---|---|---|
access_token |
string |
The token to use in subsequent requests which require authorization |
expires_in |
time |
The time until the token expires in the format HH:MM:SS - This will almost always be 1:00:00 (1 hour) |
refresh_token |
string |
The token to use to refresh the access token when it expires. See the Refresh Token for more information |
scope |
string |
The scopes you have been authenticated to use. This may not match the scopes you have requested due to application configuration, and admin status of your account |
token_type |
string |
Will always be bearer |
{ "access_token": "[access_token]", "expires_in": "1:00:00", "refresh_token": "[refresh_token]", "scope": "[approved_scopes]", "token_type": "bearer" }
If the user has denied the request, you will receive the following response
{ "error": "access_denied", "error_description": "The client has rejected the request. Stop polling." }The response will also come with an HTTP status code of
400
- Bad Request
If the user has neither denied or accepted the request yet, you will receive the following response
{ "error": "authorization_pending", "error_description": "The client has neither accepted nor rejected the request. Keep polling." }The response will also come with an HTTP status code of
400
- Bad Request
If the token has expired, you will receive the following response
{ "error": "expired_token", "error_description": "The device code you have requested either does not exist, or is expired." }The response will also come with an HTTP status code of
400
- Bad Request
Finally, if you have surpassed the specified rate limit (sent requests more frequently than interval
), you will receive the following response
{ "error": "slow_down", "error_description": "DESC" }The response will also come with an HTTP status code of
400
- Bad Request
Scopes
When authenticating, you are required to provide the scopes you would like to access. Scopes should be formatted in a space separated string. The asterisks (*
) can be used as a wildcard to select many scopes with one query.
For example, to access the scope to read account information (uac:user:read
), and update account information (uac:user:update
), the following string could be used as the scope string:
"uac:user:read uac:user:update"
Alternatively, you could use the following string to authenticate all operations of the signed in user
"uac:user:*"
In lieu of that, you could use the following string to authenticate all operations of any user
"uac:*:*"
Finally, you could use the following string to authenticate all operations
"*:*:*"
Some of these scopes require admin privledges to access. In the event the user is not an admin, the admin scopes will simply be omitted from the list.
List of Scopes
The following is a list of all scopes, if they are for admin users only, and a brief description of what it does (the same description the user will see when choosing to authenticate in the Authorization or Device Code flows
Scope | Admin | Description |
---|---|---|
auth:app:create | No | Create API applications |
auth:app:delete | No | Delete API applications |
auth:app:read | No | View API applications |
auth:app:update | No | Update API applications |
billing:constant:read | No | View billing constants |
billing:constant:update | No | Update billing constants |
billing:fee:delete | No | Delete billing fees |
billing:fee:read | No | View billing fees |
billing:fee:update | No | Update billing fees |
billing:fee:write | No | Create a new billing fee |
billing:invoice:generate | No | Generate past invoices |
billing:invoice:read | No | View generated invoice history |
billing:invoice:update | No | Mark invoices as paid |
billing:invoice:view | No | Read generated invoice file |
billing:service:create | No | Create billing services |
billing:service:delete | No | Delete billing services |
billing:service:read | No | View billing services |
billing:service:update | No | Update billing services |
billing:suite:create | No | Create a new suite |
billing:suite:delete | No | Delete a suite |
billing:suite:read | No | View property suites |
billing:suite:update | No | Update a suite |
billing:template:update | No | Update your invoice template |
billing:tenant-suite:create | No | Create a tenant suite binding |
billing:tenant-suite:delete | No | Delete a tenant suite binding |
billing:tenant-suite:read | No | View tenant suite bindings |
billing:tenant:create | No | Create a new tenant |
billing:tenant:delete | No | Delete a tenant |
billing:tenant:read | No | View tenants |
billing:tenant:update | No | Update a tenant |
company:info:read | No | View company info |
company:info:update | Yes | Update company info |
company:permission:read | No | View company permissions |
file:ftps:disable | Yes | Disable FTPS file upload |
file:ftps:read | Yes | View FTPS file upload settings |
file:ftps:write | Yes | Update FTPS file upload settings |
file:http:disable | Yes | Disable HTTP file upload |
file:http:read | Yes | View HTTP file upload settings |
file:http:write | Yes | Update HTTP file upload settings |
meter:meters:read | No | View meter info |
meter:meters:update | Yes | Update meter information |
meter:reads:read | No | View meter reads |
property:info:read | No | View property info |
property:info:update | Yes | Update property information |
report:general:count | No | View the overall counts of the entire company |
report:reading:daily | No | View the Daily Grand Total Consumption report |
report:reading:interval | No | View reports of data at the specified interval |
report:reading:period | No | View the Period Consumption report |
report:reading:single | No | View the Single Grand Total Consumption report |
report:schedule:create | No | Create a new scheduled report |
report:schedule:delete | No | Delete a scheduled report |
report:schedule:generate | No | Run scheduled reports |
report:schedule:read | No | View list of scheduled reports |
report:schedule:update | No | Update a scheduled report |
uac:user:read | No | Read account information |
uac:user:update | No | Update account information |
uac:users:create | Yes | Create new users |
uac:users:delete | Yes | Delete any user |
uac:users:read | Yes | View all users |
uac:users:update | Yes | Update any user |
Endpoints
These are general purpose endpoints which allow you to manage data about your Intellimter account.Read
This endpoint allows you to retrieve your meter reads. It can be accessed at http://134.122.43.196:5000/api/v1/read
GET
(meter:reads:read
)
Retrieves your most recent reads
Request
Name | Type | Description |
---|---|---|
by |
string |
The entity to group your meter reads by. Can be suite , property , or meter |
limit_quantity |
int |
The filter for the start time of the data. This is used with the limit_unit property to create the filter. Default is 0 (AKA only include the most recent reads) |
limit_unit |
string |
The unit of measure to go back for filtering the data. Can be Second , Minute , Hour , Day , or Week . Default is Hour . |
property |
string |
An optional filter to only retrieve reads from this property |
Response
Note that not all of these parameters are included in each response type. See the response data for the data included in each request.Name | Type | Description |
---|---|---|
suite |
string |
The ID of the suite |
suite_name |
string |
The name of the suite |
time_stamping |
datetime |
The time and date when the read was taken in the format YYYY-MM-DDTHH:MM:SS |
address |
string |
The address where the property is located |
display_name |
string |
The display name of the property |
job_name |
string |
The Intellimeter Canada Inc. job name |
job_number |
string |
The Intellimeter Canada Inc. job number |
property |
string |
The ID of the property the read belongs to |
floor |
string |
The floor the meter is located on |
meter |
string |
The ID of the meter which captured the read |
name |
string |
The name of the meter which captured the read |
panel |
string |
The panel the meter is located |
serial_number |
string |
The serial number of the meter which captured the read |
units |
string |
The unit of measure associated with the meter. Can be kwh (electricity), or m3 (water/gas) |
utility |
string |
The utility which the meter measures. Can be E (electricity), W (water), or G (gas) |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/read?by=suite' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/read?by=suite" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/read?by=suite"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/read?by=suite") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/read?by=suite"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
{ "[property id]": [ { "kwh": 1258.265, "kwh_interval": 0.5, "suite": "8b70ac80", "suite_name": "Test Suite", "time_stamping": "2021-04-09T10:20:00" } ] }Property Request:
curl --location --request GET 'http://134.122.43.196:5000/api/v1/read?by=property' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/read?by=property" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/read?by=property"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/read?by=property") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/read?by=property"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
[ { "address": "123 Main St.", "display_name": "My Property", "job_name": "My Job", "job_number": "12-345-6789", "kwh": 3269.391, "kwh_interval": 0.02, "property": "8b70ac80", "time_stamping": "2021-04-09T07:20:00" } ]Meter Request:
curl --location --request GET 'http://134.122.43.196:5000/api/v1/read?by=meter' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/read?by=meter" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/read?by=meter"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/read?by=meter") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/read?by=meter"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
{ "[property id]": [ { "floor": null, "kwh": 24263.301, "kwh_interval": 0.005, "meter": "5754eba3", "name": "My Suite 1 Electricity", "panel": null, "serial_number": "12-345-6789-S5301-1-Meter-01", "suite": "2fbac398", "time_stamping": "2021-04-09T10:20:00", "units": "kWh", "utility": "E" } ] }
Meter
This endpoint allows the viewing and management of the meters installed on a property. It can be accessed at http://134.122.43.196:5000/api/v1/meter
GET
(meter:meters:read
)
Returns the list of meters available at the specified property
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to retrieve the data of |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/meter?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/meter?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/meter?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/meter?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/meter?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
floor |
string |
The floor the meter is located on |
id |
string |
The ID of the meter |
name |
string |
The name of the meter |
panel |
string |
The panel where the meter is located |
property |
string |
The ID of the property where the meter is located |
serial_number |
string |
The meter's serial number |
suite |
string |
The ID of the suite the meter is located in |
suite_name |
string |
The name of the suite the meter is located in |
units |
string |
The unit of measure associated with the meter. Can be kwh (electricity), or m3 (water/gas) |
utility |
string |
The utility which the meter measures. Can be E (electricity), W (water), or G (gas) |
[ { "floor": null, "id": "2fbac398", "name": "My Suite 1 Electricity", "panel": null, "property": "8b70ac80", "serial_number": "12-345-6789-S5301-1-Meter-01", "suite": "8b70ac80", "suite_name": "Test Suite", "units": "kwh", "utility": "E" } ]
PUT
(meter:meters:update
)
Updates information about your meters
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property of the meter to update |
id |
string |
The ID of the meter to update |
Name | Type | Description |
---|---|---|
panel |
string |
The panel where the meter is located |
suite |
string |
The ID of the suite the meter is located in |
floor |
string |
The floor the meter is located on |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/meter?id=2fbac398&property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "floor": "3", "panel": "5", "suite": "8b70ac80" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/meter?id=2fbac398&property=8b70ac80" payload = json.dumps({ "floor": "3", "panel": "5", "suite": "8b70ac80" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "floor": "3", "panel": "5", "suite": "8b70ac80" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/meter?id=2fbac398&property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"floor\": \"3\",\r\n \"panel\": \"5\",\r\n \"suite\": \"8b70ac80\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/meter?id=2fbac398&property=8b70ac80") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/meter?id=2fbac398&property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"floor\": \"3\",\r\n \"panel\": \"5\",\r\n \"suite\": \"8b70ac80\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
floor |
string |
The floor the meter is located on |
id |
string |
The ID of the meter |
name |
string |
The name of the meter |
panel |
string |
The panel where the meter is located |
property |
string |
The ID of the property where the meter is located |
serial_number |
string |
The meter's serial number |
suite |
string |
The ID of the suite the meter is located in |
suite_name |
string |
The name of the suite the meter is located in |
units |
string |
The unit of measure associated with the meter. Can be kwh (electricity), or m3 (water/gas) |
utility |
string |
The utility which the meter measures. Can be E (electricity), W (water), or G (gas) |
[ { "floor": null, "id": "2fbac398", "name": "My Suite 1 Electricity", "panel": null, "property": "8b70ac80", "serial_number": "12-345-6789-S5301-1-Meter-01", "suite": "8b70ac80", "suite_name": "Test Suite", "units": "kwh", "utility": "E" } ]
Property
This endpoint allows the viewing and management of your properties. It can be accessed at http://134.122.43.196:5000/api/v1/property
GET
(property:info:read
)
Returns information about a single property, or all properties
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property of the meter to retrieve. Default is to return all properties |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/property' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/property" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/property"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/property") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/property"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
address |
string |
The address of the property |
company |
string |
The ID of the company the property belongs to |
created |
datetime |
The date and time the property was created |
display_name |
string |
The display name of the property |
id |
string |
The ID of the property |
job_name |
string |
The job name of the property |
job_number |
string |
The job number of the property |
updated |
datetime |
The date and time the property was last updated |
[ { "address": "123 Main St.", "company": "8b70ac80", "created": "2021-03-29T17:15:15", "display_name": "My Property", "id": "8b70ac80", "job_name": "Example Job", "job_number": "12-345-6789", "updated": "2021-04-09T10:44:43" } ]
PUT
(property:info:update
)
Updates information about a single property
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property of the meter to update. |
Name | Type | Description |
---|---|---|
job_name |
string |
The name of the Intellimeter Inc. job |
address |
string |
The address the property is located |
display_name |
string |
The display name of the property |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/property?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "address": "New Address", "display_name": "New Display Name", "job_name": "New Name" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/property?property=8b70ac80" payload = json.dumps({ "address": "New Address", "display_name": "New Display Name", "job_name": "New Name" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "address": "New Address", "display_name": "New Display Name", "job_name": "New Name" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/property?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"address\": \"New Address\",\r\n \"display_name\": \"New Display Name\",\r\n \"job_name\": \"New Name\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/property?property=8b70ac80") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/property?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"address\": \"New Address\",\r\n \"display_name\": \"New Display Name\",\r\n \"job_name\": \"New Name\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
address |
string |
The address of the property |
company |
string |
The ID of the company the property belongs to |
created |
datetime |
The date and time the property was created |
display_name |
string |
The display name of the property |
id |
string |
The ID of the property |
job_name |
string |
The job name of the property |
job_number |
string |
The job number of the property |
updated |
datetime |
The date and time the property was last updated |
{ "address": "123 Main St.", "company": "8b70ac80", "created": "2021-03-29T17:15:15", "display_name": "My Property", "id": "8b70ac80", "job_name": "Example Job", "job_number": "12-345-6789", "updated": "2021-04-09T10:44:43" }
Company
This endpoint allows you to view and update information about the company. It can be accessed at http://134.122.43.196:5000/api/v1/company
GET
(company:info:read
)
Returns information about your company
Request
curl --location --request GET 'http://134.122.43.196:5000/api/v1/company' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/company" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/company"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/company") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/company"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
created |
datetime |
The date and time the company was created |
id |
datetime |
The ID of the company |
name |
string |
The name of the company |
updated |
datetime |
The date and time the company was updated |
{ "created": "2021-03-29T17:13:19", "id": "8b70ac80", "name": "Company Name", "updated": "2021-04-14T11:19:42" }
PUT
(company:info:update
)
Returns information about your company
Request
Name | Type | Description |
---|---|---|
name |
string |
The new name of the company |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/company' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "New Name" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/company" payload = json.dumps({ "name": "New Name" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "New Name" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/company"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"New Name\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/company") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/company"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"New Name\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
OAuth2.0 Application
This endpoint allows you to manage your OAuth2.0 applications. It can be accessed at http://134.122.43.196:5000/api/v1/application
GET
(auth:app:read
)
Returns information about a single application, or all applications
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the application to retrieve. Default is to return all of your applications |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/application?id=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/application?id=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/application?id=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/application?id=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/application?id=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
client_id |
string |
The Client ID you use to authenticate requests. (Client Secret is never returned) |
created |
datetime |
The date and time the application was created |
id |
string |
The ID of the application |
name |
string |
The name of the application |
updated |
datetime |
The date and time the application was last updated |
user |
string |
Your account ID |
[ { "client_id": "id", "created": "2021-04-08T12:00:17", "id": "8b70ac80", "name": "My Application", "updated": "2021-04-08T12:00:17", "user": "8b70ac80" } ]
POST
(auth:app:create
)
Creates a new application
Request
Name | Type | Description |
---|---|---|
name |
string |
The name of the new application |
scopes |
string |
A space separated list of scopes you would like to access |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/application' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "My New App", "scopes": "uac:user:* uac:users:*" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/application" payload = json.dumps({ "name": "My New App", "scopes": "uac:user:* uac:users:*" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "My New App", "scopes": "uac:user:* uac:users:*" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/application"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"My New App\",\r\n \"scopes\": \"uac:user:* uac:users:*\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/application") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/application"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"My New App\",\r\n \"scopes\": \"uac:user:* uac:users:*\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
client_id |
string |
The Client ID you use to authenticate requests |
client_secret |
string |
The Client Secret you use to authenticate requests. Note that this is the only time you will be shown the Client Secret |
created |
datetime |
The date and time the application was created |
id |
string |
The ID of the application |
name |
string |
The name of the application |
updated |
datetime |
The date and time the application was last updated |
user |
string |
Your account ID |
{ "client_id": "[client id]", "client_secret": "[client secret]", "created": "2021-04-14T11:39:38", "id": "1088852e", "name": "My New App", "scopes": "uac:user:read uac:user:update uac:users:create uac:users:delete uac:users:read uac:users:update", "updated": "2021-04-14T11:39:38", "user": "8b70ac80" }
PUT
(auth:app:update
)
Updates an existing application
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the application to update |
Name | Type | Description |
---|---|---|
name |
string |
The name of the new application |
scopes |
string |
A space separated list of scopes you would like to access |
client_secret |
boolean |
If set to true , the Client Secret will be regenerated and returned. This will cause the old Client Secret to no longer be valid. Default is false |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/application?id=1088852e' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "My New App", "scopes": "uac:user:* uac:users:*" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/application?id=1088852e" payload = json.dumps({ "name": "My New App", "scopes": "uac:user:* uac:users:*" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "My New App", "scopes": "uac:user:* uac:users:*" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/application?id=1088852e"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"My New App\",\r\n \"scopes\": \"uac:user:* uac:users:*\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/application?id=1088852e") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/application?id=1088852e"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"My New App\",\r\n \"scopes\": \"uac:user:* uac:users:*\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
client_id |
string |
The Client ID you use to authenticate requests |
client_secret |
string |
The Client Secret you use to authenticate requests. Note that this is the only time you will be shown the Client Secret |
created |
datetime |
The date and time the application was created |
id |
string |
The ID of the application |
name |
string |
The name of the application |
updated |
datetime |
The date and time the application was last updated |
user |
string |
Your account ID |
{ "client_id": "[client id]", "client_secret": "[client secret]", "created": "2021-04-14T11:39:38", "id": "1088852e", "name": "My New App", "scopes": "uac:user:read uac:user:update uac:users:create uac:users:delete uac:users:read uac:users:update", "updated": "2021-04-14T11:39:38", "user": "8b70ac80" }
DELETE
(auth:app:delete
)
Deletes an existing application
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the application to update |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/application?id=1088852e' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/application?id=1088852e" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/application?id=1088852e"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/application?id=1088852e") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/application?id=1088852e"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
My Account Management
This endpoint allows you to view and update information about your account. It can be accessed at http://134.122.43.196:5000/api/v1/user
GET
(uac:user:read
)
Returns account information of the authenticated user
Request
curl --location --request GET 'http://134.122.43.196:5000/api/v1/user' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/user" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/user"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/user") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/user"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
company |
string |
The ID of the company the user is tied to |
created |
datetime |
The date and time the user was created |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
id |
string |
The user's ID |
last_name |
string |
The last name of the user |
{ "active": true, "admin": true, "company": "8b70ac80", "created": "2021-04-08T11:22:07", "email": "test", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "updated": "2021-04-08T15:56:43" }
PUT
(uac:user:update
)
Updates the authenticated user's account information
Request
Name | Type | Description |
---|---|---|
first_name |
string |
The new first name of the user |
last_name |
string |
The new last name of the user |
email |
string |
The email address of the user |
password |
string |
The new password of the user. If omitted, the password will not be updated |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/user' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/user" payload = json.dumps({ "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/user"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"email\": \"JaneDoe@example.com\",\r\n \"first_name\": \"Jane\",\r\n \"last_name\": \"Doe\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/user") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/user"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"email\": \"JaneDoe@example.com\",\r\n \"first_name\": \"Jane\",\r\n \"last_name\": \"Doe\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
company |
string |
The ID of the company the user is tied to |
created |
datetime |
The date and time the user was created |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
id |
string |
The user's ID |
last_name |
string |
The last name of the user |
{ "active": true, "admin": true, "company": "8b70ac80", "created": "2021-04-08T11:22:07", "email": "JohnSmith@example.com", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "updated": "2021-04-08T15:56:43" }
All Account Management
This endpoint allows you to manage users connected to your company. It can be accessed at http://134.122.43.196:5000/api/v1/users
GET
(uac:users:read
)
Returns account information of the requested user or all users
Request
Name | Type | Description |
---|---|---|
user |
string |
The ID of the user to retrieve. Default is to return all users |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/users?user=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/users?user=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/users?user=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/users?user=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/users?user=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
company |
string |
The ID of the company the user is tied to |
created |
datetime |
The date and time the user was created |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
id |
string |
The user's ID |
last_name |
string |
The last name of the user |
[ { "active": true, "admin": true, "company": "8b70ac80", "created": "2021-04-08T11:22:07", "email": "JohnSmith@example.com", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "updated": "2021-04-08T15:56:43" } ]
POST
(uac:users:create
)
Creates a new user account
Request
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account. Default is true |
admin |
boolean |
If the user has admin rights. Default is false |
password |
string |
The password for the newly created account |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
last_name |
string |
The last name of the user |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/users' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "active": true, "admin": false, "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe", "password": "1234" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/users" payload = json.dumps({ "active": True, "admin": False, "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe", "password": "1234" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "active": true, "admin": false, "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe", "password": "1234" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/users"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"active\": true,\r\n \"admin\": false,\r\n \"email\": \"JaneDoe@example.com\",\r\n \"first_name\": \"Jane\",\r\n \"last_name\": \"Doe\",\r\n \"password\": \"1234\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/users") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/users"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"active\": true,\r\n \"admin\": false,\r\n \"email\": \"JaneDoe@example.com\",\r\n \"first_name\": \"Jane\",\r\n \"last_name\": \"Doe\",\r\n \"password\": \"1234\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
company |
string |
The ID of the company the user is tied to |
created |
datetime |
The date and time the user was created |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
id |
string |
The user's ID |
last_name |
string |
The last name of the user |
{ "active": true, "admin": false, "company": "8b70ac80", "created": "2021-04-08T11:22:07", "email": "JaneDoe@example.com", "first_name": "Jane", "id": "8b70ac80", "last_name": "Doe", "updated": "2021-04-08T15:56:43" }
PUT
(uac:users:update
)
Updates the account information of the requested user
Request
Name | Type | Description |
---|---|---|
user |
string |
The ID of the user to update |
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
last_name |
string |
The last name of the user |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/users?user=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "active": true, "admin": false, "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/users?user=8b70ac80" payload = json.dumps({ "active": True, "admin": False, "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "active": true, "admin": false, "email": "JaneDoe@example.com", "first_name": "Jane", "last_name": "Doe" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/users?user=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"active\": true,\r\n \"admin\": false,\r\n \"email\": \"JaneDoe@example.com\",\r\n \"first_name\": \"Jane\",\r\n \"last_name\": \"Doe\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/users?user=8b70ac80") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/users?user=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"active\": true,\r\n \"admin\": false,\r\n \"email\": \"JaneDoe@example.com\",\r\n \"first_name\": \"Jane\",\r\n \"last_name\": \"Doe\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
company |
string |
The ID of the company the user is tied to |
created |
datetime |
The date and time the user was created |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
id |
string |
The user's ID |
last_name |
string |
The last name of the user |
{ "active": true, "admin": false, "company": "8b70ac80", "created": "2021-04-08T11:22:07", "email": "JaneDoe@example.com", "first_name": "Jane", "id": "8b70ac80", "last_name": "Doe", "updated": "2021-04-08T15:56:43" }
DELETE
(uac:users:delete
)
Deletes the selected user. We recommend setting the active
attribute of a user to false
instead of deleting.
Request
Name | Type | Description |
---|---|---|
user |
string |
The ID of the user to update |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/users?user=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/users?user=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/users?user=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/users?user=8b70ac80") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/users?user=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the user may log into their account |
admin |
boolean |
If the user has admin rights |
company |
string |
The ID of the company the user is tied to |
created |
datetime |
The date and time the user was created |
email |
string |
The user's email address |
first_name |
string |
The first name of the user |
id |
string |
The user's ID |
last_name |
string |
The last name of the user |
{ "active": true, "admin": false, "company": "8b70ac80", "created": "2021-04-08T11:22:07", "email": "JaneDoe@example.com", "first_name": "Jane", "id": "8b70ac80", "last_name": "Doe", "updated": "2021-04-08T15:56:43" }
File Upload (HTTP/HTTPS)
This endpoint retrieves information on the instructions to send your reads to a remote HTTP server after each read is taken. For more information on file formats, please see the File Sender Formats section. It can be accessed at http://134.122.43.196:5000/api/v1/file-upload/http
GET
(file:http:read
)
Returns the current HTTP file upload settings
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to retrieve the data of. Leave blank to get data on all properties you have access to |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property the settings apply to |
url |
string |
The URL to send the HTTP request to |
body |
json |
Additional JSON which should be included as the request body, or null to omit |
header |
json |
Additional JSON which should be included as the request headers, or null to omit |
method |
string |
The HTTP method to use when sending the request. Supported methods are GET , POST , PUT , PATCH , DELETE , HEAD , and OPTIONS |
expected_code |
int |
The returned HTTP status code expected to indicate a success |
file_type |
string |
The data format to send the data as. Supported formats are CSV , JSON , and XML |
created |
datetime |
The datetime HTTP file sending was enabled |
updated |
datetime |
The datetime HTTP file sending options were updated |
[ { "body": {}, "created": "2021-04-14T09:22:56", "expected_code": 200, "file_type": "CSV", "header": {}, "method": "POST", "property": "8b70ac80", "updated": "2021-04-14T09:22:56", "url": "test" } ]
PUT
(file:http:write
)
Updates (or enables if previously disabled) the HTTP file upload settings
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to update |
Name | Type | Description |
---|---|---|
url |
string |
The URL to send the HTTP request to |
body |
json |
Additional JSON which should be included as the request body, or null to omit. Default is null . |
header |
json |
Additional JSON which should be included as the request headers, or null to omit. Default is null . |
method |
string |
The HTTP method to use when sending the request. Supported methods are GET , POST , PUT , PATCH , DELETE , HEAD , and OPTIONS . Default is POST |
expected_code |
int |
The returned HTTP status code expected to indicate a success. Default is 200 |
file_type |
string |
The data format to send the data as. Supported formats are CSV , JSON , and XML |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "file_type": "CSV", "url": "test" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80" payload = json.dumps({ "file_type": "CSV", "url": "test" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "file_type": "CSV", "url": "test" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"file_type\": \"CSV\",\r\n \"url\": \"test\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"file_type\": \"CSV\",\r\n \"url\": \"test\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
DELETE
(file:http:disable
)
Disables the HTTP file uploader. Note that previous settings WILL be lost.
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to disable HTTP file send |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/file-upload/http?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
File Upload (FTPS)
This endpoint retrieves information on the instructions to send your reads to a remote FTPS server after each read is taken (Note that FTP servers are not supported with these settings). For more information on file formats, please see the File Sender Formats section. It can be accessed at http://134.122.43.196:5000/api/v1/file-upload/ftps
GET
(file:ftps:read
)
Returns the current HTTP file upload settings
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to retrieve the data of. Leave blank to get data on all properties you have access to |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/file-upload/ftp?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/file-upload/ftp?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/file-upload/ftp?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/file-upload/ftp?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/file-upload/ftp?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property the settings apply to |
user |
string |
The username to use when authenticating with the server |
host |
string |
The hostname of the FTPS server |
path |
string |
The path to upload the file on the FTPS server, or null to use the root directory. |
port |
int |
The port of the FTPS server. Default is 22. |
file_type |
string |
The data format to send the data as. Supported formats are CSV , JSON , and XML |
created |
datetime |
The datetime HTTP file sending was enabled |
updated |
datetime |
The datetime HTTP file sending options were updated |
[ { "created": "2021-04-14T09:46:32", "file_type": "CSV", "host": "ftps.example.com", "path": null, "port": 22, "property": "8b70ac80", "updated": "2021-04-14T09:46:32", "user": "username" } ]
PUT
(file:ftps:write
)
Updates (or enables if previously disabled) the FTPS file upload settings
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to update |
Name | Type | Description |
---|---|---|
host |
string |
The hostname of the FTPS server |
user |
string |
The username to use when authenticating with the server |
password |
string |
The password to use when authenticating with the server |
port |
int |
The port of the FTPS server. Default is 22. |
path |
string |
The path to upload the file on the FTPS server, or null to use the root directory. |
file_type |
string |
The data format to send the data as. Supported formats are CSV , JSON , and XML |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "file_type": "CSV", "host": "everywhere", "password": "1234", "user": "me" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80" payload = json.dumps({ "file_type": "CSV", "host": "everywhere", "password": "1234", "user": "me" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "file_type": "CSV", "host": "everywhere", "password": "1234", "user": "me" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"file_type\": \"CSV\",\r\n \"host\": \"everywhere\",\r\n \"password\": \"1234\",\r\n \"user\": \"me\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"file_type\": \"CSV\",\r\n \"host\": \"everywhere\",\r\n \"password\": \"1234\",\r\n \"user\": \"me\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
DELETE
(file:ftps:disable
)
Disables the FTPS file uploader. Note that previous settings WILL be lost.
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to disable FTPS file send |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/file-upload/ftps?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
Billing
These are endpoints allow the management and control of data related to invoicesConstants
This endpoint allows you to view and update constants used in bill generation. It can be accessed at http://134.122.43.196:5000/api/v1/billing/constants
GET
(billing:constant:read
)
Returns the constants used in generating invoices
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property of the constants to retrieve. Default is to return all properties |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/constants' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/constants" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/constants"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/constants") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/constants"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
days_to_pay |
int |
The number of days the tenant has to pay their bill before it becomes 'Overdue' |
invoice_from |
string |
The name to include in the signature line of the invoice email |
price_per_electricity |
float |
The unit rate of electricity in cents |
price_per_gas |
float |
The unit rate of gas in cents |
price_per_water |
float |
The unit rate of water in cents |
property |
string |
The ID of the property this set of constants is tied to |
tax_rate |
float |
The tax rate (as a percent - ex. 13 = 13%) |
updated |
datetime |
The date and time these constants were last updated |
[ { "days_to_pay": 30, "invoice_from": "Intellimeter Canada Inc.", "price_per_electricity": 13.0, "price_per_gas": 13.0, "price_per_water": 13.0, "property": "8b70ac80", "tax_rate": 13.0, "updated": "2021-04-12T11:03:15" } ]
PUT
(billing:constant:update
)
Updates the billing constants tied to a property
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property of the constants to update |
Name | Type | Description |
---|---|---|
days_to_pay |
int |
The number of days the tenant has to pay their bill before it becomes 'Overdue' |
invoice_from |
string |
The name to include in the signature line of the invoice email |
price_per_electricity |
float |
The unit rate of electricity in cents |
price_per_gas |
float |
The unit rate of gas in cents |
price_per_water |
float |
The unit rate of water in cents |
property |
string |
The ID of the property this set of constants is tied to |
tax_rate |
float |
The tax rate (as a percent - ex. 13 = 13%) |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/constants' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "days_to_pay": 30, "invoice_from": "Intellimeter Canada Inc.", "price_per_electricity": 13.0, "price_per_gas": 13.0, "price_per_water": 13.0, "property": "8b70ac80", "tax_rate": 13.0 }'
import requests import json url = "http://134.122.43.196:5000/api/v1/constants" payload = json.dumps({ "days_to_pay": 30, "invoice_from": "Intellimeter Canada Inc.", "price_per_electricity": 13.0, "price_per_gas": 13.0, "price_per_water": 13.0, "property": "8b70ac80", "tax_rate": 13.0 })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "days_to_pay": 30, "invoice_from": "Intellimeter Canada Inc.", "price_per_electricity": 13.0, "price_per_gas": 13.0, "price_per_water": 13.0, "property": "8b70ac80", "tax_rate": 13.0 });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/constants"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"days_to_pay\": 30,\r\n \"invoice_from\": \"Intellimeter Canada Inc.\",\r\n \"price_per_electricity\": 13.0,\r\n \"price_per_gas\": 13.0,\r\n \"price_per_water\": 13.0,\r\n \"property\": \"8b70ac80\",\r\n \"tax_rate\": 13.0\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/constants") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/constants"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"days_to_pay\": 30,\r\n \"invoice_from\": \"Intellimeter Canada Inc.\",\r\n \"price_per_electricity\": 13.0,\r\n \"price_per_gas\": 13.0,\r\n \"price_per_water\": 13.0,\r\n \"property\": \"8b70ac80\",\r\n \"tax_rate\": 13.0\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
days_to_pay |
int |
The number of days the tenant has to pay their bill before it becomes 'Overdue' |
invoice_from |
string |
The name to include in the signature line of the invoice email |
price_per_electricity |
float |
The unit rate of electricity in cents |
price_per_gas |
float |
The unit rate of gas in cents |
price_per_water |
float |
The unit rate of water in cents |
property |
string |
The ID of the property this set of constants is tied to |
tax_rate |
float |
The tax rate (as a percent - ex. 13 = 13%) |
updated |
datetime |
The date and time these constants were last updated |
{ "days_to_pay": 30, "invoice_from": "Intellimeter Canada Inc.", "price_per_electricity": 13.0, "price_per_gas": 13.0, "price_per_water": 13.0, "property": "8b70ac80", "tax_rate": 13.0, "updated": "2021-04-12T11:03:15" }
Fee
This endpoint allows you to view and update additional flat fees to add to invoices. It can be accessed at http://134.122.43.196:5000/api/v1/billing/fee
GET
(billing:fee:read
)
Returns the additional flat-fees included in generated invoices
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the fee to get. This is optional. |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/fee?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/fee?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/fee?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/fee?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/fee?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the fee should be included in future bills |
id |
string |
The ID of the fee |
name |
string |
The name of the fee (displayed on the invoice) |
property |
string |
The property ID the fee belongs to |
value |
float |
The value of the fee in dollars |
[ { "active": true, "id": "7009803c", "name": "My New Fee", "property": "8b70ac80", "value": 10.25 } ]
POST
(billing:fee:write
)
Creates a new flat-fee to be included in generated invoices
Request
Name | Type | Description |
---|---|---|
name |
string |
The name of the fee (displayed on the invoice) |
value |
float |
The value of the fee in dollars |
active |
boolean |
If the fee should be active. Default is true . |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/fee' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "active": true, "name": "My New Fee", "value": 10.25 }'
import requests import json url = "http://134.122.43.196:5000/api/v1/fee" payload = json.dumps({ "active": True, "name": "My New Fee", "value": 10.25 })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "active": true, "name": "My New Fee", "value": 10.25 });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/fee"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"active\": true,\r\n \"name\": \"My New Fee\",\r\n \"value\": 10.25\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/fee") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/fee"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"active\": true,\r\n \"name\": \"My New Fee\",\r\n \"value\": 10.25\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the fee should be included in future bills |
id |
string |
The ID of the fee |
name |
string |
The name of the fee (displayed on the invoice) |
property |
string |
The property ID the fee belongs to |
value |
float |
The value of the fee in dollars |
{ "active": true, "id": "7009803c", "name": "My New Fee", "property": "8b70ac80", "value": 10.25 }
POST
(billing:fee:write
)
Replaces all of your fees with the ones in the JSON payload. If a fee is not included in the payload, it will be deleted. Note that this will cause each fee to be assigned a new ID.
Request
Name | Type | Description |
---|---|---|
name |
string |
The name of the fee (displayed on the invoice) |
value |
float |
The value of the fee in dollars |
active |
boolean |
If the fee should be active. Default is true . |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/feeFlush?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '[ { "active": true, "name": "My New Fee", "value": 10.25 }, { "active": true, "name": "My New Fee 2", "value": 12.25 } ]'
import requests import json url = "http://134.122.43.196:5000/api/v1/feeFlush?property=8b70ac80" payload = json.dumps([ { "active": True, "name": "My New Fee", "value": 10.25 }, { "active": True, "name": "My New Fee 2", "value": 12.25 } ])
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify([ { "active": true, "name": "My New Fee", "value": 10.25 }, { "active": true, "name": "My New Fee 2", "value": 12.25 } ]);
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/feeFlush?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "[\r\n {\r\n \"active\": true,\r\n \"name\": \"My New Fee\",\r\n \"value\": 10.25\r\n },\r\n {\r\n \"active\": true,\r\n \"name\": \"My New Fee 2\",\r\n \"value\": 12.25\r\n }\r\n]");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/feeFlush?property=8b70ac80") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/feeFlush?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "[\r\n {\r\n \"active\": true,\r\n \"name\": \"My New Fee\",\r\n \"value\": 10.25\r\n },\r\n {\r\n \"active\": true,\r\n \"name\": \"My New Fee 2\",\r\n \"value\": 12.25\r\n }\r\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the fee should be included in future bills |
id |
string |
The ID of the fee |
name |
string |
The name of the fee (displayed on the invoice) |
property |
string |
The property ID the fee belongs to |
value |
float |
The value of the fee in dollars |
[ { "active": true, "id": "7009803c", "name": "My New Fee", "property": "8b70ac80", "value": 10.25 }, { "active": true, "id": "8f621a3", "name": "My New Fee 2", "property": "8b70ac80", "value": 12.25 } ]
PUT
(billing:fee:update
)
Updates the selected fee
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the fee to update. |
Name | Type | Description |
---|---|---|
name |
string |
The name of the fee (displayed on the invoice) |
value |
float |
The value of the fee in dollars |
active |
boolean |
If the fee should be active. Default is true . |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=7009803c' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "active": true, "name": "My New Fee", "value": 10.25 }'
import requests import json url = "http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=7009803c" payload = json.dumps({ "active": True, "name": "My New Fee", "value": 10.25 })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "active": true, "name": "My New Fee", "value": 10.25 });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=7009803c"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"active\": true,\r\n \"name\": \"My New Fee\",\r\n \"value\": 10.25\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=7009803c") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=7009803c"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"active\": true,\r\n \"name\": \"My New Fee\",\r\n \"value\": 10.25\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the fee should be included in future bills |
id |
string |
The ID of the fee |
name |
string |
The name of the fee (displayed on the invoice) |
property |
string |
The property ID the fee belongs to |
value |
float |
The value of the fee in dollars |
{ "active": true, "id": "7009803c", "name": "My New Fee", "property": "8b70ac80", "value": 10.25 }
DELETE
(billing:fee:delete
)
Deletes the additional flat-fee
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the fee to delete |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=32670e03' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=32670e03" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=32670e03"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=32670e03") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/fee?property=8b70ac80&id=32670e03"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the fee should be included in future bills |
id |
string |
The ID of the fee |
name |
string |
The name of the fee (displayed on the invoice) |
property |
string |
The property ID the fee belongs to |
value |
float |
The value of the fee in dollars |
{ "active": true, "id": "7009803c", "name": "My New Fee", "property": "8b70ac80", "value": 10.25 }
Invoice
This endpoint allows you to view past invoices. It can be accessed at http://134.122.43.196:5000/api/v1/billing/invoice
GET
(billing:invoice:read
)
Returns the full history of generated invoices. For custom invoice templates, please contact support.
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the invoice to get. This is optional. |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
created |
datetime |
The date and time the invoice was generated |
due |
date |
The date the invoice can be considered 'due' |
email_sent |
datetime |
The date and time the invoice was successfully sent to the tenant via email. If this value is null for more than a day, please report this to support as there was an error sending the invoice. |
filename |
string |
The name of the created invoice file. Invoices are in the .odt file format |
id |
string |
The ID of the invoice |
paid |
datetime |
The date and time the tenant paid for the invoice, or null if it is unpaid |
property |
string |
The ID of the property where the billed suite is located |
service |
string |
The ID of the service which generated that invoice |
suite |
string |
The ID of the suite which is responsible for paying for the invoice |
total |
float |
The total of the invoice in dollars |
[ { "created": "2021-04-12T12:08:04", "due": "2021-05-12", "email_sent": "2021-04-12T12:08:05", "filename": "my_invoice_1.odt", "id": "8b70ac80", "paid": null, "property": "8b70ac80", "service": "8b70ac80", "suite": "8b70ac80", "total": 500.25 } ]
PUT
(billing:invoice:update
)
Marks the selected invoice as 'paid'. Note that this action can not be undone!
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID of the invoice to mark |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80") .method("PUT", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/invoice?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
created |
datetime |
The date and time the invoice was generated |
due |
date |
The date the invoice can be considered 'due' |
email_sent |
datetime |
The date and time the invoice was successfully sent to the tenant via email |
filename |
string |
The name of the created invoice file. Invoices are in the .odt file format |
id |
string |
The ID of the invoice |
paid |
datetime |
The date and time the tenant paid for the invoice, or null if it is unpaid |
property |
string |
The ID of the property where the billed suite is located |
service |
string |
The ID of the service which generated that invoice |
suite |
string |
The ID of the suite which is responsible for paying for the invoice |
total |
float |
The total of the invoice in dollars |
{ "created": "2021-04-12T12:08:04", "due": "2021-05-12", "email_sent": "2021-04-12T12:08:05", "filename": "my_invoice_1.odt", "id": "8b70ac80", "paid": "2021-04-12T12:14:08", "property": "8b70ac80", "service": "8b70ac80", "suite": "8b70ac80", "total": 500.25 }
Invoice File
This endpoint allows you to view past invoice files. It can be accessed at http://134.122.43.196:5000/api/v1/billing/invoice/[name]
Where [name]
is the name of the invoice file you wish to pull.
GET
(billing:invoice:view
)
Returns information about a single property, or all properties
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property of the meter to retrieve. Default is to return all properties |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/invoiceFile' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/invoiceFile" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/invoiceFile"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/invoiceFile") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/invoiceFile"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Returns the invoice with the name[name]
with the mimetype application/vnd.oasis.opendocument.text
(.odt)
Service
This endpoint allows you to manage and view services which generate invoices. It can be accessed at http://134.122.43.196:5000/api/v1/billing/service
GET
(billing:service:read
)
Returns a list of all created services on this property. See the Invoice Types section for a list of invoice types we provide.
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the service to get. This is optional. |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/service?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/service?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/service?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/service?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/service?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the service is allowed to generate invoices |
address |
string |
The address to issue the invoice to |
day_of_month |
int |
The day of the month to generate and send the invoices on. For example, a value of 1 will generate the invoices on January 1st, February 1st, etc... |
id |
string |
The ID of the service |
invoice_type |
string |
The type of invoice to generate. This can be one of the following values: Split From General , General Consumption Price , or Customized Price . For more information on each type, please see the Invoice Types section |
name |
string |
The name of the service |
property |
string |
The ID of the property to generate invoices for |
suite |
string |
The ID of the suite this service applies to |
[ { "active": true, "address": "123 Main St.", "day_of_month": 3, "id": "8b70ac80", "invoice_type": "Split From General", "name": "My Service", "property": "8b70ac80", "suite": "8b70ac80" } ]
POST
(billing:service:create
)
Creates a new service
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
Name | Type | Description |
---|---|---|
suite |
string |
The ID of the suite this service applies to |
name |
string |
The name of the service |
address |
string |
The address to issue the invoice to |
invoice_type |
string |
The type of invoice to generate. This can be one of the following values: Split From General , General Consumption Price , or Customized Price . For more information on each type, please see the Invoice Types section |
day_of_month |
int |
The day of the month to generate and send the invoices on. For example, a value of 1 will generate the invoices on January 1st, February 1st, etc... |
active |
boolean |
If the service is allowed to generate invoices. Default is true |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/service?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "address": "2134 Here St.", "day_of_month": 5, "invoice_type": "Split From General", "name": "My Service", "suite": "8b70ac80" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/service?property=8b70ac80" payload = json.dumps({ "address": "2134 Here St.", "day_of_month": 5, "invoice_type": "Split From General", "name": "My Service", "suite": "8b70ac80" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "address": "2134 Here St.", "day_of_month": 5, "invoice_type": "Split From General", "name": "My Service", "suite": "8b70ac80" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/service?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"address\": \"2134 Here St.\",\r\n \"day_of_month\": 5,\r\n \"invoice_type\": \"Split From General\",\r\n \"name\": \"My Service\",\r\n \"suite\": \"8b70ac80\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/service?property=8b70ac80") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/service?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"address\": \"2134 Here St.\",\r\n \"day_of_month\": 5,\r\n \"invoice_type\": \"Split From General\",\r\n \"name\": \"My Service\",\r\n \"suite\": \"8b70ac80\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the service is allowed to generate invoices |
address |
string |
The address to issue the invoice to |
day_of_month |
int |
The day of the month to generate and send the invoices on. For example, a value of 1 will generate the invoices on January 1st, February 1st, etc... |
id |
string |
The ID of the service |
invoice_type |
string |
The type of invoice to generate. This can be one of the following values: Split From General , General Consumption Price , or Customized Price . For more information on each type, please see the Invoice Types section |
name |
string |
The name of the service |
property |
string |
The ID of the property to generate invoices for |
suite |
string |
The ID of the suite this service applies to |
{ "active": true, "address": "123 Main St.", "day_of_month": 3, "id": "8b70ac80", "invoice_type": "Split From General", "name": "My Service", "property": "8b70ac80", "suite": "8b70ac80" }
PUT
(billing:service:update
)
Updates the selected service
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID of the service to update |
Name | Type | Description |
---|---|---|
suite |
string |
The ID of the suite this service applies to |
name |
string |
The name of the service |
address |
string |
The address to issue the invoice to |
invoice_type |
string |
The type of invoice to generate. This can be one of the following values: Split From General , General Consumption Price , or Customized Price . For more information on each type, please see the Invoice Types section |
day_of_month |
int |
The day of the month to generate and send the invoices on. For example, a value of 1 will generate the invoices on January 1st, February 1st, etc... |
active |
boolean |
If the service is allowed to generate invoices. Default is true |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "address": "2134 Here St.", "day_of_month": 5, "invoice_type": "Split From General", "name": "My Service", "suite": "8b70ac80" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2" payload = json.dumps({ "address": "2134 Here St.", "day_of_month": 5, "invoice_type": "Split From General", "name": "My Service", "suite": "8b70ac80" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "address": "2134 Here St.", "day_of_month": 5, "invoice_type": "Split From General", "name": "My Service", "suite": "8b70ac80" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"address\": \"2134 Here St.\",\r\n \"day_of_month\": 5,\r\n \"invoice_type\": \"Split From General\",\r\n \"name\": \"My Service\",\r\n \"suite\": \"8b70ac80\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"address\": \"2134 Here St.\",\r\n \"day_of_month\": 5,\r\n \"invoice_type\": \"Split From General\",\r\n \"name\": \"My Service\",\r\n \"suite\": \"8b70ac80\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the service is allowed to generate invoices |
address |
string |
The address to issue the invoice to |
day_of_month |
int |
The day of the month to generate and send the invoices on. For example, a value of 1 will generate the invoices on January 1st, February 1st, etc... |
id |
string |
The ID of the service |
invoice_type |
string |
The type of invoice to generate. This can be one of the following values: Split From General , General Consumption Price , or Customized Price . For more information on each type, please see the Invoice Types section |
name |
string |
The name of the service |
property |
string |
The ID of the property to generate invoices for |
suite |
string |
The ID of the suite this service applies to |
{ "active": true, "address": "123 Main St.", "day_of_month": 3, "id": "8b70ac80", "invoice_type": "Split From General", "name": "My Service", "property": "8b70ac80", "suite": "8b70ac80" }
DELETE
(billing:service:delete
)
Deletes the selected service
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the service to delete |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/service?property=8b70ac80&id=67bd6fc2"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
boolean |
If the service is allowed to generate invoices |
address |
string |
The address to issue the invoice to |
day_of_month |
int |
The day of the month to generate and send the invoices on. For example, a value of 1 will generate the invoices on January 1st, February 1st, etc... |
id |
string |
The ID of the service |
invoice_type |
string |
The type of invoice to generate. This can be one of the following values: Split From General , General Consumption Price , or Customized Price . For more information on each type, please see the Invoice Types section |
name |
string |
The name of the service |
property |
string |
The ID of the property to generate invoices for |
suite |
string |
The ID of the suite this service applies to |
{ "active": true, "address": "123 Main St.", "day_of_month": 3, "id": "8b70ac80", "invoice_type": "Split From General", "name": "My Service", "property": "8b70ac80", "suite": "8b70ac80" }
Suite
This endpoint allows you to manage suites at your property. It can be accessed at http://134.122.43.196:5000/api/v1/billing/suite
GET
(billing:suite:read
)
Returns a list of all suites at a property
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the suite to get. This is optional. |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/suite?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
id |
string |
The ID of the suite |
name |
string |
The name of the suite |
property |
string |
The ID of the property |
[ { "id": "8b70ac80", "name": "My Suite", "property": "8b70ac80" } ]
POST
(billing:suite:create
)
Creates a new suite
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
Name | Type | Description |
---|---|---|
name |
string |
The name of the suite |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/suite?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "My New Suite" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80" payload = json.dumps({ "name": "My New Suite" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "My New Suite" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"My New Suite\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"My New Suite\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
id |
string |
The ID of the suite |
name |
string |
The name of the suite |
property |
string |
The ID of the property |
{ "id": "67bd6fc2", "name": "My New Suite", "property": "8b70ac80" }
PUT
(billing:suite:update
)
Updates an existing suite
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID of the suite to update |
Name | Type | Description |
---|---|---|
name |
string |
The new name of the suite |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "My Newer Suite" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2" payload = json.dumps({ "name": "My Newer Suite" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "My Newer Suite" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"My Newer Suite\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"My Newer Suite\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
id |
string |
The ID of the suite |
name |
string |
The name of the suite |
property |
string |
The ID of the property |
{ "id": "67bd6fc2", "name": "My Newer Suite", "property": "8b70ac80" }
DELETE
(billing:suite:delete
)
Deletes the suite
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the suite to delete |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/suite?property=8b70ac80&id=67bd6fc2"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
id |
string |
The ID of the suite |
name |
string |
The name of the suite |
property |
string |
The ID of the property |
{ "id": "67bd6fc2", "name": "My Newer Suite", "property": "8b70ac80" }
Tenant
This endpoint allows you to manage your list of tenants. It can be accessed at http://134.122.43.196:5000/api/v1/billing/tenant
GET
(billing:tenant:read
)
Returns a list of all tenants at a property
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the fee to get. This is optional. |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
address |
string |
The address of the tenant |
email |
string |
The name of the tenant |
first_name |
string |
The first name of the tenant |
id |
string |
The ID of the tenant |
last_name |
string |
The last name of the tenant |
phone |
string |
The phone number of the tenant or null if unset |
property |
string |
The property of the tenant |
[ { "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "phone": null, "property": "8b70ac80" } ]
POST
(billing:tenant:create
)
Creates a new tenant
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
Name | Type | Description |
---|---|---|
address |
string |
The address of the tenant |
email |
string |
The name of the tenant |
first_name |
string |
The first name of the tenant |
last_name |
string |
The last name of the tenant |
phone |
string |
The phone number of the tenant. Default is null |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "last_name": "Doe", "phone": null }'
import requests import json url = "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80" payload = json.dumps({ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "last_name": "Doe", "phone": None })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "last_name": "Doe", "phone": null });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"address\": \"123 Main St.\",\r\n \"email\": \"support@intellimeter.ca\",\r\n \"first_name\": \"John\",\r\n \"last_name\": \"Doe\",\r\n \"phone\": null\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"address\": \"123 Main St.\",\r\n \"email\": \"support@intellimeter.ca\",\r\n \"first_name\": \"John\",\r\n \"last_name\": \"Doe\",\r\n \"phone\": null\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
address |
string |
The address of the tenant |
email |
string |
The name of the tenant |
first_name |
string |
The first name of the tenant |
id |
string |
The ID of the tenant |
last_name |
string |
The last name of the tenant |
phone |
string |
The phone number of the tenant or null if unset |
property |
string |
The property of the tenant |
{ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "phone": null, "property": "8b70ac80" }
PUT
(billing:tenant:update
)
Updates an existing tenant
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID of the tenant to update |
Name | Type | Description |
---|---|---|
address |
string |
The address of the tenant |
email |
string |
The name of the tenant |
first_name |
string |
The first name of the tenant |
last_name |
string |
The last name of the tenant |
phone |
string |
The phone number of the tenant. Default is null |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "last_name": "Doe", "phone": null }'
import requests import json url = "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2" payload = json.dumps({ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "last_name": "Doe", "phone": None })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "last_name": "Doe", "phone": null });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"address\": \"123 Main St.\",\r\n \"email\": \"support@intellimeter.ca\",\r\n \"first_name\": \"John\",\r\n \"last_name\": \"Doe\",\r\n \"phone\": null\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"address\": \"123 Main St.\",\r\n \"email\": \"support@intellimeter.ca\",\r\n \"first_name\": \"John\",\r\n \"last_name\": \"Doe\",\r\n \"phone\": null\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
address |
string |
The address of the tenant |
email |
string |
The name of the tenant |
first_name |
string |
The first name of the tenant |
id |
string |
The ID of the tenant |
last_name |
string |
The last name of the tenant |
phone |
string |
The phone number of the tenant or null if unset |
property |
string |
The property of the tenant |
{ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "phone": null, "property": "8b70ac80" }
DELETE
(billing:tenant:delete
)
Deletes the tenant
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
id |
string |
The ID the tenant to delete |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenant?property=8b70ac80&id=67bd6fc2"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
address |
string |
The address of the tenant |
email |
string |
The name of the tenant |
first_name |
string |
The first name of the tenant |
id |
string |
The ID of the tenant |
last_name |
string |
The last name of the tenant |
phone |
string |
The phone number of the tenant or null if unset |
property |
string |
The property of the tenant |
{ "address": "123 Main St.", "email": "support@intellimeter.ca", "first_name": "John", "id": "8b70ac80", "last_name": "Smith", "phone": null, "property": "8b70ac80" }
Tenant Suite
This endpoint allows you to map tenants to suites. It can be accessed at http://134.122.43.196:5000/api/v1/billing/tenant-suite
GET
(billing:tenant-suite:read
)
Returns a list of all tenants in a suite, or suites owned by a tenant. Note that the tenant
and suite
arguments are mutually exclusive
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
tenant |
string |
If specified, all of the suites which are owned by the specified tenant will be returned. |
suite |
string |
If specified, all of the tenants who live in the specified suite will be returned. |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&[tenant|suite]=[id]' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&[tenant|suite]=[id]" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&[tenant|suite]=[id]"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&[tenant|suite]=[id]") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&[tenant|suite]=[id]"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
See the Tenant section for the response format ifsuite
is specified, or the Suite section for the response format if tenant
is specified
POST
(billing:tenant-suite:create
)
Binds a tenant to a suite
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
Name | Type | Description |
---|---|---|
tenant |
string |
The ID of the tenant to bind to the suite |
suite |
string |
The ID of the suite to bind to the tenant |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "suite": "2fbac398", "tenant": "5754eba3" }'
import requests import json url = "http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80" payload = json.dumps({ "suite": "2fbac398", "tenant": "5754eba3" })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "suite": "2fbac398", "tenant": "5754eba3" });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"suite\": \"2fbac398\",\r\n \"tenant\": \"5754eba3\"\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"suite\": \"2fbac398\",\r\n \"tenant\": \"5754eba3\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
DELETE
(billing:tenant-suite:delete
)
Removes the binding of a tenant to a suite
Request
Name | Type | Description |
---|---|---|
property |
string |
The ID of the property to use |
tenant |
string |
The ID of the tenant to remove binding from the suite |
suite |
string |
The ID of the suite to remove binding from the tenant |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&tenant=5754eba3&suite=2fbac398' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&tenant=5754eba3&suite=2fbac398" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&tenant=5754eba3&suite=2fbac398"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&tenant=5754eba3&suite=2fbac398") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/tenantSuite?property=8b70ac80&tenant=5754eba3&suite=2fbac398"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
HTTP: 204 - No Content
Invoice Types
The following is a list of the currently supported invoice types, and some helpful information about each
Customized Price
This billing type issues a bill at a single flat rate. The flat rate is simply the sum of the active Fees at the property (+ tax)
For example, if your property has the following fees:
Name | Value |
---|---|
Admin Fee | $ 6.26 |
Service Fee | $ 4.32 |
The total price of the invoice would become $10.58
$$ $6.26 + $4.32 = $10.58 $$General Consumption Price
This billing type is the most complicated
For example, if the electricity rate is set to $0.13, we can calculate the total bill for each of our example tenants:
Tenant | Consumption | Rate | Total |
---|---|---|---|
Tenant A | 40.215 kWh | $0.13 | $$ 40.215 kWh \times $0.13 \approx $5.23 $$ |
Tenant B | 35.500 kWh | $0.13 | $$ 35.500 kWh \times $0.13 \approx $4.62 $$ |
Tenant C | 20.250 kWh | $0.13 | $$ 20.250 kWh \times $0.13 \approx $2.63 $$ |
Split From General
This billing type issues a bill which involves the most complicated formula, and may seem like a more complicated version of the General Consumption Price billing type, but its advantage is that it takes into account losses you don't want to carry. By splitting the invoice, we can be sure that the invoice will be equally divided between tenants.
In this example, we will start with the same consumption examples in the General Consumption Price billing type
Tenant | Consumption |
---|---|
Tenant A | 40.215 kWh |
Tenant B | 35.500 kWh |
Tenant C | 20.250 kWh |
The total consumption of the property can be calculated as:
$$ 40.215 kWh + 35.500 kWh + 20.250 kWh = 95.875 kWh $$The total cost of the consumption can then be calculated as (again using the $0.13 electricity rate)
$$ 95.875 kWh \times $0.13 = $12.46375 $$Next, we can calculate the shares of each tenant based on their consumption
Tenant | Consumption | Total Consumption | Tenant's Share |
---|---|---|---|
Tenant A | 40.215 kWh | 95.875 kWh | $$ \frac{ 40.215 kWh }{ 95.875 kWh } \approx 0.4185 $$ |
Tenant B | 35.500 kWh | 95.875 kWh | $$ \frac{ 35.500 kWh }{ 95.875 kWh } \approx 0.3703 $$ |
Tenant C | 20.250 kWh | 95.875 kWh | $$ \frac{ 20.250 kWh }{ 95.875 kWh } \approx 0.2112 $$ |
Finally, we can calculate the total invoice of each tenant from their previously calculated share
Tenant | Consumption | Tenant's Share | Tenant's Invoice |
---|---|---|---|
Tenant A | 40.215 kWh | $$ \approx 0.4185 $$ | $$ 0.4185 \times $12.46375 \approx $5.22 $$ |
Tenant B | 35.500 kWh | $$ \approx 0.3703 $$ | $$ 0.3703 \times $12.46375 \approx $4.62 $$ |
Tenant C | 20.250 kWh | $$ \approx 0.2112 $$ | $$ 0.2112 \times $12.46375 \approx $2.63 $$ |
Note that these values are not an exact match (off by 1 cent) with the values calculated in the General Consumption Price billing type. This is simply due to rounding as we only kept four decimal places. When our system performs these calculations, it keep more than four decimal places, and so this error margin becomes negligible.
Electric Vehicle Charging Management Controller (EVCMC)
These endpoints allow you to control and manage your EVCMC (Vehicle Charging Management Controller) meters
Coming SoonReports
These endpoints generate and return reports on your company, properties, suites, or meters
Period Consumption
This endpoint provides total consumption over the specified period of time. It can be accessed at http://134.122.43.196:5000/api/v1/reports/period-consumption
GET
(report:reading:period
)
Request
Name | Type | Description |
---|---|---|
start |
date |
The start date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
end |
date |
The end date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
type |
string |
The data format the result should be in. This can be one of the following values: RAW , CSV , XML , JSON , YAML , XLSX , TSV , or MYSQL . All will return a file except for RAW which will return a standard JSON response |
property |
string |
The ID of the property to retrieve data from |
ids |
list |
A comma separated list of the ids of the meters you wish to include in the report, or all to return data on all meters |
pretty |
bool |
If the resultant data should be pretty printed (this does not apply to all formats). This makes the data easier for a human to read, however, it can significantly increase the size of the file. Default is false . |
table_name |
string |
If the report is being generated in MYSQL mode, this arguement can be used to set the table name the data is being inserted into. The default value is {table_name} |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/period-consumption?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/period-consumption?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/period-consumption?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/period-consumption?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/period-consumption?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
csv
xml
json
yaml
xslx
tsv
mysql
Single Grand Total
This endpoint returns the reads taken on the specified day. It can be accessed at http://134.122.43.196:5000/api/v1/reports/single-grand-total
GET
(report:reading:single
)
Request
Name | Type | Description |
---|---|---|
start |
date |
The start date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
type |
string |
The data format the result should be in. This can be one of the following values: RAW , CSV , XML , JSON , YAML , XLSX , TSV , or MYSQL . All will return a file except for RAW which will return a standard JSON response |
property |
string |
The ID of the property to retrieve data from |
ids |
list |
A comma separated list of the ids of the meters you wish to include in the report, or all to return data on all meters |
pretty |
bool |
If the resultant data should be pretty printed (this does not apply to all formats). This makes the data easier for a human to read, however, it can significantly increase the size of the file. Default is false . |
table_name |
string |
If the report is being generated in MYSQL mode, this arguement can be used to set the table name the data is being inserted into. The default value is {table_name} |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/single-grand-total?start=2021-03-09&type=csv&property=8b70ac80&ids=all' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/single-grand-total?start=2021-03-09&type=csv&property=8b70ac80&ids=all" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/single-grand-total?start=2021-03-09&type=csv&property=8b70ac80&ids=all"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/single-grand-total?start=2021-03-09&type=csv&property=8b70ac80&ids=all") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/single-grand-total?start=2021-03-09&type=csv&property=8b70ac80&ids=all"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
csv
xml
json
yaml
xslx
tsv
mysql
Daily Grand Total
This endpoint returns the reads taken each day in the specified range. It can be accessed at http://134.122.43.196:5000/api/v1/reports/daily-grand-total
GET
(report:reading:daily
)
Request
Name | Type | Description |
---|---|---|
start |
date |
The start date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
end |
date |
The end date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
type |
string |
The data format the result should be in. This can be one of the following values: RAW , CSV , XML , JSON , YAML , XLSX , TSV , or MYSQL . All will return a file except for RAW which will return a standard JSON response |
property |
string |
The ID of the property to retrieve data from |
ids |
list |
A comma separated list of the ids of the meters you wish to include in the report, or all to return data on all meters |
pretty |
bool |
If the resultant data should be pretty printed (this does not apply to all formats). This makes the data easier for a human to read, however, it can significantly increase the size of the file. Default is false . |
table_name |
string |
If the report is being generated in MYSQL mode, this arguement can be used to set the table name the data is being inserted into. The default value is {table_name} |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/daily-grand-total?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/daily-grand-total?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/daily-grand-total?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/daily-grand-total?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/daily-grand-total?start=2021-03-09&end=2021-03-13&type=csv&property=8b70ac80&ids=all"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
csv
xml
json
yaml
xslx
tsv
mysql
Counts
This endpoint returns counts and statistics about your company. It can be accessed at http://134.122.43.196:5000/api/v1/reports/counts
GET
(report:general:count
)
Request
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/counts' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/counts" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/counts"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/counts") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/counts"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
[ { "invoices": { "late": 6, "late_percent": 13.953488372093023, "on_time": 37, "on_time_percent": 86.04651162790698, "paid": 2, "paid_percent": 4.651162790697675, "total": 43, "unpaid": 41, "unpaid_percent": 95.34883720930233 }, "monthly_consumption": { "electrical": 200.235, "gas": 60.289, "water": 30.458 } } ]
Interval Report
This endpoint returns the consumption taken over the specified time period at the specified interval.. It can be accessed at http://134.122.43.196:5000/api/v1/reports/interval
GET
(report:reading:interval
)
Request
Name | Type | Description |
---|---|---|
start |
date |
The start date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
end |
date |
The end date of the range to generate the report from. Note that time can be included provided the value is in the ISO 8601 format |
type |
string |
The data format the result should be in. This can be one of the following values: RAW , CSV , XML , JSON , YAML , XLSX , TSV , or MYSQL . All will return a file except for RAW which will return a standard JSON response |
property |
string |
The ID of the property to retrieve data from |
ids |
list |
A comma separated list of the ids of the meters you wish to include in the report, or all to return data on all meters |
interval |
string |
The interval to gather the consumption at. This can be one of the following values: HOUR , DAY , MONTH , or YEAR (case insensitive). Note that the timestamp will only show up to the specified interval. For example, if MONTH is selected, the timestamp will be in the format YYYY-MM |
pretty |
bool |
If the resultant data should be pretty printed (this does not apply to all formats). This makes the data easier for a human to read, however, it can significantly increase the size of the file. Default is false . |
table_name |
string |
If the report is being generated in MYSQL mode, this arguement can be used to set the table name the data is being inserted into. The default value is {table_name} |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/interval?start=2021-03-09&end=2021-03-13&type=json&property=8b70ac80&ids=all&table_name=test&interval=day' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/interval?start=2021-03-09&end=2021-03-13&type=json&property=8b70ac80&ids=all&table_name=test&interval=day" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/interval?start=2021-03-09&end=2021-03-13&type=json&property=8b70ac80&ids=all&table_name=test&interval=day"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/interval?start=2021-03-09&end=2021-03-13&type=json&property=8b70ac80&ids=all&table_name=test&interval=day") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/interval?start=2021-03-09&end=2021-03-13&type=json&property=8b70ac80&ids=all&table_name=test&interval=day"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
csv
xml
json
yaml
xslx
tsv
mysql
Scheduled Reports
This endpoint allows to schedule reports to be generated and emailed to you automatically. It can be accessed at http://134.122.43.196:5000/api/v1/reports/reports/schedule
GET
(report:schedule:read
)
Returns a list of your scheduled reports
Request
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/schedule' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/schedule" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/schedule"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/schedule") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/schedule"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
bool |
If the report will be generated on its schedule |
created |
datetime |
The date and time the report was created |
end |
date |
The date the report should be run for the last time (null to run indefinitely) |
id |
string |
The id of the report |
last_run |
datetime |
The date and time the report was last run (null means it has not been run by the system yet) |
name |
string |
The name of the report |
period |
int |
How many "repeat"s must pass between each generation (ex. period=1 and repeat=month means to run every 1 months) |
repeat |
string |
The frequency to run the report. This can be one of the following values: never , day , week , month , year (case insensitive) |
reports |
list |
A list of strings containing the reports which should be included in the report (in order of appearance on the pdf file). Options are (case sensitive): ConsumptionTable , ConsumptionMonthly , ConsumptionDaily , ConsumptionDistribution , WeekendDistribution , WeekendTable , TopProperties , TopSuites , TopPropertiesTable , TopSuitesTable |
result |
string |
A system generated message describing the status of the last report generation |
start |
date |
The date the report should begin being scheduled (null means to use the date of creation) |
updated |
datetime |
The date and time the report was last updated |
user |
string |
The user who owns the report |
[ { "active": true, "created": "2021-05-25T13:26:35", "end": null, "id": "8b70ac80", "last_run": null, "name": "My Report", "period": null, "repeat": "never", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ], "result": null, "start": "2021-05-25", "updated": "2021-05-27T09:54:39", "user": "8b70ac80" } ]
POST
(report:schedule:create
)
Creates a new scheduled report
Request
Name | Type | Description |
---|---|---|
name |
string |
The name of the report |
reports |
list |
A list of strings containing the reports which should be included in the report (in order of appearance on the pdf file). Options are (case sensitive): ConsumptionTable , ConsumptionMonthly , ConsumptionDaily , ConsumptionDistribution , WeekendDistribution , WeekendTable , TopProperties , TopSuites , TopPropertiesTable , TopSuitesTable |
repeat |
string |
The frequency to run the report. This can be one of the following values: never , day , week , month , year (case insensitive) |
period |
int |
How many "repeat"s must pass between each generation (ex. period=1 and repeat=month means to run every 1 months) |
start |
date |
The date the report should begin being scheduled (null means to use the date of creation) |
end |
date |
The date the report should be run for the last time (null to run indefinitely) |
active |
bool |
If the report will be generated on its schedule |
curl --location --request POST 'http://134.122.43.196:5000/api/v1/reports/schedule' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "Report 2", "period": 1, "repeat": "day", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ] }'
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/schedule" payload = json.dumps({ "name": "Report 2", "period": 1, "repeat": "day", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ] })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "Report 2", "period": 1, "repeat": "day", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ] });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("POST", "http://134.122.43.196:5000/api/v1/reports/schedule"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"Report 2\",\r\n \"period\": 1,\r\n \"repeat\": \"day\",\r\n \"reports\": [\r\n \"ConsumptionTable\",\r\n \"ConsumptionMonthly\",\r\n \"ConsumptionDaily\",\r\n \"ConsumptionDistribution\"\r\n ]\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/schedule") .method("POST", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/schedule"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"Report 2\",\r\n \"period\": 1,\r\n \"repeat\": \"day\",\r\n \"reports\": [\r\n \"ConsumptionTable\",\r\n \"ConsumptionMonthly\",\r\n \"ConsumptionDaily\",\r\n \"ConsumptionDistribution\"\r\n ]\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
bool |
If the report will be generated on its schedule |
created |
datetime |
The date and time the report was created |
end |
date |
The date the report should be run for the last time (null to run indefinitely) |
id |
string |
The id of the report |
last_run |
datetime |
The date and time the report was last run (null means it has not been run by the system yet) |
name |
string |
The name of the report |
period |
int |
How many "repeat"s must pass between each generation (ex. period=1 and repeat=month means to run every 1 months) |
repeat |
string |
The frequency to run the report. This can be one of the following values: never , day , week , month , year (case insensitive) |
reports |
list |
A list of strings containing the reports which should be included in the report (in order of appearance on the pdf file). Options are (case sensitive): ConsumptionTable , ConsumptionMonthly , ConsumptionDaily , ConsumptionDistribution , WeekendDistribution , WeekendTable , TopProperties , TopSuites , TopPropertiesTable , TopSuitesTable |
result |
string |
A system generated message describing the status of the last report generation |
start |
date |
The date the report should begin being scheduled (null means to use the date of creation) |
updated |
datetime |
The date and time the report was last updated |
user |
string |
The user who owns the report |
[ { "active": true, "created": "2021-05-25T13:26:35", "end": null, "id": "8b70ac80", "last_run": null, "name": "My Report", "period": null, "repeat": "never", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ], "result": null, "start": "2021-05-25", "updated": "2021-05-27T09:54:39", "user": "8b70ac80" } ]
PUT
(report:schedule:update
)
Updates an existing scheduled report
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the report to update |
Name | Type | Description |
---|---|---|
name |
string |
The name of the report |
reports |
list |
A list of strings containing the reports which should be included in the report (in order of appearance on the pdf file). Options are (case sensitive): ConsumptionTable , ConsumptionMonthly , ConsumptionDaily , ConsumptionDistribution , WeekendDistribution , WeekendTable , TopProperties , TopSuites , TopPropertiesTable , TopSuitesTable |
repeat |
string |
The frequency to run the report. This can be one of the following values: never , day , week , month , year (case insensitive) |
period |
int |
How many "repeat"s must pass between each generation (ex. period=1 and repeat=month means to run every 1 months) |
start |
date |
The date the report should begin being scheduled (null means to use the date of creation) |
end |
date |
The date the report should be run for the last time (null to run indefinitely) |
active |
bool |
If the report will be generated on its schedule |
curl --location --request PUT 'http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
--header 'Content-Type: application/json' \ --data-raw '{ "name": "Report 2", "period": 1, "repeat": "day", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ] }'
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80" payload = json.dumps({ "name": "Report 2", "period": 1, "repeat": "day", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ] })
headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("PUT", url, headers=headers, data=payload) print(response.text)
var data = JSON.stringify({ "name": "Report 2", "period": 1, "repeat": "day", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ] });
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("PUT", "http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);
OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\r\n \"name\": \"Report 2\",\r\n \"period\": 1,\r\n \"repeat\": \"day\",\r\n \"reports\": [\r\n \"ConsumptionTable\",\r\n \"ConsumptionMonthly\",\r\n \"ConsumptionDaily\",\r\n \"ConsumptionDistribution\"\r\n ]\r\n}");
Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80") .method("PUT", body)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.PUT); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); request.AddParameter("application/json", "{\r\n \"name\": \"Report 2\",\r\n \"period\": 1,\r\n \"repeat\": \"day\",\r\n \"reports\": [\r\n \"ConsumptionTable\",\r\n \"ConsumptionMonthly\",\r\n \"ConsumptionDaily\",\r\n \"ConsumptionDistribution\"\r\n ]\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
bool |
If the report will be generated on its schedule |
created |
datetime |
The date and time the report was created |
end |
date |
The date the report should be run for the last time (null to run indefinitely) |
id |
string |
The id of the report |
last_run |
datetime |
The date and time the report was last run (null means it has not been run by the system yet) |
name |
string |
The name of the report |
period |
int |
How many "repeat"s must pass between each generation (ex. period=1 and repeat=month means to run every 1 months) |
repeat |
string |
The frequency to run the report. This can be one of the following values: never , day , week , month , year (case insensitive) |
reports |
list |
A list of strings containing the reports which should be included in the report (in order of appearance on the pdf file). Options are (case sensitive): ConsumptionTable , ConsumptionMonthly , ConsumptionDaily , ConsumptionDistribution , WeekendDistribution , WeekendTable , TopProperties , TopSuites , TopPropertiesTable , TopSuitesTable |
result |
string |
A system generated message describing the status of the last report generation |
start |
date |
The date the report should begin being scheduled (null means to use the date of creation) |
updated |
datetime |
The date and time the report was last updated |
user |
string |
The user who owns the report |
[ { "active": true, "created": "2021-05-25T13:26:35", "end": null, "id": "8b70ac80", "last_run": null, "name": "My Report", "period": null, "repeat": "never", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ], "result": null, "start": "2021-05-25", "updated": "2021-05-27T09:54:39", "user": "8b70ac80" } ]
DELETE
(report:schedule:delete
)
Deletes the specified report
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the report to delete |
curl --location --request DELETE 'http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("DELETE", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("DELETE", "http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80") .method("DELETE", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/schedule?id=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.DELETE); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
active |
bool |
If the report will be generated on its schedule |
created |
datetime |
The date and time the report was created |
end |
date |
The date the report should be run for the last time (null to run indefinitely) |
id |
string |
The id of the report |
last_run |
datetime |
The date and time the report was last run (null means it has not been run by the system yet) |
name |
string |
The name of the report |
period |
int |
How many "repeat"s must pass between each generation (ex. period=1 and repeat=month means to run every 1 months) |
repeat |
string |
The frequency to run the report. This can be one of the following values: never , day , week , month , year (case insensitive) |
reports |
list |
A list of strings containing the reports which should be included in the report (in order of appearance on the pdf file). Options are (case sensitive): ConsumptionTable , ConsumptionMonthly , ConsumptionDaily , ConsumptionDistribution , WeekendDistribution , WeekendTable , TopProperties , TopSuites , TopPropertiesTable , TopSuitesTable |
result |
string |
A system generated message describing the status of the last report generation |
start |
date |
The date the report should begin being scheduled (null means to use the date of creation) |
updated |
datetime |
The date and time the report was last updated |
user |
string |
The user who owns the report |
[ { "active": true, "created": "2021-05-25T13:26:35", "end": null, "id": "8b70ac80", "last_run": null, "name": "My Report", "period": null, "repeat": "never", "reports": [ "ConsumptionTable", "ConsumptionMonthly", "ConsumptionDaily", "ConsumptionDistribution" ], "result": null, "start": "2021-05-25", "updated": "2021-05-27T09:54:39", "user": "8b70ac80" } ]
Generate a Scheduled Report
This endpoint queues one of your scheduled reports to be generated and downloaded. It can be accessed at http://134.122.43.196:5000/api/v1/reports/reports/schedule/generate
GET
(report:schedule:generate
)
Queues the specified report for generation. returns HTTP Status Code: 202
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the report to queue for generation |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/schedule/generate?id=8b70ac80' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/schedule/generate?id=8b70ac80" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/schedule/generate?id=8b70ac80"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/schedule/generate?id=8b70ac80") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/schedule/generate?id=8b70ac80"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
code |
int |
Will always be 202 |
error |
string |
Will always be "Accepted" |
interval |
time |
The interval at which you may poll the status in the format HH:MM:SS. Will almost always be "0:00:05" - 5 seconds |
message |
string |
A success message |
poll_uri |
string |
The URL to poll the generation status |
{ "code": 202, "error": "Accepted", "interval": "0:00:05", "message": "The report generation job has been started. Please poll http://127.0.0.1:12345/api/v1/reports/schedule/poll?id=8b70ac80&token=179c9419c6d for the status", "poll_uri": "[Some URI to poll the status]" }
Poll a Generating Report
This endpoint checks the status of a report being generated. It can be accessed at http://134.122.43.196:5000/api/v1/reports/reports/schedule/poll
GET
(report:schedule:generate
)
Queues the specified report for generation. returns HTTP Status Code: 202
Request
Name | Type | Description |
---|---|---|
id |
string |
The ID of the report to poll |
token |
string |
The access token provided when queuing the report |
curl --location --request GET 'http://134.122.43.196:5000/api/v1/reports/schedule/poll?id=8b70ac80&token=179c9419c6d' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/reports/schedule/poll?id=8b70ac80&token=179c9419c6d" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/reports/schedule/poll?id=8b70ac80&token=179c9419c6d"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/reports/schedule/poll?id=8b70ac80&token=179c9419c6d") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/reports/schedule/poll?id=8b70ac80&token=179c9419c6d"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
If the report has not finished being generated, you will receive the following JSON response:{ "code": 425, "error": "Too Early", "message": "The requested report is still being created. Please check again later." }If the report has not been completed yet, the generated PDF file will be returned with the Content-Type header set to application/pdf
File Send
This section explains the file formats which are available to be sent after each read cycle. For more information on configuring this, please see the HTTP/HTTPS or FTPS API Endpoints, or manage in the Intellimeter Cloud Portal under Settings/HTTP File Upload, or Settings/FTPS File Upload.
CSV
There will be one record per meter, and one column per parameter which is monitored
name,serial_number,utility,panel,suite,floor,time_stamping,sent,voltage_a,voltage_b,voltage_c Meter1,20-350-Testing-MFX-1-Meter-01,E,,,,2021-01-20 15:20:00,,122.3,122.4,122.0 Meter2,20-350-Testing-MFX-2-Meter-01,E,,,,2021-01-20 15:20:00,,122.3,122.4,122.1
JSON
There will be one object per meter. The object key is the name of the meter. Each object will contain a key-value pair of the metering point and its latest read
{ "Meter1": { "serial_number": "20-350-Testing-MFX-1-Meter-01", "utility": "E", "panel": null, "suite": null, "floor": null, "time_stamping": "2021-01-20 15:20:00", "sent": null, "voltage_a": 122.3, "voltage_b": 122.4, "voltage_c": 122.0 }, "Meter2": { "serial_number": "20-350-Testing-MFX-2-Meter-01", "utility": "E", "panel": null, "suite": null, "floor": null, "time_stamping": "2021-01-20 15:20:00", "sent": null, "voltage_a": 122.3, "voltage_b": 122.4, "voltage_c": 122.1 } }
XML
There will be one object per meter. Each object will contain a tag for each metering point and its latest read
<?xml version="1.0" encoding="UTF-8" ?> <reads> <item> <name>Meter1</name> <serial_number>20-350-Testing-MFX-1-Meter-01</serial_number> <utility>E</utility> <panel></panel> <suite></suite> <floor></floor> <time_stamping>2021-01-20 15:20:00</time_stamping> <sent></sent> <voltage_a>122.3,</voltage_a> <voltage_b>122.4,</voltage_b> <voltage_c>122.0</voltage_c> </item> <item> <name>Meter2</name> <serial_number>20-350-Testing-MFX-2-Meter-01</serial_number> <utility>E</utility> <panel></panel> <suite></suite> <floor></floor> <time_stamping>2021-01-20 15:20:00</time_stamping> <sent></sent> <voltage_a>122.3,</voltage_a> <voltage_b>122.4,</voltage_b> <voltage_c>122.1</voltage_c> </item> </reads>
Public
These are endpoints which do not require authentication. Note that they only pertain to the Intellimeter Data Web Portal, and may not be useful for your project.FAQ
Retrieves the list of frequently asked API questions, and their answers. It can be accessed at http://134.122.43.196:5000/api/v1/faq
GET
Request
curl --location --request GET 'http://134.122.43.196:5000/api/v1/faq' \
--header 'Authorization: Bearer [Access Token]' \
import requests import json url = "http://134.122.43.196:5000/api/v1/faq" headers = {
"Authorization": "Bearer [Access Token]",
"Content-Type": "application/json" } response = requests.request("GET", url, headers=headers) print(response.text)
var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "http://134.122.43.196:5000/api/v1/faq"); xhr.setRequestHeader("Authorization", "Bearer [Access Token]");
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send();
OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("http://134.122.43.196:5000/api/v1/faq") .method("GET", null)
.addHeader("Authorization", "Bearer [Access Token]") .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute();
var client = new RestClient("http://134.122.43.196:5000/api/v1/faq"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer [Access Token]"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);
Response
Name | Type | Description |
---|---|---|
answer |
string |
The answer to the question |
created |
datetime |
The date and time the question was created |
id |
string |
The ID of the question |
question |
string |
The question |
updated |
datetime |
The date and time the question was updated |
[ { "answer": "Answer 1", "created": "2021-04-08T16:27:02", "id": "8b70ac80", "question": "Question 1", "updated": "2021-04-08T16:27:02" } ]
User Manual
Retrieves the latest version of the user's manual for the Intellimeter Canada Inc. data portal. It can be accessed at http://134.122.43.196:5000/api/v1/documentation