Introduction
This documentation aims to provide all the information you need to work with our API.
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your token by visiting your dashboard and clicking Generate API token.
Admin Management
APIs for super admin operations
Add New User
requires authentication
Create a new user and company (super admin only).
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/user" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companyName\": \"New Company Ltd\",
\"email\": \"user@example.com\",
\"firstName\": \"John\",
\"lastName\": \"Doe\",
\"password\": \"SecurePass123!\",
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1234567890\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/user"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companyName": "New Company Ltd",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"password": "SecurePass123!",
"countryIsoCode": "US",
"phoneNumber": "+1234567890"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/user',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companyName' => 'New Company Ltd',
'email' => 'user@example.com',
'firstName' => 'John',
'lastName' => 'Doe',
'password' => 'SecurePass123!',
'countryIsoCode' => 'US',
'phoneNumber' => '+1234567890',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/user'
payload = {
"companyName": "New Company Ltd",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"password": "SecurePass123!",
"countryIsoCode": "US",
"phoneNumber": "+1234567890"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"firstName": "John",
"lastName": "Doe",
"phoneNumbers": [
{
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"isChecked": true,
"isValid": true
}
],
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z",
"defaultCompanySlug": "new-company-ltd",
"emailVerifiedAt": null,
"defaultCountryIsoCode": "US",
"defaultCountryEmoji": "🇺🇸",
"imgUrl": "https://www.gravatar.com/avatar/...",
"imgThumbUrl": "https://www.gravatar.com/avatar/..."
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"email": [
"The email has already been taken."
],
"companyName": [
"The company name has already been taken."
]
}
}
Received response:
Request failed with error:
Authentication
APIs for managing authentication sessions
Login user
Authenticate a user and create a new session. This endpoint validates the user's credentials and returns the authenticated user's details along with a session cookie.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"john@example.com\",
\"password\": \"secret123!@#\",
\"remember_me\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/login"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "john@example.com",
"password": "secret123!@#",
"remember_me": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/login',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'john@example.com',
'password' => 'secret123!@#',
'remember_me' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/login'
payload = {
"email": "john@example.com",
"password": "secret123!@#",
"remember_me": true
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Example response (200, Success):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"phoneNumbers": [
{
"countryIsoCode": "GB",
"phoneNumber": "+44...",
"isChecked": true,
"isValid": true
}
],
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z",
"imgUrl": "https://example.com/profiles/john.jpg",
"imgThumbUrl": "https://example.com/profiles/john_thumb.jpg",
"defaultCompanySlug": "example-company",
"emailVerifiedAt": "2024-01-20T11:00:00Z",
"defaultCountryIsoCode": "GB",
"defaultCountryEmoji": "🇬🇧"
}
}
Example response (422, Invalid Credentials):
{
"message": "The provided credentials are incorrect.",
"errors": {
"email": [
"These credentials do not match our records."
]
}
}
Example response (422, Invalid Credentials):
{
"message": "The provided credentials are incorrect.",
"errors": {
"email": [
"These credentials do not match our records."
]
}
}
Example response (429, Too Many Attempts):
{
"message": "Too many login attempts. Please try again in 60 seconds.",
"errors": {
"email": [
"Too many login attempts."
]
}
}
Example response (429, Too Many Attempts):
{
"message": "Too many login attempts. Please try again in 60 seconds.",
"errors": {
"email": ["Too many login attempts."]
}
Received response:
Request failed with error:
Logout user
requires authentication
Invalidate the current user's session.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/logout" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/logout"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/logout',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/logout'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"msg": "Logged out"
}
Example response (204):
[Empty response]
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Example response (401):
{
Received response:
Request failed with error:
Authentication > Token Management
DELETE api/v1/logout/everywhere
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/logout/everywhere" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/logout/everywhere"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/logout/everywhere',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/logout/everywhere'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200):
{
"data": {
"message": "Logged out everywhere - all tokens and sessions invalidated"
}
}
Received response:
Request failed with error:
POST api/v1/sanctum/token
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sanctum/token" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"user@example.com\",
\"password\": \"SecurePass123!\",
\"deviceName\": \"TrackLab Web\",
\"abilities\": [
\"deliveries:read\"
],
\"expiresIn\": 1440,
\"refreshExpiresIn\": 10080
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/token"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "user@example.com",
"password": "SecurePass123!",
"deviceName": "TrackLab Web",
"abilities": [
"deliveries:read"
],
"expiresIn": 1440,
"refreshExpiresIn": 10080
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sanctum/token',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'user@example.com',
'password' => 'SecurePass123!',
'deviceName' => 'TrackLab Web',
'abilities' => [
'deliveries:read',
],
'expiresIn' => 1440,
'refreshExpiresIn' => 10080,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/token'
payload = {
"email": "user@example.com",
"password": "SecurePass123!",
"deviceName": "TrackLab Web",
"abilities": [
"deliveries:read"
],
"expiresIn": 1440,
"refreshExpiresIn": 10080
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"accessToken": "1|sanctum_abc",
"refreshToken": "2|sanctum_xyz",
"tokenType": "Bearer",
"expiresIn": 900
}
}
Received response:
Request failed with error:
POST api/v1/sanctum/token/refresh
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sanctum/token/refresh" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"refreshToken\": \"2|laravel_sanctum_abc123\",
\"expiresIn\": 1440,
\"refreshExpiresIn\": 10080
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/token/refresh"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"refreshToken": "2|laravel_sanctum_abc123",
"expiresIn": 1440,
"refreshExpiresIn": 10080
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sanctum/token/refresh',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'refreshToken' => '2|laravel_sanctum_abc123',
'expiresIn' => 1440,
'refreshExpiresIn' => 10080,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/token/refresh'
payload = {
"refreshToken": "2|laravel_sanctum_abc123",
"expiresIn": 1440,
"refreshExpiresIn": 10080
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"accessToken": "3|sanctum_new",
"refreshToken": "4|sanctum_new_refresh",
"tokenType": "Bearer",
"expiresIn": 900
}
}
Received response:
Request failed with error:
DELETE api/v1/sanctum/token/current
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sanctum/token/current" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/token/current"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sanctum/token/current',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/token/current'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200):
{
"data": {
"message": "Current token revoked successfully"
}
}
Received response:
Request failed with error:
DELETE api/v1/sanctum/token/refresh
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sanctum/token/refresh" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"refreshToken\": \"2|laravel_sanctum_abc123\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/token/refresh"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"refreshToken": "2|laravel_sanctum_abc123"
};
fetch(url, {
method: "DELETE",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sanctum/token/refresh',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'refreshToken' => '2|laravel_sanctum_abc123',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/token/refresh'
payload = {
"refreshToken": "2|laravel_sanctum_abc123"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"message": "Refresh token revoked successfully"
}
}
Received response:
Request failed with error:
DELETE api/v1/sanctum/token/all
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sanctum/token/all" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/token/all"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sanctum/token/all',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/token/all'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (200):
{
"data": {
"message": "All other tokens revoked successfully"
}
}
Received response:
Request failed with error:
GET api/v1/sanctum/tokens
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sanctum/tokens" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/tokens"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sanctum/tokens',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/tokens'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"tokens": [
{
"tokenUuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "TrackLab Web",
"abilities": [
"*"
],
"lastUsedAt": "2024-01-20T12:00:00Z",
"createdAt": "2024-01-19T12:00:00Z",
"expiresAt": "2024-02-18T12:00:00Z",
"isRefreshToken": false
}
]
}
}
Received response:
Request failed with error:
DELETE api/v1/sanctum/token/{tokenUuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sanctum/token/5025355b-693f-384c-8140-9e85d38297c7" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tokenUuid\": \"4e350ee3-9ebc-34ec-97c2-290726ff51c8\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sanctum/token/5025355b-693f-384c-8140-9e85d38297c7"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"tokenUuid": "4e350ee3-9ebc-34ec-97c2-290726ff51c8"
};
fetch(url, {
method: "DELETE",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sanctum/token/5025355b-693f-384c-8140-9e85d38297c7',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'tokenUuid' => '4e350ee3-9ebc-34ec-97c2-290726ff51c8',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sanctum/token/5025355b-693f-384c-8140-9e85d38297c7'
payload = {
"tokenUuid": "4e350ee3-9ebc-34ec-97c2-290726ff51c8"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"message": "Token revoked."
}
}
Received response:
Request failed with error:
Company - Data Retention
List all effective retention policies for the authenticated company.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Show a single effective retention policy for the authenticated company.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies/collector-measurements" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies/collector-measurements"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies/collector-measurements',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/data-retention/policies/collector-measurements'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Company Activity Logs
List activity logs for the company.
requires authentication
Returns paginated activity logs for actions performed by users within the authenticated company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/voluptatem/activity-logs?page=1&perPage=25&event=farm-section&action=update&logName=default&subjectType=Farm&causerUuid=550e8400-e29b-41d4-a716-446655440000&fromDate=2026-01-01&toDate=2026-12-31&batchUuid=550e8400-e29b-41d4-a716-446655440000&search=collector&sortBy=created_at&sortOrder=desc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/voluptatem/activity-logs"
);
const params = {
"page": "1",
"perPage": "25",
"event": "farm-section",
"action": "update",
"logName": "default",
"subjectType": "Farm",
"causerUuid": "550e8400-e29b-41d4-a716-446655440000",
"fromDate": "2026-01-01",
"toDate": "2026-12-31",
"batchUuid": "550e8400-e29b-41d4-a716-446655440000",
"search": "collector",
"sortBy": "created_at",
"sortOrder": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/voluptatem/activity-logs',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'event' => 'farm-section',
'action' => 'update',
'logName' => 'default',
'subjectType' => 'Farm',
'causerUuid' => '550e8400-e29b-41d4-a716-446655440000',
'fromDate' => '2026-01-01',
'toDate' => '2026-12-31',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440000',
'search' => 'collector',
'sortBy' => 'created_at',
'sortOrder' => 'desc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/voluptatem/activity-logs'
params = {
'page': '1',
'perPage': '25',
'event': 'farm-section',
'action': 'update',
'logName': 'default',
'subjectType': 'Farm',
'causerUuid': '550e8400-e29b-41d4-a716-446655440000',
'fromDate': '2026-01-01',
'toDate': '2026-12-31',
'batchUuid': '550e8400-e29b-41d4-a716-446655440000',
'search': 'collector',
'sortBy': 'created_at',
'sortOrder': 'desc',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get available filter options for company activity logs.
requires authentication
Returns distinct values for events, log names, and subject types to populate filter dropdowns in the UI. Note: These are global values, not filtered by company scope.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/commodi/activity-logs/filter-options?page=1&perPage=25&event=farm-section&action=update&logName=default&subjectType=Farm&causerUuid=550e8400-e29b-41d4-a716-446655440000&fromDate=2026-01-01&toDate=2026-12-31&batchUuid=550e8400-e29b-41d4-a716-446655440000&search=collector&sortBy=created_at&sortOrder=desc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/commodi/activity-logs/filter-options"
);
const params = {
"page": "1",
"perPage": "25",
"event": "farm-section",
"action": "update",
"logName": "default",
"subjectType": "Farm",
"causerUuid": "550e8400-e29b-41d4-a716-446655440000",
"fromDate": "2026-01-01",
"toDate": "2026-12-31",
"batchUuid": "550e8400-e29b-41d4-a716-446655440000",
"search": "collector",
"sortBy": "created_at",
"sortOrder": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/commodi/activity-logs/filter-options',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'event' => 'farm-section',
'action' => 'update',
'logName' => 'default',
'subjectType' => 'Farm',
'causerUuid' => '550e8400-e29b-41d4-a716-446655440000',
'fromDate' => '2026-01-01',
'toDate' => '2026-12-31',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440000',
'search' => 'collector',
'sortBy' => 'created_at',
'sortOrder' => 'desc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/commodi/activity-logs/filter-options'
params = {
'page': '1',
'perPage': '25',
'event': 'farm-section',
'action': 'update',
'logName': 'default',
'subjectType': 'Farm',
'causerUuid': '550e8400-e29b-41d4-a716-446655440000',
'fromDate': '2026-01-01',
'toDate': '2026-12-31',
'batchUuid': '550e8400-e29b-41d4-a716-446655440000',
'search': 'collector',
'sortBy': 'created_at',
'sortOrder': 'desc',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Export activity logs for the company.
requires authentication
Exports activity logs with optional filtering. Supports CSV and JSON formats. Uses streaming for memory-efficient export of large datasets.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/ipsum/activity-logs/export?startDate=2026-01-01&endDate=2026-12-31&event=sa.device-model-type&action=create&logName=default&subjectType=User&causerUuid=550e8400-e29b-41d4-a716-446655440000&batchUuid=550e8400-e29b-41d4-a716-446655440000&search=firmware&format=csv" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/ipsum/activity-logs/export"
);
const params = {
"startDate": "2026-01-01",
"endDate": "2026-12-31",
"event": "sa.device-model-type",
"action": "create",
"logName": "default",
"subjectType": "User",
"causerUuid": "550e8400-e29b-41d4-a716-446655440000",
"batchUuid": "550e8400-e29b-41d4-a716-446655440000",
"search": "firmware",
"format": "csv",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/ipsum/activity-logs/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'startDate' => '2026-01-01',
'endDate' => '2026-12-31',
'event' => 'sa.device-model-type',
'action' => 'create',
'logName' => 'default',
'subjectType' => 'User',
'causerUuid' => '550e8400-e29b-41d4-a716-446655440000',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440000',
'search' => 'firmware',
'format' => 'csv',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/ipsum/activity-logs/export'
params = {
'startDate': '2026-01-01',
'endDate': '2026-12-31',
'event': 'sa.device-model-type',
'action': 'create',
'logName': 'default',
'subjectType': 'User',
'causerUuid': '550e8400-e29b-41d4-a716-446655440000',
'batchUuid': '550e8400-e29b-41d4-a716-446655440000',
'search': 'firmware',
'format': 'csv',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Company Management
APIs for managing company information
Get Company Details
requires authentication
Retrieve the authenticated user's company details.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/atque" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/atque"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/atque',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/atque'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"slug": "example-company",
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z",
"enabled": true,
"defaultCountryIsoCode": "ZA",
"name": "Example Company",
"logoUrl": "https://api.example.com/api/v1/c/example-company/logo/256",
"logoThumbUrl": "https://api.example.com/api/v1/c/example-company/logo/48",
"logoLargeUrl": "https://api.example.com/api/v1/c/example-company/logo/512",
"logoUrlExpiresAt": "2024-01-21T12:00:00Z",
"favicons": {
"favicon16": "https://api.example.com/api/v1/c/example-company/logo/16",
"favicon32": "https://api.example.com/api/v1/c/example-company/logo/32",
"favicon48": "https://api.example.com/api/v1/c/example-company/logo/48",
"appleTouchIcon": "https://api.example.com/api/v1/c/example-company/logo/180",
"android192": "https://api.example.com/api/v1/c/example-company/logo/192",
"android512": "https://api.example.com/api/v1/c/example-company/logo/512"
}
}
}
Received response:
Request failed with error:
Update Company Details
requires authentication
Update the authenticated company's basic details.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"TrackLab\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "TrackLab"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'TrackLab',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab'
payload = {
"name": "TrackLab"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"slug": "example-company",
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-21T12:00:00Z",
"enabled": true,
"defaultCountryIsoCode": "ZA",
"name": "Updated Example Company",
"logoUrl": null,
"logoThumbUrl": null,
"logoLargeUrl": null,
"logoUrlExpiresAt": null,
"favicons": null
}
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/address
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/corrupti/address" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/corrupti/address"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/corrupti/address',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/corrupti/address'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/address
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/aut/address" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"addressString\": \"123 Main St, London SW1A 1AA\",
\"addressLine1\": \"123 Main Street\",
\"city\": \"London\",
\"postCode\": \"SW1A 1AA\",
\"countryIsoCode\": \"GB\",
\"addressLine2\": \"Apt 4B\",
\"neighborhood\": \"Westminster\",
\"locality\": \"Central London\",
\"place\": \"Piccadilly Circus\",
\"district\": \"City of Westminster\",
\"region\": \"Greater London\",
\"location\": {
\"lat\": 51.5074,
\"long\": -0.1278,
\"latitude\": 51.5074,
\"longitude\": -0.1278
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/aut/address"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"addressString": "123 Main St, London SW1A 1AA",
"addressLine1": "123 Main Street",
"city": "London",
"postCode": "SW1A 1AA",
"countryIsoCode": "GB",
"addressLine2": "Apt 4B",
"neighborhood": "Westminster",
"locality": "Central London",
"place": "Piccadilly Circus",
"district": "City of Westminster",
"region": "Greater London",
"location": {
"lat": 51.5074,
"long": -0.1278,
"latitude": 51.5074,
"longitude": -0.1278
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/aut/address',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'addressString' => '123 Main St, London SW1A 1AA',
'addressLine1' => '123 Main Street',
'city' => 'London',
'postCode' => 'SW1A 1AA',
'countryIsoCode' => 'GB',
'addressLine2' => 'Apt 4B',
'neighborhood' => 'Westminster',
'locality' => 'Central London',
'place' => 'Piccadilly Circus',
'district' => 'City of Westminster',
'region' => 'Greater London',
'location' => [
'lat' => 51.5074,
'long' => -0.1278,
'latitude' => 51.5074,
'longitude' => -0.1278,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/aut/address'
payload = {
"addressString": "123 Main St, London SW1A 1AA",
"addressLine1": "123 Main Street",
"city": "London",
"postCode": "SW1A 1AA",
"countryIsoCode": "GB",
"addressLine2": "Apt 4B",
"neighborhood": "Westminster",
"locality": "Central London",
"place": "Piccadilly Circus",
"district": "City of Westminster",
"region": "Greater London",
"location": {
"lat": 51.5074,
"long": -0.1278,
"latitude": 51.5074,
"longitude": -0.1278
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Upload or replace the authenticated company's logo.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/logo" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"file\": \"veritatis\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/logo"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"file": "veritatis"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/logo',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'file' => 'veritatis',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/logo'
payload = {
"file": "veritatis"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Get the authenticated company's logo in the requested format.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/logo/magnam" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/logo/magnam"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/logo/magnam',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/logo/magnam'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Delete the authenticated company's logo.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/logo" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/logo"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/logo',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/logo'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Company User Management
GET api/v1/c/{company_slug}/user
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/omnis/user" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/omnis/user"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/omnis/user',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/omnis/user'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
},
{
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
]
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/user
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/et/user" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"admin@example.com\",
\"firstName\": \"John\",
\"lastName\": \"Doe\",
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1234567890\",
\"role\": \"user\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/et/user"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "admin@example.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "user"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/et/user',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'admin@example.com',
'firstName' => 'John',
'lastName' => 'Doe',
'countryIsoCode' => 'US',
'phoneNumber' => '+1234567890',
'role' => 'user',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/et/user'
payload = {
"email": "admin@example.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "user"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Example response (422):
{
"message": "The email has already been taken."
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/user/role-uuids
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/non/user/role-uuids" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/non/user/role-uuids"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/non/user/role-uuids',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/non/user/role-uuids'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
"550e8400-e29b-41d4-a716-446655440000",
"7d793789-c8b3-4687-9287-c1e4c9c4b87b"
]
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/user/{user_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user\": \"a8e7bb49-aa3c-3c71-9cff-b08a3252d1ed\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user": "a8e7bb49-aa3c-3c71-9cff-b08a3252d1ed"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user' => 'a8e7bb49-aa3c-3c71-9cff-b08a3252d1ed',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
payload = {
"user": "a8e7bb49-aa3c-3c71-9cff-b08a3252d1ed"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
PATCH api/v1/c/{company_slug}/user/{user_uuid}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user\": \"d18f393a-5c44-345a-beff-d66e4a9d393c\",
\"email\": \"john.doe@example.com\",
\"firstName\": \"John\",
\"lastName\": \"Doe\",
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1234567890\",
\"role\": \"admin\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user": "d18f393a-5c44-345a-beff-d66e4a9d393c",
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "admin"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user' => 'd18f393a-5c44-345a-beff-d66e4a9d393c',
'email' => 'john.doe@example.com',
'firstName' => 'John',
'lastName' => 'Doe',
'countryIsoCode' => 'US',
'phoneNumber' => '+1234567890',
'role' => 'admin',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
payload = {
"user": "d18f393a-5c44-345a-beff-d66e4a9d393c",
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "admin"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/user/{user_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user\": \"c9d947b1-9e6b-36ee-9540-0ba8a349d21e\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user": "c9d947b1-9e6b-36ee-9540-0ba8a349d21e"
};
fetch(url, {
method: "DELETE",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user' => 'c9d947b1-9e6b-36ee-9540-0ba8a349d21e',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
payload = {
"user": "c9d947b1-9e6b-36ee-9540-0ba8a349d21e"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true
}
Received response:
Request failed with error:
PATCH api/v1/c/{company_slug}/user/{user_uuid}/disable
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/disable" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user\": \"13460f35-347e-3bd9-8d21-71f506526333\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/disable"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user": "13460f35-347e-3bd9-8d21-71f506526333"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/disable',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user' => '13460f35-347e-3bd9-8d21-71f506526333',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/disable'
payload = {
"user": "13460f35-347e-3bd9-8d21-71f506526333"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
PATCH api/v1/c/{company_slug}/user/{user_uuid}/enable
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/enable" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user\": \"b21a8f07-1adc-3526-8408-e27d7660a700\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/enable"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user": "b21a8f07-1adc-3526-8408-e27d7660a700"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/enable',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user' => 'b21a8f07-1adc-3526-8408-e27d7660a700',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/enable'
payload = {
"user": "b21a8f07-1adc-3526-8408-e27d7660a700"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
Update User Profile Picture
requires authentication
Upload or replace a user's profile picture.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/phpugsv2egs315qcuG4hRx" const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'file',
'contents' => fopen('/tmp/phpugsv2egs315qcuG4hRx', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture'
files = {
'file': open('/tmp/phpugsv2egs315qcuG4hRx', 'rb')
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
Get User Profile Picture
requires authentication
Retrieve a user's profile picture.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/thumbnail" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/thumbnail"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/thumbnail',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/thumbnail'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Bulk Upload Users
requires authentication
Upload a CSV file to create multiple users at once. CSV must have headers: email,firstName,lastName,roleSlug,phoneNumber
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/user/bulk" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/php2j65kcqemuc47U1cjnr" const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/user/bulk"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/user/bulk',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'file',
'contents' => fopen('/tmp/php2j65kcqemuc47U1cjnr', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/user/bulk'
files = {
'file': open('/tmp/php2j65kcqemuc47U1cjnr', 'rb')
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Example response (200):
{
"data": {
"total": 10,
"created": 8,
"skipped": 1,
"errors": 1,
"results": [
{
"email": "john@example.com",
"status": "created"
},
{
"email": "existing@example.com",
"status": "skipped",
"reason": "User already exists"
}
]
}
}
Received response:
Request failed with error:
Document Types
Get Document Types
requires authentication
Retrieve all available document types.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/document" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/document"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/document',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/document'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "unknown",
"name": "unknown",
"documentSectionTypeSlug": null,
"documentFormatTypeSlug": null
},
{
"slug": "unknown",
"name": "unknown",
"documentSectionTypeSlug": null,
"documentFormatTypeSlug": null
}
]
}
Received response:
Request failed with error:
Get Document Format Types
requires authentication
Retrieve all available document format types.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/document/format" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/document/format"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/document/format',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/document/format'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "unknown",
"name": "unknown",
"description": ""
},
{
"slug": "unknown",
"name": "unknown",
"description": ""
}
]
}
Received response:
Request failed with error:
Get Document Section Types
requires authentication
Retrieve all available document section types.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/document/section" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/document/section"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/document/section',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/document/section'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "unknown",
"name": "unknown",
"description": ""
},
{
"slug": "unknown",
"name": "unknown",
"description": ""
}
]
}
Received response:
Request failed with error:
Documents
Get Public Document
Retrieve a publicly shared document using its UUID. This endpoint is publicly accessible without authentication.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/open-documents/4f1b6eb2-9e4a-3efc-a892-afec3de63f6e/pdf" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/open-documents/4f1b6eb2-9e4a-3efc-a892-afec3de63f6e/pdf"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/open-documents/4f1b6eb2-9e4a-3efc-a892-afec3de63f6e/pdf',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/open-documents/4f1b6eb2-9e4a-3efc-a892-afec3de63f6e/pdf'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
binary The document file
Example response (404):
{
"message": "Document not found"
}
Received response:
Request failed with error:
Endpoints
Return an empty response simply to trigger the storage of the CSRF cookie in the browser.
requires authentication
Authenticate the request for channel access.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/broadcasting/auth" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/broadcasting/auth"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/broadcasting/auth',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/broadcasting/auth'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-rules
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/deserunt/automation-rules" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/deserunt/automation-rules"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/deserunt/automation-rules',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/deserunt/automation-rules'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation-rules
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/at/automation-rules" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-solar\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440101\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440102\",
\"status\": \"enabled\",
\"name\": \"High Wind Stow Rule\",
\"description\": \"Stows trackers when wind speed exceeds threshold.\",
\"cooldownMinutes\": 15,
\"autoClear\": true,
\"clearAfterSeconds\": 300,
\"evaluationPeriodSeconds\": 60,
\"evaluationCountThreshold\": 3
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/at/automation-rules"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440101",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440102",
"status": "enabled",
"name": "High Wind Stow Rule",
"description": "Stows trackers when wind speed exceeds threshold.",
"cooldownMinutes": 15,
"autoClear": true,
"clearAfterSeconds": 300,
"evaluationPeriodSeconds": 60,
"evaluationCountThreshold": 3
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/at/automation-rules',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-solar',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440101',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440102',
'status' => 'enabled',
'name' => 'High Wind Stow Rule',
'description' => 'Stows trackers when wind speed exceeds threshold.',
'cooldownMinutes' => 15,
'autoClear' => true,
'clearAfterSeconds' => 300,
'evaluationPeriodSeconds' => 60,
'evaluationCountThreshold' => 3,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/at/automation-rules'
payload = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440101",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440102",
"status": "enabled",
"name": "High Wind Stow Rule",
"description": "Stows trackers when wind speed exceeds threshold.",
"cooldownMinutes": 15,
"autoClear": true,
"clearAfterSeconds": 300,
"evaluationPeriodSeconds": 60,
"evaluationCountThreshold": 3
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-rules/{automationRule_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/47502e2b-4ffe-3a10-b16d-d676f89f6c53" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/47502e2b-4ffe-3a10-b16d-d676f89f6c53"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/47502e2b-4ffe-3a10-b16d-d676f89f6c53',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/47502e2b-4ffe-3a10-b16d-d676f89f6c53'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/automation-rules/{automationRule_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/ac47c42a-b043-3453-acce-5da53f523046" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"disabled\",
\"name\": \"High Wind Stow Rule\",
\"description\": \"Updated description for wind stow rule.\",
\"cooldownMinutes\": 30,
\"autoClear\": true,
\"clearAfterSeconds\": 600,
\"evaluationPeriodSeconds\": 120,
\"evaluationCountThreshold\": 2
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/ac47c42a-b043-3453-acce-5da53f523046"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "disabled",
"name": "High Wind Stow Rule",
"description": "Updated description for wind stow rule.",
"cooldownMinutes": 30,
"autoClear": true,
"clearAfterSeconds": 600,
"evaluationPeriodSeconds": 120,
"evaluationCountThreshold": 2
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/ac47c42a-b043-3453-acce-5da53f523046',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'disabled',
'name' => 'High Wind Stow Rule',
'description' => 'Updated description for wind stow rule.',
'cooldownMinutes' => 30,
'autoClear' => true,
'clearAfterSeconds' => 600,
'evaluationPeriodSeconds' => 120,
'evaluationCountThreshold' => 2,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/ac47c42a-b043-3453-acce-5da53f523046'
payload = {
"status": "disabled",
"name": "High Wind Stow Rule",
"description": "Updated description for wind stow rule.",
"cooldownMinutes": 30,
"autoClear": true,
"clearAfterSeconds": 600,
"evaluationPeriodSeconds": 120,
"evaluationCountThreshold": 2
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/automation-rules/{automationRule_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/793e98b6-3cf2-3bb0-b6b3-b00682563920" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/793e98b6-3cf2-3bb0-b6b3-b00682563920"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/793e98b6-3cf2-3bb0-b6b3-b00682563920',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-rules/793e98b6-3cf2-3bb0-b6b3-b00682563920'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-webhook-sources
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/amet/automation-webhook-sources" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/amet/automation-webhook-sources"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/amet/automation-webhook-sources',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/amet/automation-webhook-sources'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation-webhook-sources
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/et/automation-webhook-sources" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Farm Weather Provider\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440020\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/et/automation-webhook-sources"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Farm Weather Provider",
"farmUuid": "550e8400-e29b-41d4-a716-446655440020"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/et/automation-webhook-sources',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Farm Weather Provider',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440020',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/et/automation-webhook-sources'
payload = {
"name": "Farm Weather Provider",
"farmUuid": "550e8400-e29b-41d4-a716-446655440020"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-webhook-sources/{automationInboundWebhookSource_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/2c5ccbd0-ef65-3704-bff1-da1fa4e32bff" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/2c5ccbd0-ef65-3704-bff1-da1fa4e32bff"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/2c5ccbd0-ef65-3704-bff1-da1fa4e32bff',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/2c5ccbd0-ef65-3704-bff1-da1fa4e32bff'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/automation-webhook-sources/{automationInboundWebhookSource_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/1bd4f785-ca66-349a-892f-0444e61b3122" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/1bd4f785-ca66-349a-892f-0444e61b3122"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/1bd4f785-ca66-349a-892f-0444e61b3122',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/1bd4f785-ca66-349a-892f-0444e61b3122'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation-webhook-sources/{automationInboundWebhookSource_uuid}/rotate
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/cebc0336-1d25-3643-a38c-5b4d9a1f73d3/rotate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/cebc0336-1d25-3643-a38c-5b4d9a1f73d3/rotate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/cebc0336-1d25-3643-a38c-5b4d9a1f73d3/rotate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-webhook-sources/cebc0336-1d25-3643-a38c-5b4d9a1f73d3/rotate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-events
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/pariatur/automation-events" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/pariatur/automation-events"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/pariatur/automation-events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/pariatur/automation-events'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-events/{automationEvent_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation-events/manual
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/facilis/automation-events/manual" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"emergency_stow\",
\"payload\": {
\"reason\": \"high_wind\",
\"speed\": 75
},
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440002\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/facilis/automation-events/manual"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "emergency_stow",
"payload": {
"reason": "high_wind",
"speed": 75
},
"collectorUuid": "550e8400-e29b-41d4-a716-446655440001",
"farmUuid": "550e8400-e29b-41d4-a716-446655440002"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/facilis/automation-events/manual',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'emergency_stow',
'payload' => [
'reason' => 'high_wind',
'speed' => 75,
],
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440001',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440002',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/facilis/automation-events/manual'
payload = {
"name": "emergency_stow",
"payload": {
"reason": "high_wind",
"speed": 75
},
"collectorUuid": "550e8400-e29b-41d4-a716-446655440001",
"farmUuid": "550e8400-e29b-41d4-a716-446655440002"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-executions
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/beatae/automation-executions" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/beatae/automation-executions"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/beatae/automation-executions',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/beatae/automation-executions'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation-executions/{automationExecution_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation-executions/caca757f-1886-3529-892c-fa225b06d760" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation-executions/caca757f-1886-3529-892c-fa225b06d760"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation-executions/caca757f-1886-3529-892c-fa225b06d760',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation-executions/caca757f-1886-3529-892c-fa225b06d760'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/fire-event
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/molestiae/automation/test/fire-event" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"manual_stow_triggered\",
\"payload\": {
\"reason\": \"high_wind\",
\"windSpeed\": 21.6
},
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440040\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440041\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/molestiae/automation/test/fire-event"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "manual_stow_triggered",
"payload": {
"reason": "high_wind",
"windSpeed": 21.6
},
"farmUuid": "550e8400-e29b-41d4-a716-446655440040",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440041"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/molestiae/automation/test/fire-event',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'manual_stow_triggered',
'payload' => [
'reason' => 'high_wind',
'windSpeed' => 21.6,
],
'farmUuid' => '550e8400-e29b-41d4-a716-446655440040',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440041',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/molestiae/automation/test/fire-event'
payload = {
"name": "manual_stow_triggered",
"payload": {
"reason": "high_wind",
"windSpeed": 21.6
},
"farmUuid": "550e8400-e29b-41d4-a716-446655440040",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440041"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/dry-run-match
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/mollitia/automation/test/dry-run-match" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"ruleUuid\": \"550e8400-e29b-41d4-a716-446655440030\",
\"eventPayload\": {
\"eventName\": \"wind_alert\",
\"speed\": 72.4,
\"unit\": \"kmh\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/mollitia/automation/test/dry-run-match"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ruleUuid": "550e8400-e29b-41d4-a716-446655440030",
"eventPayload": {
"eventName": "wind_alert",
"speed": 72.4,
"unit": "kmh"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/mollitia/automation/test/dry-run-match',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'ruleUuid' => '550e8400-e29b-41d4-a716-446655440030',
'eventPayload' => [
'eventName' => 'wind_alert',
'speed' => 72.4,
'unit' => 'kmh',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/mollitia/automation/test/dry-run-match'
payload = {
"ruleUuid": "550e8400-e29b-41d4-a716-446655440030",
"eventPayload": {
"eventName": "wind_alert",
"speed": 72.4,
"unit": "kmh"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/preview-template
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/ea/automation/test/preview-template" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"template\": \"Alert: {{ collector.name }} exceeded {{ threshold }}.\",
\"context\": {
\"collector\": {
\"name\": \"NCU-12\"
},
\"threshold\": 85
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/ea/automation/test/preview-template"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"template": "Alert: {{ collector.name }} exceeded {{ threshold }}.",
"context": {
"collector": {
"name": "NCU-12"
},
"threshold": 85
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/ea/automation/test/preview-template',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'template' => 'Alert: {{ collector.name }} exceeded {{ threshold }}.',
'context' => [
'collector' => [
'name' => 'NCU-12',
],
'threshold' => 85,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/ea/automation/test/preview-template'
payload = {
"template": "Alert: {{ collector.name }} exceeded {{ threshold }}.",
"context": {
"collector": {
"name": "NCU-12"
},
"threshold": 85
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/send-notification
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/sed/automation/test/send-notification" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationPolicyUuid\": \"550e8400-e29b-41d4-a716-446655440050\",
\"recipientEmail\": \"alerts@example.com\",
\"context\": {
\"collectorName\": \"NCU-5\",
\"alarm\": \"overheat\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/sed/automation/test/send-notification"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationPolicyUuid": "550e8400-e29b-41d4-a716-446655440050",
"recipientEmail": "alerts@example.com",
"context": {
"collectorName": "NCU-5",
"alarm": "overheat"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/sed/automation/test/send-notification',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationPolicyUuid' => '550e8400-e29b-41d4-a716-446655440050',
'recipientEmail' => 'alerts@example.com',
'context' => [
'collectorName' => 'NCU-5',
'alarm' => 'overheat',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/sed/automation/test/send-notification'
payload = {
"notificationPolicyUuid": "550e8400-e29b-41d4-a716-446655440050",
"recipientEmail": "alerts@example.com",
"context": {
"collectorName": "NCU-5",
"alarm": "overheat"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation/test/webhook-endpoints
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/laboriosam/automation/test/webhook-endpoints" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/laboriosam/automation/test/webhook-endpoints"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/laboriosam/automation/test/webhook-endpoints',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/laboriosam/automation/test/webhook-endpoints'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/webhook-endpoints
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/ducimus/automation/test/webhook-endpoints" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"weather-station-test-endpoint\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/ducimus/automation/test/webhook-endpoints"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "weather-station-test-endpoint"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/ducimus/automation/test/webhook-endpoints',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'weather-station-test-endpoint',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/ducimus/automation/test/webhook-endpoints'
payload = {
"name": "weather-station-test-endpoint"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/1af33b09-003c-3eab-ba81-018126292856" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/1af33b09-003c-3eab-ba81-018126292856"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/1af33b09-003c-3eab-ba81-018126292856',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/1af33b09-003c-3eab-ba81-018126292856'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/be84b63c-dd87-3eda-b569-88ebc375cca6" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/be84b63c-dd87-3eda-b569-88ebc375cca6"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"enabled": true
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/be84b63c-dd87-3eda-b569-88ebc375cca6',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/be84b63c-dd87-3eda-b569-88ebc375cca6'
payload = {
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/rotate
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/914e15d4-6c65-3d69-a161-cc140c8d0332/rotate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/914e15d4-6c65-3d69-a161-cc140c8d0332/rotate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/914e15d4-6c65-3d69-a161-cc140c8d0332/rotate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/914e15d4-6c65-3d69-a161-cc140c8d0332/rotate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/5e44c655-ff32-3871-b346-8e4a5e35adaf" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/5e44c655-ff32-3871-b346-8e4a5e35adaf"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/5e44c655-ff32-3871-b346-8e4a5e35adaf',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/5e44c655-ff32-3871-b346-8e4a5e35adaf'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/events
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/8f09bdbc-ea8e-3276-a213-88db58ad1169/events?perPage=25&page=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/8f09bdbc-ea8e-3276-a213-88db58ad1169/events"
);
const params = {
"perPage": "25",
"page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/8f09bdbc-ea8e-3276-a213-88db58ad1169/events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'perPage' => '25',
'page' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/8f09bdbc-ea8e-3276-a213-88db58ad1169/events'
params = {
'perPage': '25',
'page': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/events/latest
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/3fdd9be7-0482-36cf-a114-9c3119a30f1c/events/latest" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/3fdd9be7-0482-36cf-a114-9c3119a30f1c/events/latest"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/3fdd9be7-0482-36cf-a114-9c3119a30f1c/events/latest',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/3fdd9be7-0482-36cf-a114-9c3119a30f1c/events/latest'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/events
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/cd571fe7-5e2c-3af9-a133-688dd983037c/events" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/cd571fe7-5e2c-3af9-a133-688dd983037c/events"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/cd571fe7-5e2c-3af9-a133-688dd983037c/events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-endpoints/cd571fe7-5e2c-3af9-a133-688dd983037c/events'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/automation/test/webhook-events/{automationTestWebhookEvent_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/91e705ae-f385-375a-a367-24f678ab3937" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/91e705ae-f385-375a-a367-24f678ab3937"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/91e705ae-f385-375a-a367-24f678ab3937',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/91e705ae-f385-375a-a367-24f678ab3937'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/automation/test/webhook-events/{automationTestWebhookEvent_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/40d59a83-9407-3d2f-b1ba-5c8d87455402" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/40d59a83-9407-3d2f-b1ba-5c8d87455402"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/40d59a83-9407-3d2f-b1ba-5c8d87455402',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/automation/test/webhook-events/40d59a83-9407-3d2f-b1ba-5c8d87455402'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/automation/test/webhook-inbox/setup
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/vero/automation/test/webhook-inbox/setup" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Automation Test Inbox\",
\"resetEvents\": false,
\"rotateSecret\": true,
\"notificationChannelUuid\": \"550e8400-e29b-41d4-a716-446655440010\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/vero/automation/test/webhook-inbox/setup"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Automation Test Inbox",
"resetEvents": false,
"rotateSecret": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440010"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/vero/automation/test/webhook-inbox/setup',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Automation Test Inbox',
'resetEvents' => false,
'rotateSecret' => true,
'notificationChannelUuid' => '550e8400-e29b-41d4-a716-446655440010',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/vero/automation/test/webhook-inbox/setup'
payload = {
"name": "Automation Test Inbox",
"resetEvents": false,
"rotateSecret": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440010"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List failure logs for a collector.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Report a new failure for a collector.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"failureTypeSlug\": \"hardware_failure\",
\"description\": \"Motor stuck\",
\"severity\": \"high\",
\"detectedAt\": \"2026-02-14T10:00:00Z\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"failureTypeSlug": "hardware_failure",
"description": "Motor stuck",
"severity": "high",
"detectedAt": "2026-02-14T10:00:00Z"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'failureTypeSlug' => 'hardware_failure',
'description' => 'Motor stuck',
'severity' => 'high',
'detectedAt' => '2026-02-14T10:00:00Z',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/failures'
payload = {
"failureTypeSlug": "hardware_failure",
"description": "Motor stuck",
"severity": "high",
"detectedAt": "2026-02-14T10:00:00Z"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Create a new collector for the company
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Main Collector\",
\"description\": \"Collector for north field\",
\"locationJson\": {
\"latitude\": 51.509865,
\"longitude\": -0.118092
},
\"collectorTypeSlug\": \"ncu\",
\"parentUuid\": \"550e8400-e29b-41d4-a716-446655440000\",
\"serial\": \"COL-001-2024\",
\"farmSectionUuid\": \"550e8400-e29b-41d4-a716-446655440123\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Main Collector",
"description": "Collector for north field",
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"collectorTypeSlug": "ncu",
"parentUuid": "550e8400-e29b-41d4-a716-446655440000",
"serial": "COL-001-2024",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Main Collector',
'description' => 'Collector for north field',
'locationJson' => [
'latitude' => 51.509865,
'longitude' => -0.118092,
],
'collectorTypeSlug' => 'ncu',
'parentUuid' => '550e8400-e29b-41d4-a716-446655440000',
'serial' => 'COL-001-2024',
'farmSectionUuid' => '550e8400-e29b-41d4-a716-446655440123',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector'
payload = {
"name": "Main Collector",
"description": "Collector for north field",
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"collectorTypeSlug": "ncu",
"parentUuid": "550e8400-e29b-41d4-a716-446655440000",
"serial": "COL-001-2024",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Main Collector",
"description": "Collector for north field",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "COL-001-2024",
"location": {
"lat": 51.509865,
"lng": -0.118092
},
"currentJunction": {
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123",
"row": 0,
"column": 0
},
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The collector name field is required."
],
"locationJson.latitude": [
"The latitude must be between -90 and 90 degrees"
]
}
}
Received response:
Request failed with error:
Get All Collector Parameters
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/parameter" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/parameter"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/parameter',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/parameter'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get All Collector Measurement Availability
requires authentication
Returns measurement availability (min/max timestamps) for all collectors in the company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"<collector-uuid>": {
"<measurement-type-slug>": {
"collectorUuid": "uuid-here",
"collectorMeasurementTypeSlug": "ncu-cpu-temperature",
"minTimestamp": "2025-11-12T22:40:36Z",
"maxTimestamp": "2025-12-14T22:13:05Z",
"dataTypeSlug": "numeric",
"dataTypeName": "Numeric",
"dataTypeIsNumeric": true
}
}
}
}
Received response:
Request failed with error:
Get Collector Measurement Availability Grouped
requires authentication
Returns measurement availability aggregated by measurement type across all collectors.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available/group" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available/group"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available/group',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/measurement/available/group'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"<measurement-type-slug>": {
"collectorMeasurementTypeSlug": "ncu-cpu-temperature",
"minTimestamp": "2025-11-12T22:40:36Z",
"maxTimestamp": "2025-12-14T22:13:05Z"
}
}
}
Received response:
Request failed with error:
Get All Collectors
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector?page=1&perPage=15&type=ncu&parent_uuid=550e8400-e29b-41d4-a716-446655440000&format=paginated" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector"
);
const params = {
"page": "1",
"perPage": "15",
"type": "ncu",
"parent_uuid": "550e8400-e29b-41d4-a716-446655440000",
"format": "paginated",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '15',
'type' => 'ncu',
'parent_uuid' => '550e8400-e29b-41d4-a716-446655440000',
'format' => 'paginated',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector'
params = {
'page': '1',
'perPage': '15',
'type': 'ncu',
'parent_uuid': '550e8400-e29b-41d4-a716-446655440000',
'format': 'paginated',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
},
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
}
]
}
Example response (200):
{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Main Collector",
"description": "Primary collector",
"type": "NCU",
"typeId": 1,
"parentUuid": null,
"childrenUuids": [
"550e8400-e29b-41d4-a716-446655440001"
],
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"serial": "NCU-001",
"location": {
"lat": 51.509865,
"lng": -0.118092
}
}
],
"links": {
"first": "http://example.com/api/company/tracklab/collector?page=1",
"last": "http://example.com/api/company/tracklab/collector?page=5",
"prev": null,
"next": "http://example.com/api/company/tracklab/collector?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://example.com/api/company/tracklab/collector",
"perPage": 15,
"to": 15,
"total": 75
}
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the collector
createdAt
string
The creation timestamp (ISO8601)
updatedAt
string
The last update timestamp (ISO8601)
enabled
boolean
Whether the collector is enabled
companySlug
string
The slug of the company this collector belongs to
farmUuid
string
The UUID of the farm this collector belongs to
collectorTypeSlug
string
The slug of the collector type
type
string
The type of collector (NCU or TCU)
parentUuid
string|null
The UUID of the parent collector (for TCUs)
childrenUuids
string[]
Array of child collector UUIDs (for NCUs)
serial
string
The serial number of the collector
name
string
The name of the collector
description
string|null
The description of the collector
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
isDecommissioned
boolean
Whether the collector is decommissioned
decommissionedAt
string|null
The decommission timestamp (ISO8601)
decommissionReason
string|null
The reason for decommission
currentTracker
object|null
The current tracker placement
uuid
string
The tracker UUID
farmSectionUuid
string|null
The farm section UUID
row
integer
Row position in layout
column
integer
Column position in layout
status
object|null
The current lifecycle status
slug
string
The status type slug
name
string
The status type display name
hardwareVersion
object|null
The hardware version type
slug
string
The hardware version slug
name
string
The hardware version display name
version
string|null
The hardware version string
currentFirmware
object|null
The current firmware information
slug
string
The firmware type slug
name
string
The firmware type display name
version
string|null
The firmware version string
manufacturedAt
string|null
The manufacture timestamp (ISO8601)
deployedAt
string|null
The deployment timestamp (ISO8601)
retiredAt
string|null
The retirement timestamp (ISO8601)
Update Collector
requires authentication
Update an existing collector's details.
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Updated Field Collector\",
\"description\": \"Updated collector description\",
\"locationJson\": {
\"latitude\": 51.509865,
\"longitude\": -0.118092
},
\"parentUuid\": \"550e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Updated Field Collector",
"description": "Updated collector description",
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"parentUuid": "550e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Updated Field Collector',
'description' => 'Updated collector description',
'locationJson' => [
'latitude' => 51.509865,
'longitude' => -0.118092,
],
'parentUuid' => '550e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa'
payload = {
"name": "Updated Field Collector",
"description": "Updated collector description",
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"parentUuid": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
}
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the collector
createdAt
string
The creation timestamp (ISO8601)
updatedAt
string
The last update timestamp (ISO8601)
enabled
boolean
Whether the collector is enabled
companySlug
string
The slug of the company this collector belongs to
farmUuid
string
The UUID of the farm this collector belongs to
collectorTypeSlug
string
The slug of the collector type
type
string
The type of collector (NCU or TCU)
parentUuid
string|null
The UUID of the parent collector (for TCUs)
childrenUuids
string[]
Array of child collector UUIDs (for NCUs)
serial
string
The serial number of the collector
name
string
The name of the collector
description
string|null
The description of the collector
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
isDecommissioned
boolean
Whether the collector is decommissioned
decommissionedAt
string|null
The decommission timestamp (ISO8601)
decommissionReason
string|null
The reason for decommission
currentTracker
object|null
The current tracker placement
uuid
string
The tracker UUID
farmSectionUuid
string|null
The farm section UUID
row
integer
Row position in layout
column
integer
Column position in layout
status
object|null
The current lifecycle status
slug
string
The status type slug
name
string
The status type display name
hardwareVersion
object|null
The hardware version type
slug
string
The hardware version slug
name
string
The hardware version display name
version
string|null
The hardware version string
currentFirmware
object|null
The current firmware information
slug
string
The firmware type slug
name
string
The firmware type display name
version
string|null
The firmware version string
manufacturedAt
string|null
The manufacture timestamp (ISO8601)
deployedAt
string|null
The deployment timestamp (ISO8601)
retiredAt
string|null
The retirement timestamp (ISO8601)
Get Collector Details
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
}
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the collector
createdAt
string
The creation timestamp (ISO8601)
updatedAt
string
The last update timestamp (ISO8601)
enabled
boolean
Whether the collector is enabled
companySlug
string
The slug of the company this collector belongs to
farmUuid
string
The UUID of the farm this collector belongs to
collectorTypeSlug
string
The slug of the collector type
type
string
The type of collector (NCU or TCU)
parentUuid
string|null
The UUID of the parent collector (for TCUs)
childrenUuids
string[]
Array of child collector UUIDs (for NCUs)
serial
string
The serial number of the collector
name
string
The name of the collector
description
string|null
The description of the collector
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
isDecommissioned
boolean
Whether the collector is decommissioned
decommissionedAt
string|null
The decommission timestamp (ISO8601)
decommissionReason
string|null
The reason for decommission
currentTracker
object|null
The current tracker placement
uuid
string
The tracker UUID
farmSectionUuid
string|null
The farm section UUID
row
integer
Row position in layout
column
integer
Column position in layout
status
object|null
The current lifecycle status
slug
string
The status type slug
name
string
The status type display name
hardwareVersion
object|null
The hardware version type
slug
string
The hardware version slug
name
string
The hardware version display name
version
string|null
The hardware version string
currentFirmware
object|null
The current firmware information
slug
string
The firmware type slug
name
string
The firmware type display name
version
string|null
The firmware version string
manufacturedAt
string|null
The manufacture timestamp (ISO8601)
deployedAt
string|null
The deployment timestamp (ISO8601)
retiredAt
string|null
The retirement timestamp (ISO8601)
Get Child Collectors
requires authentication
Get all TCUs that belong to a specific NCU
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/children?page=1&perPage=15&format=paginated" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/children"
);
const params = {
"page": "1",
"perPage": "15",
"format": "paginated",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/children',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '15',
'format' => 'paginated',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/children'
params = {
'page': '1',
'perPage': '15',
'format': 'paginated',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
},
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
}
]
}
Example response (200):
{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"name": "TCU 1",
"description": "Tracking Control Unit 1",
"type": "TCU",
"typeId": 2,
"parentUuid": "550e8400-e29b-41d4-a716-446655440000",
"childrenUuids": [],
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"serial": "TCU-001",
"location": {
"lat": 51.509865,
"lng": -0.118092
}
}
],
"links": {...},
"meta": {...}
}
Example response (400):
{
"error": "Only NCU collectors can have children"
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the collector
createdAt
string
The creation timestamp (ISO8601)
updatedAt
string
The last update timestamp (ISO8601)
enabled
boolean
Whether the collector is enabled
companySlug
string
The slug of the company this collector belongs to
farmUuid
string
The UUID of the farm this collector belongs to
collectorTypeSlug
string
The slug of the collector type
type
string
The type of collector (NCU or TCU)
parentUuid
string|null
The UUID of the parent collector (for TCUs)
childrenUuids
string[]
Array of child collector UUIDs (for NCUs)
serial
string
The serial number of the collector
name
string
The name of the collector
description
string|null
The description of the collector
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
isDecommissioned
boolean
Whether the collector is decommissioned
decommissionedAt
string|null
The decommission timestamp (ISO8601)
decommissionReason
string|null
The reason for decommission
currentTracker
object|null
The current tracker placement
uuid
string
The tracker UUID
farmSectionUuid
string|null
The farm section UUID
row
integer
Row position in layout
column
integer
Column position in layout
status
object|null
The current lifecycle status
slug
string
The status type slug
name
string
The status type display name
hardwareVersion
object|null
The hardware version type
slug
string
The hardware version slug
name
string
The hardware version display name
version
string|null
The hardware version string
currentFirmware
object|null
The current firmware information
slug
string
The firmware type slug
name
string
The firmware type display name
version
string|null
The firmware version string
manufacturedAt
string|null
The manufacture timestamp (ISO8601)
deployedAt
string|null
The deployment timestamp (ISO8601)
retiredAt
string|null
The retirement timestamp (ISO8601)
Update Collector Parent
requires authentication
Update the parent NCU of a TCU collector
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parent" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"parentUuid\": \"550e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parent"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"parentUuid": "550e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parent',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'parentUuid' => '550e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parent'
payload = {
"parentUuid": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"name": "TCU 1",
"description": "Tracking Control Unit 1",
"type": "TCU",
"typeId": 2,
"parentUuid": "550e8400-e29b-41d4-a716-446655440000"
}
}
Example response (400):
{
"error": "Only TCU collectors can have a parent"
}
Received response:
Request failed with error:
Get Collector Parameters
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameter" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameter"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameter',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameter'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get Collector Measurement Availability
requires authentication
Returns measurement availability (min/max timestamps) for a single collector.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/measurement/available" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/measurement/available"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/measurement/available',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/measurement/available'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"<measurement-type-slug>": {
"collectorUuid": "uuid-here",
"collectorMeasurementTypeSlug": "ncu-cpu-temperature",
"minTimestamp": "2025-11-12T22:40:36Z",
"maxTimestamp": "2025-12-14T22:13:05Z",
"dataTypeSlug": "numeric",
"dataTypeName": "Numeric",
"dataTypeIsNumeric": true
}
}
}
Received response:
Request failed with error:
Get Collector Lifecycle Timeline
requires authentication
Returns a chronological timeline of lifecycle events for a collector, including status changes, farm placements, handovers, and firmware changes.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update Collector Parameters
requires authentication
Update one or more parameters for a specific collector. This will update the local parameter values and send commands to the device to apply the changes.
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameters" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"parameters\": []
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameters"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"parameters": []
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameters',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'parameters' => [],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/parameters'
payload = {
"parameters": []
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Initiate Firmware Update
requires authentication
Assign a firmware version to a collector, record the assignment in the firmware history, and send the update command to the device via MQTT.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware-update" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"firmwareTypeSlug\": \"firmware-v1.2.3\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware-update"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"firmwareTypeSlug": "firmware-v1.2.3"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware-update',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'firmwareTypeSlug' => 'firmware-v1.2.3',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware-update'
payload = {
"firmwareTypeSlug": "firmware-v1.2.3"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Broadcast Parameter Update
requires authentication
Send a single MQTT broadcast command to all child TCUs of an NCU, while storing parameters locally per-child-TCU.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"parameters\": []
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"parameters": []
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'parameters' => [],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters'
payload = {
"parameters": []
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Move Collector to Farm
requires authentication
Move a collector to a different farm. This creates a new entry in the collector_farm_junctions table and deactivates the previous junction.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/farm" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"farmSectionUuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"row\": 3,
\"column\": 5,
\"widthM\": \"6.5\",
\"heightM\": \"2.4\",
\"angleDeg\": \"12.5\",
\"copyCollectorLocation\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/farm"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"row": 3,
"column": 5,
"widthM": "6.5",
"heightM": "2.4",
"angleDeg": "12.5",
"copyCollectorLocation": false
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/farm',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'farmSectionUuid' => '550e8400-e29b-41d4-a716-446655440001',
'row' => 3,
'column' => 5,
'widthM' => '6.5',
'heightM' => '2.4',
'angleDeg' => '12.5',
'copyCollectorLocation' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/farm'
payload = {
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"row": 3,
"column": 5,
"widthM": "6.5",
"heightM": "2.4",
"angleDeg": "12.5",
"copyCollectorLocation": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"message": "Collector successfully moved to farm",
"data": {
"collector": { ... },
"newFarm": { "uuid": "...", "name": "..." },
"tracker": { ... }
}
}
Example response (404):
{
"error": "Target farm not found or does not belong to this company"
}
Received response:
Request failed with error:
Decommission a Collector
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/decommission" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"reason\": \"End of life — hardware fault\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/decommission"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"reason": "End of life — hardware fault"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/decommission',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'reason' => 'End of life — hardware fault',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/decommission'
payload = {
"reason": "End of life — hardware fault"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Recommission a Decommissioned Collector
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/recommission" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/recommission"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/recommission',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/recommission'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Unassign a collector from its current farm.
requires authentication
Moves the collector to the company's unassigned farm/section and transitions its lifecycle status to 'unassigned'. For TCU collectors, the parent link is set to the system Holding NCU. For NCU collectors, the parent link is removed.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unassign" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"reason\": \"Relocated to different site\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unassign"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"reason": "Relocated to different site"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unassign',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'reason' => 'Relocated to different site',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unassign'
payload = {
"reason": "Relocated to different site"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Handover a collector to a replacement collector while preserving tracker identity.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/handover" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"replacementCollectorUuid\": \"550e8400-e29b-41d4-a716-446655440123\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/handover"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"replacementCollectorUuid": "550e8400-e29b-41d4-a716-446655440123"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/handover',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'replacementCollectorUuid' => '550e8400-e29b-41d4-a716-446655440123',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/handover'
payload = {
"replacementCollectorUuid": "550e8400-e29b-41d4-a716-446655440123"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Swap a deployed/active collector with a replacement at the same farm position.
requires authentication
Unassigns the old collector from its farm position and places the replacement collector at the same farm, section, row, and column. The old collector is transitioned to 'unassigned' and the replacement is transitioned to 'deployed'.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/swap" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"replacementCollectorUuid\": \"550e8400-e29b-41d4-a716-446655440123\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/swap"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"replacementCollectorUuid": "550e8400-e29b-41d4-a716-446655440123"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/swap',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'replacementCollectorUuid' => '550e8400-e29b-41d4-a716-446655440123',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/swap'
payload = {
"replacementCollectorUuid": "550e8400-e29b-41d4-a716-446655440123"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Get Current Collector Firmware
requires authentication
Returns the currently assigned firmware for a collector.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get Collector Firmware History
requires authentication
Returns the history of firmware assignments for a collector.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware/history?page=1&perPage=15" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware/history"
);
const params = {
"page": "1",
"perPage": "15",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware/history',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '15',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/firmware/history'
params = {
'page': '1',
'perPage': '15',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Rename a tracker and lock it from automatic collector-name propagation.
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/tracker/a205ee53-a5ce-4ecf-8103-d1ace6488432/name" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Row Tracker A2\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/tracker/a205ee53-a5ce-4ecf-8103-d1ace6488432/name"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Row Tracker A2"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/tracker/a205ee53-a5ce-4ecf-8103-d1ace6488432/name',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Row Tracker A2',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/tracker/a205ee53-a5ce-4ecf-8103-d1ace6488432/name'
payload = {
"name": "North Row Tracker A2"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List all warranties for a collector.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
File a warranty claim against a collector's warranty.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty/claims" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorWarrantyUuid\": \"550e8400-e29b-41d4-a716-446655440060\",
\"description\": \"Actuator failed during normal operation within warranty period.\",
\"coveredByWarranty\": true,
\"cost\": 249.99,
\"rmaRequestUuid\": \"550e8400-e29b-41d4-a716-446655440061\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty/claims"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorWarrantyUuid": "550e8400-e29b-41d4-a716-446655440060",
"description": "Actuator failed during normal operation within warranty period.",
"coveredByWarranty": true,
"cost": 249.99,
"rmaRequestUuid": "550e8400-e29b-41d4-a716-446655440061"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty/claims',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorWarrantyUuid' => '550e8400-e29b-41d4-a716-446655440060',
'description' => 'Actuator failed during normal operation within warranty period.',
'coveredByWarranty' => true,
'cost' => 249.99,
'rmaRequestUuid' => '550e8400-e29b-41d4-a716-446655440061',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/collector/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty/claims'
payload = {
"collectorWarrantyUuid": "550e8400-e29b-41d4-a716-446655440060",
"description": "Actuator failed during normal operation within warranty period.",
"coveredByWarranty": true,
"cost": 249.99,
"rmaRequestUuid": "550e8400-e29b-41d4-a716-446655440061"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List Company Links (Granted)
requires authentication
Returns all company links granted by this company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/links" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/links',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
List Received Company Links
requires authentication
Returns all company links received by this company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/links/received" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/received"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/links/received',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/received'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create Company Link
requires authentication
Creates a new company link with an invite for the receiving company.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/links" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"remoteCompanySlug\": \"acme-corp\",
\"roles\": {
\"companyWide\": [
\"technician\"
],
\"farms\": [
{
\"farmUuid\": \"f4314a78-8e41-368f-86ca-1d5b02d70f6a\",
\"roles\": [
\"external-support\"
]
}
],
\"collectors\": [
{
\"collectorUuid\": \"71a04715-da40-33ce-a232-189424d6d6f9\",
\"roles\": [
\"external-supplier\"
]
}
]
},
\"validUntil\": \"2026-12-31\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"remoteCompanySlug": "acme-corp",
"roles": {
"companyWide": [
"technician"
],
"farms": [
{
"farmUuid": "f4314a78-8e41-368f-86ca-1d5b02d70f6a",
"roles": [
"external-support"
]
}
],
"collectors": [
{
"collectorUuid": "71a04715-da40-33ce-a232-189424d6d6f9",
"roles": [
"external-supplier"
]
}
]
},
"validUntil": "2026-12-31"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/links',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'remoteCompanySlug' => 'acme-corp',
'roles' => [
'companyWide' => [
'technician',
],
'farms' => [
[
'farmUuid' => 'f4314a78-8e41-368f-86ca-1d5b02d70f6a',
'roles' => [
'external-support',
],
],
],
'collectors' => [
[
'collectorUuid' => '71a04715-da40-33ce-a232-189424d6d6f9',
'roles' => [
'external-supplier',
],
],
],
],
'validUntil' => '2026-12-31',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links'
payload = {
"remoteCompanySlug": "acme-corp",
"roles": {
"companyWide": [
"technician"
],
"farms": [
{
"farmUuid": "f4314a78-8e41-368f-86ca-1d5b02d70f6a",
"roles": [
"external-support"
]
}
],
"collectors": [
{
"collectorUuid": "71a04715-da40-33ce-a232-189424d6d6f9",
"roles": [
"external-supplier"
]
}
]
},
"validUntil": "2026-12-31"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Show Company Link
requires authentication
Returns details of a specific company link.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/links/43f95020-2337-35d1-9a5a-cbe1a3fd5d53" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/43f95020-2337-35d1-9a5a-cbe1a3fd5d53"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/links/43f95020-2337-35d1-9a5a-cbe1a3fd5d53',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/43f95020-2337-35d1-9a5a-cbe1a3fd5d53'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update Company Link
requires authentication
Updates a company link status (suspend/reactivate).
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/links/25ba4892-4dcb-37dc-bb8f-1261d2f36b49" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"active\",
\"validUntil\": \"2026-12-31\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/25ba4892-4dcb-37dc-bb8f-1261d2f36b49"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "active",
"validUntil": "2026-12-31"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/links/25ba4892-4dcb-37dc-bb8f-1261d2f36b49',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'active',
'validUntil' => '2026-12-31',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/25ba4892-4dcb-37dc-bb8f-1261d2f36b49'
payload = {
"status": "active",
"validUntil": "2026-12-31"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Unlink (Terminate) Company Link
requires authentication
Terminates a company link. Either company can unlink.
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/links/1007809d-7370-3359-ab07-e5b93750188d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/1007809d-7370-3359-ab07-e5b93750188d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/links/1007809d-7370-3359-ab07-e5b93750188d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/1007809d-7370-3359-ab07-e5b93750188d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Add Company-Wide Role
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/links/bbb6720c-0d9a-3404-9f69-e3ff1fb2eccc/roles" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"roleSlug\": \"user\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/bbb6720c-0d9a-3404-9f69-e3ff1fb2eccc/roles"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"roleSlug": "user"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/links/bbb6720c-0d9a-3404-9f69-e3ff1fb2eccc/roles',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'roleSlug' => 'user',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/bbb6720c-0d9a-3404-9f69-e3ff1fb2eccc/roles'
payload = {
"roleSlug": "user"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove Company-Wide Role
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/links/a33b1796-955d-33f0-86fe-ac3fedc10039/roles/molestias" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/a33b1796-955d-33f0-86fe-ac3fedc10039/roles/molestias"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/links/a33b1796-955d-33f0-86fe-ac3fedc10039/roles/molestias',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/a33b1796-955d-33f0-86fe-ac3fedc10039/roles/molestias'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Add Farm-Level Role
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/links/efdbf07f-6a4f-3ea8-a244-3206f5af660f/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"roleSlug\": \"user\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/efdbf07f-6a4f-3ea8-a244-3206f5af660f/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"roleSlug": "user"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/links/efdbf07f-6a4f-3ea8-a244-3206f5af660f/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'roleSlug' => 'user',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/efdbf07f-6a4f-3ea8-a244-3206f5af660f/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles'
payload = {
"roleSlug": "user"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove Farm-Level Role
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/links/1685528d-c320-3bc3-8647-feef069fa3bb/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles/sit" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/1685528d-c320-3bc3-8647-feef069fa3bb/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles/sit"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/links/1685528d-c320-3bc3-8647-feef069fa3bb/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles/sit',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/1685528d-c320-3bc3-8647-feef069fa3bb/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/roles/sit'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Add Collector-Specific Role
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/links/720d5e90-e94d-38f3-b93c-fe1ca030800c/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"roleSlug\": \"user\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/720d5e90-e94d-38f3-b93c-fe1ca030800c/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"roleSlug": "user"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/links/720d5e90-e94d-38f3-b93c-fe1ca030800c/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'roleSlug' => 'user',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/720d5e90-e94d-38f3-b93c-fe1ca030800c/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles'
payload = {
"roleSlug": "user"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove Collector-Specific Role
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/links/113df914-a49c-3aef-979f-dfc9fbc03a77/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles/vitae" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/links/113df914-a49c-3aef-979f-dfc9fbc03a77/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles/vitae"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/links/113df914-a49c-3aef-979f-dfc9fbc03a77/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles/vitae',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/links/113df914-a49c-3aef-979f-dfc9fbc03a77/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/roles/vitae'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
List Pending Invites
requires authentication
Returns all pending company link invites for this company (as receiving company).
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/link-invites" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/link-invites"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/link-invites',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/link-invites'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Accept Company Link Invite
requires authentication
Accepts a pending company link invite, activating the link.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/link-invites/04300bc1-44ad-3550-9db5-190033241964/accept" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/link-invites/04300bc1-44ad-3550-9db5-190033241964/accept"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/link-invites/04300bc1-44ad-3550-9db5-190033241964/accept',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/link-invites/04300bc1-44ad-3550-9db5-190033241964/accept'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Reject Company Link Invite
requires authentication
Rejects a pending company link invite.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/link-invites/4e2cb1d1-f210-3a52-be64-eb97885b73ab/reject" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/link-invites/4e2cb1d1-f210-3a52-be64-eb97885b73ab/reject"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/link-invites/4e2cb1d1-f210-3a52-be64-eb97885b73ab/reject',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/link-invites/4e2cb1d1-f210-3a52-be64-eb97885b73ab/reject'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/device-groups
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/rerum/device-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/rerum/device-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/rerum/device-groups',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/rerum/device-groups'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/device-groups
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/suscipit/device-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Section A Collectors\",
\"description\": \"All collectors in section A of the farm\",
\"targetFilters\": {
\"deviceModelTypeSlugs\": [
\"ncu-v2\",
\"tcu-v1\"
],
\"farmUuids\": [
\"550e8400-e29b-41d4-a716-446655440000\"
],
\"siteUuids\": [
\"984b3865-4d54-3e6e-9c31-ae1cfdcf39f7\"
],
\"collectorUuids\": [
\"a921fdb8-b8db-3a7e-bad4-6423c5427596\"
],
\"excludeCollectorUuids\": [
\"2bf97750-942b-31ad-a619-c5b456543129\"
]
},
\"collectorUuids\": [
\"288f43cb-6d11-3094-ad33-6c065b233e8f\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/suscipit/device-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Section A Collectors",
"description": "All collectors in section A of the farm",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"siteUuids": [
"984b3865-4d54-3e6e-9c31-ae1cfdcf39f7"
],
"collectorUuids": [
"a921fdb8-b8db-3a7e-bad4-6423c5427596"
],
"excludeCollectorUuids": [
"2bf97750-942b-31ad-a619-c5b456543129"
]
},
"collectorUuids": [
"288f43cb-6d11-3094-ad33-6c065b233e8f"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/suscipit/device-groups',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Section A Collectors',
'description' => 'All collectors in section A of the farm',
'targetFilters' => [
'deviceModelTypeSlugs' => [
'ncu-v2',
'tcu-v1',
],
'farmUuids' => [
'550e8400-e29b-41d4-a716-446655440000',
],
'siteUuids' => [
'984b3865-4d54-3e6e-9c31-ae1cfdcf39f7',
],
'collectorUuids' => [
'a921fdb8-b8db-3a7e-bad4-6423c5427596',
],
'excludeCollectorUuids' => [
'2bf97750-942b-31ad-a619-c5b456543129',
],
],
'collectorUuids' => [
'288f43cb-6d11-3094-ad33-6c065b233e8f',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/suscipit/device-groups'
payload = {
"name": "Section A Collectors",
"description": "All collectors in section A of the farm",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"siteUuids": [
"984b3865-4d54-3e6e-9c31-ae1cfdcf39f7"
],
"collectorUuids": [
"a921fdb8-b8db-3a7e-bad4-6423c5427596"
],
"excludeCollectorUuids": [
"2bf97750-942b-31ad-a619-c5b456543129"
]
},
"collectorUuids": [
"288f43cb-6d11-3094-ad33-6c065b233e8f"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Section A Collectors Updated\",
\"description\": \"Updated collectors in section A\",
\"targetFilters\": {
\"deviceModelTypeSlugs\": [
\"ncu-v2\",
\"tcu-v1\",
\"ncu-v3\"
],
\"farmUuids\": [
\"550e8400-e29b-41d4-a716-446655440000\",
\"550e8400-e29b-41d4-a716-446655440001\"
],
\"siteUuids\": [
\"cbce6330-3a7d-331a-8ad9-322dea2ffb6c\"
],
\"collectorUuids\": [
\"351d3c86-082f-3c98-8775-8bc174d5a208\"
],
\"excludeCollectorUuids\": [
\"16dc09f0-9863-388c-89ea-d5c5ebd6d3f2\"
]
},
\"collectorUuids\": [
\"f49077c5-5af9-3159-b80e-b4dd07ab3710\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Section A Collectors Updated",
"description": "Updated collectors in section A",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1",
"ncu-v3"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"siteUuids": [
"cbce6330-3a7d-331a-8ad9-322dea2ffb6c"
],
"collectorUuids": [
"351d3c86-082f-3c98-8775-8bc174d5a208"
],
"excludeCollectorUuids": [
"16dc09f0-9863-388c-89ea-d5c5ebd6d3f2"
]
},
"collectorUuids": [
"f49077c5-5af9-3159-b80e-b4dd07ab3710"
]
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Section A Collectors Updated',
'description' => 'Updated collectors in section A',
'targetFilters' => [
'deviceModelTypeSlugs' => [
'ncu-v2',
'tcu-v1',
'ncu-v3',
],
'farmUuids' => [
'550e8400-e29b-41d4-a716-446655440000',
'550e8400-e29b-41d4-a716-446655440001',
],
'siteUuids' => [
'cbce6330-3a7d-331a-8ad9-322dea2ffb6c',
],
'collectorUuids' => [
'351d3c86-082f-3c98-8775-8bc174d5a208',
],
'excludeCollectorUuids' => [
'16dc09f0-9863-388c-89ea-d5c5ebd6d3f2',
],
],
'collectorUuids' => [
'f49077c5-5af9-3159-b80e-b4dd07ab3710',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
payload = {
"name": "Section A Collectors Updated",
"description": "Updated collectors in section A",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1",
"ncu-v3"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"siteUuids": [
"cbce6330-3a7d-331a-8ad9-322dea2ffb6c"
],
"collectorUuids": [
"351d3c86-082f-3c98-8775-8bc174d5a208"
],
"excludeCollectorUuids": [
"16dc09f0-9863-388c-89ea-d5c5ebd6d3f2"
]
},
"collectorUuids": [
"f49077c5-5af9-3159-b80e-b4dd07ab3710"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/device-groups/{deviceGroup_uuid}/collectors
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"action\": \"add\",
\"collectorUuids\": [
\"c251451e-23b1-36ea-a18a-fe9fb2f4ced4\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"action": "add",
"collectorUuids": [
"c251451e-23b1-36ea-a18a-fe9fb2f4ced4"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'action' => 'add',
'collectorUuids' => [
'c251451e-23b1-36ea-a18a-fe9fb2f4ced4',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors'
payload = {
"action": "add",
"collectorUuids": [
"c251451e-23b1-36ea-a18a-fe9fb2f4ced4"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/device-models
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/device-models" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-models"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/device-models',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-models'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/device-models
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/device-models" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"NCU v2.0\",
\"slug\": \"ncu-v2\",
\"description\": \"Network Control Unit version 2.0 with enhanced capabilities\",
\"manufacturer\": \"TrackLab\",
\"collectorTypeSlug\": \"ncu\",
\"hardwareVersions\": [
\"fsxglmdifknysknnikzrqlhfq\"
],
\"enabled\": true,
\"orderColumn\": 1
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-models"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "NCU v2.0",
"slug": "ncu-v2",
"description": "Network Control Unit version 2.0 with enhanced capabilities",
"manufacturer": "TrackLab",
"collectorTypeSlug": "ncu",
"hardwareVersions": [
"fsxglmdifknysknnikzrqlhfq"
],
"enabled": true,
"orderColumn": 1
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/device-models',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'NCU v2.0',
'slug' => 'ncu-v2',
'description' => 'Network Control Unit version 2.0 with enhanced capabilities',
'manufacturer' => 'TrackLab',
'collectorTypeSlug' => 'ncu',
'hardwareVersions' => [
'fsxglmdifknysknnikzrqlhfq',
],
'enabled' => true,
'orderColumn' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-models'
payload = {
"name": "NCU v2.0",
"slug": "ncu-v2",
"description": "Network Control Unit version 2.0 with enhanced capabilities",
"manufacturer": "TrackLab",
"collectorTypeSlug": "ncu",
"hardwareVersions": [
"fsxglmdifknysknnikzrqlhfq"
],
"enabled": true,
"orderColumn": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/device-models/{deviceModelType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/device-models/{deviceModelType_slug}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"NCU v2.0\",
\"slug\": \"ncu-v2\",
\"description\": \"Network Control Unit version 2.0 with enhanced capabilities\",
\"manufacturer\": \"TrackLab\",
\"collectorTypeSlug\": \"ncu\",
\"hardwareVersions\": [
\"lwos\"
],
\"enabled\": true,
\"orderColumn\": 1
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "NCU v2.0",
"slug": "ncu-v2",
"description": "Network Control Unit version 2.0 with enhanced capabilities",
"manufacturer": "TrackLab",
"collectorTypeSlug": "ncu",
"hardwareVersions": [
"lwos"
],
"enabled": true,
"orderColumn": 1
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'NCU v2.0',
'slug' => 'ncu-v2',
'description' => 'Network Control Unit version 2.0 with enhanced capabilities',
'manufacturer' => 'TrackLab',
'collectorTypeSlug' => 'ncu',
'hardwareVersions' => [
'lwos',
],
'enabled' => true,
'orderColumn' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown'
payload = {
"name": "NCU v2.0",
"slug": "ncu-v2",
"description": "Network Control Unit version 2.0 with enhanced capabilities",
"manufacturer": "TrackLab",
"collectorTypeSlug": "ncu",
"hardwareVersions": [
"lwos"
],
"enabled": true,
"orderColumn": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/device-models/{deviceModelType_slug}/toggle
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown/toggle" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"enabled\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown/toggle"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"enabled": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown/toggle',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'enabled' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown/toggle'
payload = {
"enabled": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/device-models/{deviceModelType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-models/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Get All Farms
requires authentication
Retrieve all farms associated with the company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/dolorem/farm" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/dolorem/farm"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/dolorem/farm',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/dolorem/farm'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"uuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"createdAt": "2024-01-03T20:11:13+00:00",
"updatedAt": "2024-01-03T20:11:13+00:00",
"enabled": true,
"companySlug": "tracklab",
"name": "First Farm",
"description": "",
"location": {
"lat": -25.91,
"lng": 28.12
},
"isUnassigned": false
},
{
"uuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"createdAt": "2024-01-03T20:11:13+00:00",
"updatedAt": "2024-01-03T20:11:13+00:00",
"enabled": true,
"companySlug": "tracklab",
"name": "First Farm",
"description": "",
"location": {
"lat": -25.91,
"lng": 28.12
},
"isUnassigned": false
}
]
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the farm
createdAt
string
The timestamp when the farm was created
updatedAt
string
The timestamp when the farm was last updated
enabled
boolean
Whether the farm is enabled
companySlug
string
The slug of the company this farm belongs to
name
string
The name of the farm
description
string|null
The description of the farm
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
Add New Farm
requires authentication
Create a new farm for the company.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/incidunt/farm" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Field Farm\",
\"description\": \"Main production farm\",
\"location\": {
\"latitude\": \"51.509865\",
\"longitude\": \"-0.118092\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/incidunt/farm"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Field Farm",
"description": "Main production farm",
"location": {
"latitude": "51.509865",
"longitude": "-0.118092"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/incidunt/farm',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Field Farm',
'description' => 'Main production farm',
'location' => [
'latitude' => '51.509865',
'longitude' => '-0.118092',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/incidunt/farm'
payload = {
"name": "North Field Farm",
"description": "Main production farm",
"location": {
"latitude": "51.509865",
"longitude": "-0.118092"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"createdAt": "2024-01-03T20:11:13+00:00",
"updatedAt": "2024-01-03T20:11:13+00:00",
"enabled": true,
"companySlug": "tracklab",
"name": "First Farm",
"description": "",
"location": {
"lat": -25.91,
"lng": 28.12
},
"isUnassigned": false
}
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the farm
createdAt
string
The timestamp when the farm was created
updatedAt
string
The timestamp when the farm was last updated
enabled
boolean
Whether the farm is enabled
companySlug
string
The slug of the company this farm belongs to
name
string
The name of the farm
description
string|null
The description of the farm
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
Get Farm Details
requires authentication
Retrieve details of a specific farm.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"createdAt": "2024-01-03T20:11:13+00:00",
"updatedAt": "2024-01-03T20:11:13+00:00",
"enabled": true,
"companySlug": "tracklab",
"name": "First Farm",
"description": "",
"location": {
"lat": -25.91,
"lng": 28.12
},
"isUnassigned": false
}
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the farm
createdAt
string
The timestamp when the farm was created
updatedAt
string
The timestamp when the farm was last updated
enabled
boolean
Whether the farm is enabled
companySlug
string
The slug of the company this farm belongs to
name
string
The name of the farm
description
string|null
The description of the farm
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
Update Farm
requires authentication
Update an existing farm's details.
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Field Farm\",
\"description\": \"Main production farm\",
\"location\": {
\"latitude\": \"51.509865\",
\"longitude\": \"-0.118092\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Field Farm",
"description": "Main production farm",
"location": {
"latitude": "51.509865",
"longitude": "-0.118092"
}
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Field Farm',
'description' => 'Main production farm',
'location' => [
'latitude' => '51.509865',
'longitude' => '-0.118092',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b'
payload = {
"name": "North Field Farm",
"description": "Main production farm",
"location": {
"latitude": "51.509865",
"longitude": "-0.118092"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Updated Farm Name",
"description": "Updated farm description",
"location": {
"latitude": 51.509865,
"longitude": -0.118092
},
"created_at": "2024-01-20T12:00:00Z",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Received response:
Request failed with error:
Get Farm Collectors
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collector" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collector"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collector',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collector'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
},
{
"uuid": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"createdAt": "2026-02-12T13:40:48+00:00",
"updatedAt": "2026-02-12T13:40:48+00:00",
"enabled": true,
"companySlug": "tracklab",
"farmUuid": "c9b4c54e-a135-4a7f-86c9-7f03b9329a1b",
"collectorTypeSlug": "ncu",
"type": "NCU",
"parentUuid": null,
"childrenUuids": [],
"serial": "SYSTEM-HOLDING-NCU",
"name": "Unassigned Collectors",
"description": "System-level holding NCU for auto-subscribed collectors awaiting assignment",
"location": null,
"isDecommissioned": false,
"decommissionedAt": null,
"decommissionReason": null,
"currentTracker": null,
"status": null,
"hardwareVersion": null,
"currentFirmware": null,
"manufacturedAt": null,
"deployedAt": null,
"retiredAt": null
}
]
}
Received response:
Request failed with error:
Response
Response Fields
data
object
uuid
string
The unique identifier of the collector
createdAt
string
The creation timestamp (ISO8601)
updatedAt
string
The last update timestamp (ISO8601)
enabled
boolean
Whether the collector is enabled
companySlug
string
The slug of the company this collector belongs to
farmUuid
string
The UUID of the farm this collector belongs to
collectorTypeSlug
string
The slug of the collector type
type
string
The type of collector (NCU or TCU)
parentUuid
string|null
The UUID of the parent collector (for TCUs)
childrenUuids
string[]
Array of child collector UUIDs (for NCUs)
serial
string
The serial number of the collector
name
string
The name of the collector
description
string|null
The description of the collector
location
object
The location coordinates
lat
number
The latitude coordinate
lng
number
The longitude coordinate
isDecommissioned
boolean
Whether the collector is decommissioned
decommissionedAt
string|null
The decommission timestamp (ISO8601)
decommissionReason
string|null
The reason for decommission
currentTracker
object|null
The current tracker placement
uuid
string
The tracker UUID
farmSectionUuid
string|null
The farm section UUID
row
integer
Row position in layout
column
integer
Column position in layout
status
object|null
The current lifecycle status
slug
string
The status type slug
name
string
The status type display name
hardwareVersion
object|null
The hardware version type
slug
string
The hardware version slug
name
string
The hardware version display name
version
string|null
The hardware version string
currentFirmware
object|null
The current firmware information
slug
string
The firmware type slug
name
string
The firmware type display name
version
string|null
The firmware version string
manufacturedAt
string|null
The manufacture timestamp (ISO8601)
deployedAt
string|null
The deployment timestamp (ISO8601)
retiredAt
string|null
The retirement timestamp (ISO8601)
List sections for a farm
requires authentication
Returns paginated list of sections for a farm belonging to the company. Use this to get section UUIDs when moving collectors.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections?enabled_only=1&page=1&perPage=25" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections"
);
const params = {
"enabled_only": "1",
"page": "1",
"perPage": "25",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled_only' => '1',
'page' => '1',
'perPage' => '25',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections'
params = {
'enabled_only': '1',
'page': '1',
'perPage': '25',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
},
{
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
]
}
Received response:
Request failed with error:
Create a new farm section
requires authentication
Creates a section within a specific farm. Requires FARM_UPDATE permission.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Field\",
\"description\": \"Northern section of the farm\",
\"enabled\": true,
\"orderColumn\": 1,
\"locationJson\": {
\"latitude\": 51.509865,
\"longitude\": -0.118092
},
\"metadata\": {
\"notes\": \"Primary section\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Field",
"description": "Northern section of the farm",
"enabled": true,
"orderColumn": 1,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Primary section"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Field',
'description' => 'Northern section of the farm',
'enabled' => true,
'orderColumn' => 1,
'locationJson' => [
'latitude' => 51.509865,
'longitude' => -0.118092,
],
'metadata' => [
'notes' => 'Primary section',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections'
payload = {
"name": "North Field",
"description": "Northern section of the farm",
"enabled": true,
"orderColumn": 1,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Primary section"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/firmware-keys/workflows/provision
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/workflows/provision" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Production Farm Key\",
\"description\": \"Key for firmware updates on production farm\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440000\",
\"expiresAt\": \"2025-12-31\",
\"isActive\": true,
\"plainKey\": \"abc123def456ghi789jkl012\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/workflows/provision"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Production Farm Key",
"description": "Key for firmware updates on production farm",
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2025-12-31",
"isActive": true,
"plainKey": "abc123def456ghi789jkl012"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/workflows/provision',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Production Farm Key',
'description' => 'Key for firmware updates on production farm',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440000',
'expiresAt' => '2025-12-31',
'isActive' => true,
'plainKey' => 'abc123def456ghi789jkl012',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/workflows/provision'
payload = {
"name": "Production Farm Key",
"description": "Key for firmware updates on production farm",
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2025-12-31",
"isActive": true,
"plainKey": "abc123def456ghi789jkl012"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/firmware-keys
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/firmware-keys
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Production Farm Key\",
\"description\": \"Key for firmware updates on production farm\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440000\",
\"expiresAt\": \"2025-12-31\",
\"isActive\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Production Farm Key",
"description": "Key for firmware updates on production farm",
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2025-12-31",
"isActive": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Production Farm Key',
'description' => 'Key for firmware updates on production farm',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440000',
'expiresAt' => '2025-12-31',
'isActive' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys'
payload = {
"name": "Production Farm Key",
"description": "Key for firmware updates on production farm",
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2025-12-31",
"isActive": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/firmware-keys/{firmwareAccessKey_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/firmware-keys/{firmwareAccessKey_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Updated Farm Key\",
\"description\": \"Updated key description\",
\"expiresAt\": \"2026-06-30\",
\"isActive\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Updated Farm Key",
"description": "Updated key description",
"expiresAt": "2026-06-30",
"isActive": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Updated Farm Key',
'description' => 'Updated key description',
'expiresAt' => '2026-06-30',
'isActive' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271'
payload = {
"name": "Updated Farm Key",
"description": "Updated key description",
"expiresAt": "2026-06-30",
"isActive": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/firmware-keys/{firmwareAccessKey_uuid}/deactivate
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers)
response.json()Received response:
Request failed with error:
List Company Invitations
requires authentication
Returns all invitations for the company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/invitations" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/invitations"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/invitations',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/invitations'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"uuid": null,
"email": null,
"status": null,
"roleSlug": null,
"invitedBy": {
"uuid": null,
"name": null
},
"validUntil": "2026-03-26T23:05:08+00:00",
"acceptedAt": null,
"createdAt": "2026-03-26T23:05:08+00:00"
},
{
"uuid": null,
"email": null,
"status": null,
"roleSlug": null,
"invitedBy": {
"uuid": null,
"name": null
},
"validUntil": "2026-03-26T23:05:08+00:00",
"acceptedAt": null,
"createdAt": "2026-03-26T23:05:08+00:00"
}
]
}
Received response:
Request failed with error:
Create Invitation
requires authentication
Creates a new invitation and sends email to the invitee.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/invitations" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"user@example.com\",
\"roleSlug\": \"user\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/invitations"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "user@example.com",
"roleSlug": "user"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/invitations',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'user@example.com',
'roleSlug' => 'user',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/invitations'
payload = {
"email": "user@example.com",
"roleSlug": "user"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"status": "pending",
"roleSlug": "user",
"validUntil": "2026-01-26T00:00:00+00:00"
}
}
Received response:
Request failed with error:
Revoke Invitation
requires authentication
Revokes a pending invitation.
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/invitations/4ac83d17-dbf5-30b5-af64-4f53a2991f81" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/invitations/4ac83d17-dbf5-30b5-af64-4f53a2991f81"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/invitations/4ac83d17-dbf5-30b5-af64-4f53a2991f81',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/invitations/4ac83d17-dbf5-30b5-af64-4f53a2991f81'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Query Measurements
requires authentication
Query measurement data with support for multiple types, collectors, farms, and aggregation methods.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/measurements?types[]=officiis&from=2024-01-01T00%3A00%3A00Z&collectorUuids[]=et&farmUuid=35ee6e6b-fae8-3429-a183-f727f6583abf&farmSectionUuid=05acbf2c-8d8f-3ffb-9595-569bf5e5c8c6&collectorTypeSlug=dolorem&to=2024-01-31T23%3A59%3A59Z&raw=1&period=1-hour&aggregation=natus&valueMin=eaque&valueMax=occaecati&groupBy=error&includeMetadata=1&includeReplacements=&includeCount=1&exportType=molestiae&page=2&perPage=7&types%5B%5D[]=temperature&types%5B%5D[]=humidity&collectorUuids%5B%5D[]=at" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/measurements"
);
const params = {
"types[0]": "officiis",
"from": "2024-01-01T00:00:00Z",
"collectorUuids[0]": "et",
"farmUuid": "35ee6e6b-fae8-3429-a183-f727f6583abf",
"farmSectionUuid": "05acbf2c-8d8f-3ffb-9595-569bf5e5c8c6",
"collectorTypeSlug": "dolorem",
"to": "2024-01-31T23:59:59Z",
"raw": "1",
"period": "1-hour",
"aggregation": "natus",
"valueMin": "eaque",
"valueMax": "occaecati",
"groupBy": "error",
"includeMetadata": "1",
"includeReplacements": "0",
"includeCount": "1",
"exportType": "molestiae",
"page": "2",
"perPage": "7",
"types[][0]": "temperature",
"types[][1]": "humidity",
"collectorUuids[][0]": "at",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/measurements',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'types[0]' => 'officiis',
'from' => '2024-01-01T00:00:00Z',
'collectorUuids[0]' => 'et',
'farmUuid' => '35ee6e6b-fae8-3429-a183-f727f6583abf',
'farmSectionUuid' => '05acbf2c-8d8f-3ffb-9595-569bf5e5c8c6',
'collectorTypeSlug' => 'dolorem',
'to' => '2024-01-31T23:59:59Z',
'raw' => '1',
'period' => '1-hour',
'aggregation' => 'natus',
'valueMin' => 'eaque',
'valueMax' => 'occaecati',
'groupBy' => 'error',
'includeMetadata' => '1',
'includeReplacements' => '0',
'includeCount' => '1',
'exportType' => 'molestiae',
'page' => '2',
'perPage' => '7',
'types[][0]' => 'temperature',
'types[][1]' => 'humidity',
'collectorUuids[][0]' => 'at',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/measurements'
params = {
'types[0]': 'officiis',
'from': '2024-01-01T00:00:00Z',
'collectorUuids[0]': 'et',
'farmUuid': '35ee6e6b-fae8-3429-a183-f727f6583abf',
'farmSectionUuid': '05acbf2c-8d8f-3ffb-9595-569bf5e5c8c6',
'collectorTypeSlug': 'dolorem',
'to': '2024-01-31T23:59:59Z',
'raw': '1',
'period': '1-hour',
'aggregation': 'natus',
'valueMin': 'eaque',
'valueMax': 'occaecati',
'groupBy': 'error',
'includeMetadata': '1',
'includeReplacements': '0',
'includeCount': '1',
'exportType': 'molestiae',
'page': '2',
'perPage': '7',
'types[][0]': 'temperature',
'types[][1]': 'humidity',
'collectorUuids[][0]': 'at',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Generate a short-lived signed download link for measurements.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/measurements/download-link?types[]=tenetur&from=2025-01-01T00%3A00%3A00Z&collectorUuids[]=ipsam&farmUuid=d5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d&farmSectionUuid=3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa&collectorTypeSlug=ncu&to=2025-01-02T00%3A00%3A00Z&raw=&period=minute&aggregation=avg&valueMin=0&valueMax=1000&groupBy=measurement_type&includeMetadata=1&includeReplacements=&includeCount=&exportType=json&page=1&perPage=100&expiresInMinutes=10" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/measurements/download-link"
);
const params = {
"types[0]": "tenetur",
"from": "2025-01-01T00:00:00Z",
"collectorUuids[0]": "ipsam",
"farmUuid": "d5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d",
"farmSectionUuid": "3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa",
"collectorTypeSlug": "ncu",
"to": "2025-01-02T00:00:00Z",
"raw": "0",
"period": "minute",
"aggregation": "avg",
"valueMin": "0",
"valueMax": "1000",
"groupBy": "measurement_type",
"includeMetadata": "1",
"includeReplacements": "0",
"includeCount": "0",
"exportType": "json",
"page": "1",
"perPage": "100",
"expiresInMinutes": "10",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/measurements/download-link',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'types[0]' => 'tenetur',
'from' => '2025-01-01T00:00:00Z',
'collectorUuids[0]' => 'ipsam',
'farmUuid' => 'd5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d',
'farmSectionUuid' => '3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa',
'collectorTypeSlug' => 'ncu',
'to' => '2025-01-02T00:00:00Z',
'raw' => '0',
'period' => 'minute',
'aggregation' => 'avg',
'valueMin' => '0',
'valueMax' => '1000',
'groupBy' => 'measurement_type',
'includeMetadata' => '1',
'includeReplacements' => '0',
'includeCount' => '0',
'exportType' => 'json',
'page' => '1',
'perPage' => '100',
'expiresInMinutes' => '10',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/measurements/download-link'
params = {
'types[0]': 'tenetur',
'from': '2025-01-01T00:00:00Z',
'collectorUuids[0]': 'ipsam',
'farmUuid': 'd5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d',
'farmSectionUuid': '3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa',
'collectorTypeSlug': 'ncu',
'to': '2025-01-02T00:00:00Z',
'raw': '0',
'period': 'minute',
'aggregation': 'avg',
'valueMin': '0',
'valueMax': '1000',
'groupBy': 'measurement_type',
'includeMetadata': '1',
'includeReplacements': '0',
'includeCount': '0',
'exportType': 'json',
'page': '1',
'perPage': '100',
'expiresInMinutes': '10',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/notification-channels
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/delectus/notification-channels" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/delectus/notification-channels"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/delectus/notification-channels',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/delectus/notification-channels'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-channels
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/facilis/notification-channels" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-solar\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440111\",
\"notificationChannelType\": \"email\",
\"name\": \"Ops Email Alerts\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/facilis/notification-channels"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440111",
"notificationChannelType": "email",
"name": "Ops Email Alerts"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/facilis/notification-channels',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-solar',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440111',
'notificationChannelType' => 'email',
'name' => 'Ops Email Alerts',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/facilis/notification-channels'
payload = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440111",
"notificationChannelType": "email",
"name": "Ops Email Alerts"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/notification-channels/{notificationChannel_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/7d93c65a-144a-3efd-b48a-78a4e7d72450" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/7d93c65a-144a-3efd-b48a-78a4e7d72450"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/7d93c65a-144a-3efd-b48a-78a4e7d72450',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/7d93c65a-144a-3efd-b48a-78a4e7d72450'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/notification-channels/{notificationChannel_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/a4e85879-425b-34de-a5b2-f93eb485e59d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationChannelType\": \"email\",
\"name\": \"Operations Alerts\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/a4e85879-425b-34de-a5b2-f93eb485e59d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationChannelType": "email",
"name": "Operations Alerts"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/a4e85879-425b-34de-a5b2-f93eb485e59d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationChannelType' => 'email',
'name' => 'Operations Alerts',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/a4e85879-425b-34de-a5b2-f93eb485e59d'
payload = {
"notificationChannelType": "email",
"name": "Operations Alerts"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-channels/{notificationChannel_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/5be1e06d-ebb0-3592-9e9e-1665c1e10c79" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/5be1e06d-ebb0-3592-9e9e-1665c1e10c79"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/5be1e06d-ebb0-3592-9e9e-1665c1e10c79',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/5be1e06d-ebb0-3592-9e9e-1665c1e10c79'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-channels/{notificationChannel_uuid}/emails
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/8152214e-3f89-3e0a-824d-5fe7663d9afb/emails" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"emailAddress\": \"alerts@example.com\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/8152214e-3f89-3e0a-824d-5fe7663d9afb/emails"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"emailAddress": "alerts@example.com"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/8152214e-3f89-3e0a-824d-5fe7663d9afb/emails',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'emailAddress' => 'alerts@example.com',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/8152214e-3f89-3e0a-824d-5fe7663d9afb/emails'
payload = {
"emailAddress": "alerts@example.com"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-channels/{notificationChannel_uuid}/push-devices
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/efaa4a0d-de47-3124-bf91-71c1c4629636/push-devices" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"mobileDeviceUuid\": \"550e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/efaa4a0d-de47-3124-bf91-71c1c4629636/push-devices"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"mobileDeviceUuid": "550e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/efaa4a0d-de47-3124-bf91-71c1c4629636/push-devices',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'mobileDeviceUuid' => '550e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/efaa4a0d-de47-3124-bf91-71c1c4629636/push-devices'
payload = {
"mobileDeviceUuid": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-channels/{notificationChannel_uuid}/webhooks
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/93d73d1e-d06c-3dde-83bf-ff208ffd9e4c/webhooks" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"PagerDuty Webhook\",
\"url\": \"https:\\/\\/hooks.example.com\\/alerts\",
\"httpMethod\": \"POST\",
\"timeoutSeconds\": 30
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/93d73d1e-d06c-3dde-83bf-ff208ffd9e4c/webhooks"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "POST",
"timeoutSeconds": 30
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/93d73d1e-d06c-3dde-83bf-ff208ffd9e4c/webhooks',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'PagerDuty Webhook',
'url' => 'https://hooks.example.com/alerts',
'httpMethod' => 'POST',
'timeoutSeconds' => 30,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channels/93d73d1e-d06c-3dde-83bf-ff208ffd9e4c/webhooks'
payload = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "POST",
"timeoutSeconds": 30
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-channel-emails/{notificationChannelEmail_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-emails/4fa4e220-5e7f-387e-a7e5-685efe3f5158" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-emails/4fa4e220-5e7f-387e-a7e5-685efe3f5158"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-emails/4fa4e220-5e7f-387e-a7e5-685efe3f5158',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-emails/4fa4e220-5e7f-387e-a7e5-685efe3f5158'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-channel-push-devices/{notificationChannelPushDevice_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-push-devices/14174b37-e53f-30d7-9da6-572aefc6f13c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-push-devices/14174b37-e53f-30d7-9da6-572aefc6f13c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-push-devices/14174b37-e53f-30d7-9da6-572aefc6f13c',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-push-devices/14174b37-e53f-30d7-9da6-572aefc6f13c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/notification-channel-webhooks/{notificationChannelWebhook_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/f166f8f9-765c-3e10-b7a2-67a54344648e" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"PagerDuty Webhook\",
\"url\": \"https:\\/\\/hooks.example.com\\/alerts\",
\"httpMethod\": \"PATCH\",
\"timeoutSeconds\": 20
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/f166f8f9-765c-3e10-b7a2-67a54344648e"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "PATCH",
"timeoutSeconds": 20
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/f166f8f9-765c-3e10-b7a2-67a54344648e',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'PagerDuty Webhook',
'url' => 'https://hooks.example.com/alerts',
'httpMethod' => 'PATCH',
'timeoutSeconds' => 20,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/f166f8f9-765c-3e10-b7a2-67a54344648e'
payload = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "PATCH",
"timeoutSeconds": 20
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-channel-webhooks/{notificationChannelWebhook_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/5b2174c8-eb77-3b20-9fb9-9bd62470b047" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/5b2174c8-eb77-3b20-9fb9-9bd62470b047"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/5b2174c8-eb77-3b20-9fb9-9bd62470b047',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/5b2174c8-eb77-3b20-9fb9-9bd62470b047'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-channel-webhooks/{notificationChannelWebhook_uuid}/headers
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/95324a82-1f6e-367d-b883-2b3737ad37c4/headers" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"headerKey\": \"X-Signature\",
\"headerValue\": \"secret-token\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/95324a82-1f6e-367d-b883-2b3737ad37c4/headers"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"headerKey": "X-Signature",
"headerValue": "secret-token"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/95324a82-1f6e-367d-b883-2b3737ad37c4/headers',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'headerKey' => 'X-Signature',
'headerValue' => 'secret-token',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhooks/95324a82-1f6e-367d-b883-2b3737ad37c4/headers'
payload = {
"headerKey": "X-Signature",
"headerValue": "secret-token"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-channel-webhook-headers/{notificationChannelWebhookHeader_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhook-headers/3dc980bf-064e-34e5-a955-5d980b1af527" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhook-headers/3dc980bf-064e-34e5-a955-5d980b1af527"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhook-headers/3dc980bf-064e-34e5-a955-5d980b1af527',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-channel-webhook-headers/3dc980bf-064e-34e5-a955-5d980b1af527'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/notification-templates
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/sint/notification-templates" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/sint/notification-templates"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/sint/notification-templates',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/sint/notification-templates'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-templates
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/nihil/notification-templates" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationChannelType\": \"email\",
\"notificationTemplateFormatType\": \"text\",
\"name\": \"Critical Alert Template\",
\"subjectTemplate\": \"[Alert] Collector Offline\",
\"bodyTemplate\": \"Alert: Collector went offline at Farm Alpha.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/nihil/notification-templates"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "text",
"name": "Critical Alert Template",
"subjectTemplate": "[Alert] Collector Offline",
"bodyTemplate": "Alert: Collector went offline at Farm Alpha."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/nihil/notification-templates',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationChannelType' => 'email',
'notificationTemplateFormatType' => 'text',
'name' => 'Critical Alert Template',
'subjectTemplate' => '[Alert] Collector Offline',
'bodyTemplate' => 'Alert: Collector went offline at Farm Alpha.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/nihil/notification-templates'
payload = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "text",
"name": "Critical Alert Template",
"subjectTemplate": "[Alert] Collector Offline",
"bodyTemplate": "Alert: Collector went offline at Farm Alpha."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/notification-templates/{notificationTemplate_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/notification-templates/{notificationTemplate_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationChannelType\": \"email\",
\"notificationTemplateFormatType\": \"html\",
\"name\": \"Updated Alert Template\",
\"subjectTemplate\": \"[Updated] Collector Offline\",
\"bodyTemplate\": \"<p>Alert rule updated for Collector Alpha.<\\/p>\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "html",
"name": "Updated Alert Template",
"subjectTemplate": "[Updated] Collector Offline",
"bodyTemplate": "<p>Alert rule updated for Collector Alpha.<\/p>"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationChannelType' => 'email',
'notificationTemplateFormatType' => 'html',
'name' => 'Updated Alert Template',
'subjectTemplate' => '[Updated] Collector Offline',
'bodyTemplate' => '<p>Alert rule updated for Collector Alpha.</p>',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888'
payload = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "html",
"name": "Updated Alert Template",
"subjectTemplate": "[Updated] Collector Offline",
"bodyTemplate": "<p>Alert rule updated for Collector Alpha.<\/p>"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-templates/{notificationTemplate_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/notification-policies
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/aut/notification-policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/aut/notification-policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/aut/notification-policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/aut/notification-policies'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/c/{company_slug}/notification-policies
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/velit/notification-policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-solar\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440121\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440122\",
\"name\": \"Critical Weather Policy\",
\"enabled\": true,
\"notificationChannelUuid\": \"550e8400-e29b-41d4-a716-446655440123\",
\"notificationTemplateUuid\": \"550e8400-e29b-41d4-a716-446655440124\",
\"labels\": [
{
\"key\": \"severity\",
\"value\": \"critical\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/velit/notification-policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440121",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440122",
"name": "Critical Weather Policy",
"enabled": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440123",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440124",
"labels": [
{
"key": "severity",
"value": "critical"
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/velit/notification-policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-solar',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440121',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440122',
'name' => 'Critical Weather Policy',
'enabled' => true,
'notificationChannelUuid' => '550e8400-e29b-41d4-a716-446655440123',
'notificationTemplateUuid' => '550e8400-e29b-41d4-a716-446655440124',
'labels' => [
[
'key' => 'severity',
'value' => 'critical',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/velit/notification-policies'
payload = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440121",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440122",
"name": "Critical Weather Policy",
"enabled": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440123",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440124",
"labels": [
{
"key": "severity",
"value": "critical"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/notification-policies/{notificationPolicy_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/22604c3e-be5f-326a-b804-4e8b052d1e5e" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/22604c3e-be5f-326a-b804-4e8b052d1e5e"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/22604c3e-be5f-326a-b804-4e8b052d1e5e',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/22604c3e-be5f-326a-b804-4e8b052d1e5e'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/c/{company_slug}/notification-policies/{notificationPolicy_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/6d1201ae-383e-3d19-a2d5-248898cb6568" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Critical Weather Policy\",
\"enabled\": false,
\"notificationChannelUuid\": \"550e8400-e29b-41d4-a716-446655440223\",
\"notificationTemplateUuid\": \"550e8400-e29b-41d4-a716-446655440224\",
\"labels\": [
{
\"key\": \"site\",
\"value\": \"north-farm\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/6d1201ae-383e-3d19-a2d5-248898cb6568"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Critical Weather Policy",
"enabled": false,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440223",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440224",
"labels": [
{
"key": "site",
"value": "north-farm"
}
]
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/6d1201ae-383e-3d19-a2d5-248898cb6568',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Critical Weather Policy',
'enabled' => false,
'notificationChannelUuid' => '550e8400-e29b-41d4-a716-446655440223',
'notificationTemplateUuid' => '550e8400-e29b-41d4-a716-446655440224',
'labels' => [
[
'key' => 'site',
'value' => 'north-farm',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/6d1201ae-383e-3d19-a2d5-248898cb6568'
payload = {
"name": "Critical Weather Policy",
"enabled": false,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440223",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440224",
"labels": [
{
"key": "site",
"value": "north-farm"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/c/{company_slug}/notification-policies/{notificationPolicy_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/765fa1ab-9e1a-3c3c-8312-4c797fe4e090" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/765fa1ab-9e1a-3c3c-8312-4c797fe4e090"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/765fa1ab-9e1a-3c3c-8312-4c797fe4e090',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/notification-policies/765fa1ab-9e1a-3c3c-8312-4c797fe4e090'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
List RMA requests for the company.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/rma?status=requested&collectorUuid=550e8400-e29b-41d4-a716-446655440000&dateFrom=2025-01-01&dateTo=2025-12-31&page=1&perPage=25" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma"
);
const params = {
"status": "requested",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440000",
"dateFrom": "2025-01-01",
"dateTo": "2025-12-31",
"page": "1",
"perPage": "25",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/rma',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'status' => 'requested',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440000',
'dateFrom' => '2025-01-01',
'dateTo' => '2025-12-31',
'page' => '1',
'perPage' => '25',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma'
params = {
'status': 'requested',
'collectorUuid': '550e8400-e29b-41d4-a716-446655440000',
'dateFrom': '2025-01-01',
'dateTo': '2025-12-31',
'page': '1',
'perPage': '25',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create a new RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/rma" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440000\",
\"reason\": \"Hardware fault detected\",
\"description\": \"Collector stopped responding after firmware update\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorUuid": "550e8400-e29b-41d4-a716-446655440000",
"reason": "Hardware fault detected",
"description": "Collector stopped responding after firmware update"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/rma',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440000',
'reason' => 'Hardware fault detected',
'description' => 'Collector stopped responding after firmware update',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma'
payload = {
"collectorUuid": "550e8400-e29b-41d4-a716-446655440000",
"reason": "Hardware fault detected",
"description": "Collector stopped responding after firmware update"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Show RMA request details.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/rma/1303375b-5838-3d02-9160-09b2dbe9f4df" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma/1303375b-5838-3d02-9160-09b2dbe9f4df"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/rma/1303375b-5838-3d02-9160-09b2dbe9f4df',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma/1303375b-5838-3d02-9160-09b2dbe9f4df'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update RMA status (e.g. shipped-to-vendor with tracking number).
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/rma/b14ee05a-2377-3ab4-8eb0-9f5f3b44b9f2" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"trackingNumber\": \"1Z999AA10123456784\",
\"status\": \"shipped-to-vendor\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma/b14ee05a-2377-3ab4-8eb0-9f5f3b44b9f2"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"trackingNumber": "1Z999AA10123456784",
"status": "shipped-to-vendor"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/rma/b14ee05a-2377-3ab4-8eb0-9f5f3b44b9f2',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'trackingNumber' => '1Z999AA10123456784',
'status' => 'shipped-to-vendor',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma/b14ee05a-2377-3ab4-8eb0-9f5f3b44b9f2'
payload = {
"trackingNumber": "1Z999AA10123456784",
"status": "shipped-to-vendor"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Approve an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/rma/f98aac80-670c-3833-ae42-96cf36b40a33/approve" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma/f98aac80-670c-3833-ae42-96cf36b40a33/approve"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/rma/f98aac80-670c-3833-ae42-96cf36b40a33/approve',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma/f98aac80-670c-3833-ae42-96cf36b40a33/approve'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Reject an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/rma/45b7c84b-25f9-3a7a-a690-66c3b5ae1207/reject" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"reason\": \"Collector is under warranty with manufacturer\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma/45b7c84b-25f9-3a7a-a690-66c3b5ae1207/reject"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"reason": "Collector is under warranty with manufacturer"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/rma/45b7c84b-25f9-3a7a-a690-66c3b5ae1207/reject',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'reason' => 'Collector is under warranty with manufacturer',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma/45b7c84b-25f9-3a7a-a690-66c3b5ae1207/reject'
payload = {
"reason": "Collector is under warranty with manufacturer"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List notes for an RMA request.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/rma/89ca5ef1-8f1f-3c9b-a593-7dde5de884c3/notes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma/89ca5ef1-8f1f-3c9b-a593-7dde5de884c3/notes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/rma/89ca5ef1-8f1f-3c9b-a593-7dde5de884c3/notes',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma/89ca5ef1-8f1f-3c9b-a593-7dde5de884c3/notes'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Add a note to an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/rma/a03862fc-1255-3f84-bb8e-c325bb9974c8/notes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"note\": \"Customer contacted regarding shipping label\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/rma/a03862fc-1255-3f84-bb8e-c325bb9974c8/notes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"note": "Customer contacted regarding shipping label"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/rma/a03862fc-1255-3f84-bb8e-c325bb9974c8/notes',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'note' => 'Customer contacted regarding shipping label',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/rma/a03862fc-1255-3f84-bb8e-c325bb9974c8/notes'
payload = {
"note": "Customer contacted regarding shipping label"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Show a farm section
requires authentication
Returns details of a specific farm section. Requires FARM_VIEW permission.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
}
Received response:
Request failed with error:
Update a farm section
requires authentication
Updates an existing farm section. Requires FARM_UPDATE permission. The "Unassigned" section cannot be edited.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Field Updated\",
\"description\": \"Updated description\",
\"enabled\": false,
\"orderColumn\": 2,
\"locationJson\": {
\"latitude\": 51.509865,
\"longitude\": -0.118092
},
\"metadata\": {
\"notes\": \"Updated notes\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Field Updated",
"description": "Updated description",
"enabled": false,
"orderColumn": 2,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Updated notes"
}
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Field Updated',
'description' => 'Updated description',
'enabled' => false,
'orderColumn' => 2,
'locationJson' => [
'latitude' => 51.509865,
'longitude' => -0.118092,
],
'metadata' => [
'notes' => 'Updated notes',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1'
payload = {
"name": "North Field Updated",
"description": "Updated description",
"enabled": false,
"orderColumn": 2,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Updated notes"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
}
Received response:
Request failed with error:
Delete a farm section
requires authentication
Deletes a farm section. Requires FARM_UPDATE permission. The "Unassigned" section cannot be deleted.
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (204):
[Empty response]
Received response:
Request failed with error:
Bulk assign collectors to section
requires authentication
Assigns multiple collectors to a specific farm section. The farm is derived from the section automatically. Collectors already on this farm+section are skipped. Requires COLLECTOR_UPDATE permission.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorUuids\": [
\"550e8400-e29b-41d4-a716-446655440001\",
\"550e8400-e29b-41d4-a716-446655440002\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorUuids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorUuids' => [
'550e8400-e29b-41d4-a716-446655440001',
'550e8400-e29b-41d4-a716-446655440002',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/section/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign'
payload = {
"collectorUuids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{"data": {"assigned": 2, "skipped": 1, "collectors": [...]}}
Example response (403):
{
"message": "This action is unauthorized."
}
Example response (404):
{
"error": "Section not found"
}
Example response (422):
{
"message": "Validation failed",
"errors": {
"collectorUuids": [
"At least one collector UUID is required"
]
}
}
Received response:
Request failed with error:
Get current weather for all farms in a company
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/weather" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/weather"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/weather',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/weather'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get current weather for a specific farm
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/current" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/current"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/current',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/current'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get weather history for a specific farm
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/history" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"from\": \"2025-01-01\",
\"to\": \"2025-01-31\",
\"page\": 1,
\"perPage\": 25,
\"limit\": 6
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/history"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"from": "2025-01-01",
"to": "2025-01-31",
"page": 1,
"perPage": 25,
"limit": 6
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/history',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'from' => '2025-01-01',
'to' => '2025-01-31',
'page' => 1,
'perPage' => 25,
'limit' => 6,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/history'
payload = {
"from": "2025-01-01",
"to": "2025-01-31",
"page": 1,
"perPage": 25,
"limit": 6
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Refresh weather data for a specific farm
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/refresh" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/refresh"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/refresh',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/weather/farm/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/refresh'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/c/{company_slug}/device-model-insights/{collector_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/device-model-insights/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/device-model-insights/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/device-model-insights/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/device-model-insights/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/c/{company_slug}/firmware
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/c/tracklab/firmware" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"deviceModelTypeSlug\": \"ncu-v2\",
\"enabled\": true,
\"perPage\": 25
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/firmware"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"deviceModelTypeSlug": "ncu-v2",
"enabled": true,
"perPage": 25
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/c/tracklab/firmware',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'deviceModelTypeSlug' => 'ncu-v2',
'enabled' => true,
'perPage' => 25,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/firmware'
payload = {
"deviceModelTypeSlug": "ncu-v2",
"enabled": true,
"perPage": 25
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Store Mobile Audit Events
requires authentication
Upload a batch of mobile audit events for a company. Duplicate eventUuids are silently skipped (idempotent).
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/mobile/audit-events" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"deviceUuid\": \"550e8400-e29b-41d4-a716-446655440070\",
\"events\": [
{
\"eventUuid\": \"550e8400-e29b-41d4-a716-446655440071\",
\"occurredAt\": \"2026-02-17T10:00:00Z\",
\"eventName\": \"collector_connection\",
\"actionName\": \"connect\",
\"operatorLabel\": \"operator-1\",
\"connectionType\": \"bluetooth\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440072\",
\"context\": {
\"signalRssi\": -64
},
\"request\": {
\"source\": \"mobile\"
},
\"result\": {
\"status\": \"success\"
},
\"geo\": {
\"lat\": 33.4484,
\"lng\": -112.074
}
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/mobile/audit-events"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440070",
"events": [
{
"eventUuid": "550e8400-e29b-41d4-a716-446655440071",
"occurredAt": "2026-02-17T10:00:00Z",
"eventName": "collector_connection",
"actionName": "connect",
"operatorLabel": "operator-1",
"connectionType": "bluetooth",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440072",
"context": {
"signalRssi": -64
},
"request": {
"source": "mobile"
},
"result": {
"status": "success"
},
"geo": {
"lat": 33.4484,
"lng": -112.074
}
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/mobile/audit-events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'deviceUuid' => '550e8400-e29b-41d4-a716-446655440070',
'events' => [
[
'eventUuid' => '550e8400-e29b-41d4-a716-446655440071',
'occurredAt' => '2026-02-17T10:00:00Z',
'eventName' => 'collector_connection',
'actionName' => 'connect',
'operatorLabel' => 'operator-1',
'connectionType' => 'bluetooth',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440072',
'context' => [
'signalRssi' => -64,
],
'request' => [
'source' => 'mobile',
],
'result' => [
'status' => 'success',
],
'geo' => [
'lat' => 33.4484,
'lng' => -112.074,
],
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/mobile/audit-events'
payload = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440070",
"events": [
{
"eventUuid": "550e8400-e29b-41d4-a716-446655440071",
"occurredAt": "2026-02-17T10:00:00Z",
"eventName": "collector_connection",
"actionName": "connect",
"operatorLabel": "operator-1",
"connectionType": "bluetooth",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440072",
"context": {
"signalRssi": -64
},
"request": {
"source": "mobile"
},
"result": {
"status": "success"
},
"geo": {
"lat": 33.4484,
"lng": -112.074
}
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Upload NCU measurement and parameter data.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-data" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"deviceUuid\": \"550e8400-e29b-41d4-a716-446655440080\",
\"batchUuid\": \"550e8400-e29b-41d4-a716-446655440081\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440082\",
\"measurements\": [
{
\"timestamp\": \"2026-02-17T10:05:00Z\",
\"data\": {
\"ambientTemp\": 31.2
}
}
],
\"parameters\": {
\"firmwareVersion\": \"1.18.4\",
\"mode\": \"auto\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-data"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440080",
"batchUuid": "550e8400-e29b-41d4-a716-446655440081",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440082",
"measurements": [
{
"timestamp": "2026-02-17T10:05:00Z",
"data": {
"ambientTemp": 31.2
}
}
],
"parameters": {
"firmwareVersion": "1.18.4",
"mode": "auto"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-data',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'deviceUuid' => '550e8400-e29b-41d4-a716-446655440080',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440081',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440082',
'measurements' => [
[
'timestamp' => '2026-02-17T10:05:00Z',
'data' => [
'ambientTemp' => 31.2,
],
],
],
'parameters' => [
'firmwareVersion' => '1.18.4',
'mode' => 'auto',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-data'
payload = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440080",
"batchUuid": "550e8400-e29b-41d4-a716-446655440081",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440082",
"measurements": [
{
"timestamp": "2026-02-17T10:05:00Z",
"data": {
"ambientTemp": 31.2
}
}
],
"parameters": {
"firmwareVersion": "1.18.4",
"mode": "auto"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Upload NCU raw log file.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-logs" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "deviceUuid=550e8400-e29b-41d4-a716-446655440090" \
--form "collectorUuid=550e8400-e29b-41d4-a716-446655440091" \
--form "notes=Captured right after an intermittent disconnect." \
--form "logFile=@/site/web/tests/Fixtures/mobile/ncu-log-example.txt" const url = new URL(
"https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-logs"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('deviceUuid', '550e8400-e29b-41d4-a716-446655440090');
body.append('collectorUuid', '550e8400-e29b-41d4-a716-446655440091');
body.append('notes', 'Captured right after an intermittent disconnect.');
body.append('logFile', document.querySelector('input[name="logFile"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-logs',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'deviceUuid',
'contents' => '550e8400-e29b-41d4-a716-446655440090'
],
[
'name' => 'collectorUuid',
'contents' => '550e8400-e29b-41d4-a716-446655440091'
],
[
'name' => 'notes',
'contents' => 'Captured right after an intermittent disconnect.'
],
[
'name' => 'logFile',
'contents' => fopen('/site/web/tests/Fixtures/mobile/ncu-log-example.txt', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/tracklab/mobile/ncu-logs'
files = {
'logFile': open('/site/web/tests/Fixtures/mobile/ncu-log-example.txt', 'rb')
}
payload = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440090",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440091",
"notes": "Captured right after an intermittent disconnect."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files, data=payload)
response.json()Received response:
Request failed with error:
List all enabled document library sections.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
List all enabled categories for a section.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
List all enabled documents for a category.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Generate signed icon URLs for a section.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon-link" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"expiryMinutes\": 10
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon-link"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"expiryMinutes": 10
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon-link',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'expiryMinutes' => 10,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon-link'
payload = {
"expiryMinutes": 10
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Generate signed icon URLs for a category.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon-link" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"expiryMinutes\": 10
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon-link"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"expiryMinutes": 10
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon-link',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'expiryMinutes' => 10,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon-link'
payload = {
"expiryMinutes": 10
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Generate signed icon URLs for a document.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/doc-lib/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon-link" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"expiryMinutes\": 10
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon-link"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"expiryMinutes": 10
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/doc-lib/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon-link',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'expiryMinutes' => 10,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon-link'
payload = {
"expiryMinutes": 10
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Generate a signed download URL for a document.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/download-link" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"expiryMinutes\": 10
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/download-link"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"expiryMinutes": 10
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/download-link',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'expiryMinutes' => 10,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/download-link'
payload = {
"expiryMinutes": 10
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/email/resend
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/email/resend" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/email/resend"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/email/resend',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/email/resend'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Get Profile Picture
requires authentication
Retrieve the authenticated user's profile picture. Supports token authentication via query parameter for use in image tags where Bearer tokens cannot be sent.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/profile/picture/square-48-webp?token=54%7CVYSnJgtQsXZWN45UOPc3y16VArMBQ1KM1eMdIxLR417e6478" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/profile/picture/square-48-webp"
);
const params = {
"token": "54|VYSnJgtQsXZWN45UOPc3y16VArMBQ1KM1eMdIxLR417e6478",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/profile/picture/square-48-webp',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'token' => '54|VYSnJgtQsXZWN45UOPc3y16VArMBQ1KM1eMdIxLR417e6478',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/profile/picture/square-48-webp'
params = {
'token': '54|VYSnJgtQsXZWN45UOPc3y16VArMBQ1KM1eMdIxLR417e6478',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
The image file stream
Example response (401):
{
"message": "Unauthenticated."
}
Example response (404):
{
"message": "Profile picture not found."
}
Received response:
Request failed with error:
Get Current User
requires authentication
Retrieves the complete profile information for the currently authenticated user. This includes personal details, contact information, profile picture URLs, and assigned roles. The endpoint provides a comprehensive view of the user's account data and preferences.
This endpoint is commonly used after login to initialize the user's session with their full profile data, or to refresh the local cache of user information.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"phone_number": "+1234567890",
"created_at": "2024-01-20T12:00:00Z",
"updated_at": "2024-01-20T12:00:00Z",
"profile_picture_url": "https://example.com/profiles/john.jpg",
"roles": [
"user"
]
}
}
Received response:
Request failed with error:
Check Authentication Status
Verifies if the current user has a valid authentication session. This endpoint can be used by clients to validate their authentication state without making a full profile request. It's particularly useful for SPA applications to check if their session is still valid.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/check" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/check"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/check',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/check'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"success": true
}
Example response (401):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get User Companies
requires authentication
Retrieve all companies associated with the authenticated user.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/company" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/company"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/company',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/company'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "example-company",
"createdAt": "2024-01-20T12:00:00Z",
"updatedAt": "2024-01-20T12:00:00Z",
"enabled": true,
"defaultCountryIsoCode": "ZA",
"country": {
"isoCode": "ZA",
"name": "South Africa",
"emoji": "🇿🇦"
},
"name": "Example Company",
"logoUrl": null,
"logoThumbUrl": null,
"logoLargeUrl": null,
"logoUrlExpiresAt": null,
"favicons": null
}
],
"links": {
"first": "https://api.example.com/api/v1/me/companies?page=1",
"last": "https://api.example.com/api/v1/me/companies?page=1",
"prev": null,
"next": null
},
"meta": {
"total": 1,
"perPage": 15,
"currentPage": 1,
"lastPage": 1,
"from": 1,
"to": 1,
"hasMore": false,
"path": "https://api.example.com/api/v1/me/companies"
}
}
Received response:
Request failed with error:
GET api/v1/me/addresses
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/addresses" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/addresses"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/addresses',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/addresses'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/me/addresses
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/addresses" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"addressString\": \"123 Main St, London SW1A 1AA\",
\"addressLine1\": \"123 Main Street\",
\"city\": \"London\",
\"postCode\": \"SW1A 1AA\",
\"countryIsoCode\": \"GB\",
\"addressLine2\": \"Apt 4B\",
\"neighborhood\": \"Westminster\",
\"locality\": \"Central London\",
\"place\": \"Piccadilly Circus\",
\"district\": \"City of Westminster\",
\"region\": \"Greater London\",
\"location\": {
\"lat\": 51.5074,
\"long\": -0.1278,
\"latitude\": 51.5074,
\"longitude\": -0.1278
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/addresses"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"addressString": "123 Main St, London SW1A 1AA",
"addressLine1": "123 Main Street",
"city": "London",
"postCode": "SW1A 1AA",
"countryIsoCode": "GB",
"addressLine2": "Apt 4B",
"neighborhood": "Westminster",
"locality": "Central London",
"place": "Piccadilly Circus",
"district": "City of Westminster",
"region": "Greater London",
"location": {
"lat": 51.5074,
"long": -0.1278,
"latitude": 51.5074,
"longitude": -0.1278
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/addresses',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'addressString' => '123 Main St, London SW1A 1AA',
'addressLine1' => '123 Main Street',
'city' => 'London',
'postCode' => 'SW1A 1AA',
'countryIsoCode' => 'GB',
'addressLine2' => 'Apt 4B',
'neighborhood' => 'Westminster',
'locality' => 'Central London',
'place' => 'Piccadilly Circus',
'district' => 'City of Westminster',
'region' => 'Greater London',
'location' => [
'lat' => 51.5074,
'long' => -0.1278,
'latitude' => 51.5074,
'longitude' => -0.1278,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/addresses'
payload = {
"addressString": "123 Main St, London SW1A 1AA",
"addressLine1": "123 Main Street",
"city": "London",
"postCode": "SW1A 1AA",
"countryIsoCode": "GB",
"addressLine2": "Apt 4B",
"neighborhood": "Westminster",
"locality": "Central London",
"place": "Piccadilly Circus",
"district": "City of Westminster",
"region": "Greater London",
"location": {
"lat": 51.5074,
"long": -0.1278,
"latitude": 51.5074,
"longitude": -0.1278
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Get User Roles
requires authentication
Retrieve all roles assigned to the authenticated user.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/role" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/role"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/role',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/role'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"success": true,
"data": {
"acme-co": [
"admin",
"user"
],
"tracklab": [
"tracklab-support"
]
}
}
Received response:
Request failed with error:
Get User Permissions
requires authentication
Retrieve all permissions assigned to the authenticated user, grouped by company slug.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/permissions" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/permissions"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/permissions',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/permissions'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"success": true,
"data": {
"acme-co": [
"collectors.view",
"collectors.update"
],
"tracklab": [
"tracklab.users.view"
]
}
}
Received response:
Request failed with error:
GET api/v1/me/realtime/bootstrap
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/realtime/bootstrap" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/realtime/bootstrap"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/realtime/bootstrap',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/realtime/bootstrap'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update Profile Picture
requires authentication
Upload or update the user's profile picture.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/profile/picture" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/php5hg0gppje80fdqrqkyU" const url = new URL(
"https://tracklabsolar.com/api/v1/me/profile/picture"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/profile/picture',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'file',
'contents' => fopen('/tmp/php5hg0gppje80fdqrqkyU', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/profile/picture'
files = {
'file': open('/tmp/php5hg0gppje80fdqrqkyU', 'rb')
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"profile_picture_url": "https://example.com/profiles/new-picture.jpg",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"file": [
"The file must be an image.",
"The file failed to upload."
]
}
}
Received response:
Request failed with error:
Generate Signed Asset URLs
requires authentication
Generate time-limited signed URLs for protected assets. These URLs can be used in img tags without requiring bearer token authentication.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/assets/signed-urls" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"assetType\": \"profile_picture\",
\"expiryMinutes\": 120
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/assets/signed-urls"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"assetType": "profile_picture",
"expiryMinutes": 120
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/assets/signed-urls',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'assetType' => 'profile_picture',
'expiryMinutes' => 120,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/assets/signed-urls'
payload = {
"assetType": "profile_picture",
"expiryMinutes": 120
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"assetType": "profile_picture",
"urls": {
"imgUrl": "https://example.com/api/v1/me/profile/picture/uuid/square-256-webp?expires=...",
"imgThumbUrl": "https://example.com/api/v1/me/profile/picture/uuid/square-48-webp?expires=..."
},
"expiresAt": "2024-01-20T13:00:00Z"
}
}
Received response:
Request failed with error:
POST api/v1/me/document
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/document" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"documentTypeSlug\": \"proof-of-address\",
\"file\": \"consequatur\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/document"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"documentTypeSlug": "proof-of-address",
"file": "consequatur"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/document',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'documentTypeSlug' => 'proof-of-address',
'file' => 'consequatur',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/document'
payload = {
"documentTypeSlug": "proof-of-address",
"file": "consequatur"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/me/document/{format}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/document/libero?documentTypeSlug=proof-of-address" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/document/libero"
);
const params = {
"documentTypeSlug": "proof-of-address",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/document/libero',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'documentTypeSlug' => 'proof-of-address',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/document/libero'
params = {
'documentTypeSlug': 'proof-of-address',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update User Name
requires authentication
Update the authenticated user's first and last name.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/name" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"firstName\": \"John\",
\"lastName\": \"Doe\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/name"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"firstName": "John",
"lastName": "Doe"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/name',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'firstName' => 'John',
'lastName' => 'Doe',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/name'
payload = {
"firstName": "John",
"lastName": "Doe"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Received response:
Request failed with error:
Update User Email
requires authentication
Update the authenticated user's email address.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/email" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"newemail@example.com\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/email"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "newemail@example.com"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/email',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'newemail@example.com',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/email'
payload = {
"email": "newemail@example.com"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"email": "newemail@example.com",
"firstName": "John",
"lastName": "Doe",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Received response:
Request failed with error:
Update Phone Number
requires authentication
Update the authenticated user's phone number.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/phonenumber" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1234567890\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/phonenumber"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"countryIsoCode": "US",
"phoneNumber": "+1234567890"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/phonenumber',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'countryIsoCode' => 'US',
'phoneNumber' => '+1234567890',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/phonenumber'
payload = {
"countryIsoCode": "US",
"phoneNumber": "+1234567890"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"phone_number": "+1234567890",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Received response:
Request failed with error:
Update Password
requires authentication
Update the authenticated user's password.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/password" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"oldPassword\": \"currentPass123\",
\"password\": \"newSecurePass123!\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/password"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"oldPassword": "currentPass123",
"password": "newSecurePass123!"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/password',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'oldPassword' => 'currentPass123',
'password' => 'newSecurePass123!',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/password'
payload = {
"oldPassword": "currentPass123",
"password": "newSecurePass123!"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"oldPassword": [
"The provided password is incorrect."
],
"password": [
"The password must be at least 10 characters."
]
}
}
Received response:
Request failed with error:
Update Default Country
requires authentication
Update the authenticated user's default country.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/country/default" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"countryIsoCode\": \"US\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/country/default"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"countryIsoCode": "US"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/country/default',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'countryIsoCode' => 'US',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/country/default'
payload = {
"countryIsoCode": "US"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Received response:
Request failed with error:
Update Default Company
requires authentication
Update the authenticated user's default company. The user must belong to the target company (via user_companies relationship).
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/company/default" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-corp\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/company/default"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-corp"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/company/default',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-corp',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/company/default'
payload = {
"companySlug": "acme-corp"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"defaultCompanySlug": "acme-corp",
"updated_at": "2024-01-20T12:00:00Z"
}
}
Example response (403):
{
"message": "User does not belong to this company"
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"companySlug": [
"The selected companySlug is invalid."
]
}
}
Received response:
Request failed with error:
Delete Current User Account
requires authentication
Soft-delete the authenticated user and revoke all tokens.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/delete" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/delete"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/delete',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/delete'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/me/2fa/enable
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/2fa/enable" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/2fa/enable"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/2fa/enable',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/2fa/enable'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/me/2fa/verify
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/2fa/verify" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"code\": \"123456\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/2fa/verify"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"code": "123456"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/2fa/verify',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'code' => '123456',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/2fa/verify'
payload = {
"code": "123456"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/me/2fa/disable
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/2fa/disable" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/2fa/disable"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/2fa/disable',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/2fa/disable'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/me/sessions
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/sessions" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/sessions"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/sessions',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/sessions'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/me/sessions/revoke
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/sessions/revoke" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"sessionId\": \"550e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/sessions/revoke"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sessionId": "550e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/sessions/revoke',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'sessionId' => '550e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/sessions/revoke'
payload = {
"sessionId": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/me/sessions/revoke-all
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/sessions/revoke-all" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/sessions/revoke-all"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/sessions/revoke-all',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/sessions/revoke-all'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Register or Update Mobile Device
requires authentication
Registers a new mobile device for the authenticated user, or updates an existing device if the deviceUuid already belongs to this user. Returns 403 if the deviceUuid belongs to a different user.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/me/mobile/devices" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"deviceUuid\": \"550e8400-e29b-41d4-a716-446655440000\",
\"platform\": \"android\",
\"deviceModel\": \"Pixel 7 Pro\",
\"osVersion\": \"14.0\",
\"appVersion\": \"1.0.0\",
\"buildNumber\": \"42\",
\"pushToken\": \"fcm-token-here\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/mobile/devices"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440000",
"platform": "android",
"deviceModel": "Pixel 7 Pro",
"osVersion": "14.0",
"appVersion": "1.0.0",
"buildNumber": "42",
"pushToken": "fcm-token-here"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/me/mobile/devices',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'deviceUuid' => '550e8400-e29b-41d4-a716-446655440000',
'platform' => 'android',
'deviceModel' => 'Pixel 7 Pro',
'osVersion' => '14.0',
'appVersion' => '1.0.0',
'buildNumber' => '42',
'pushToken' => 'fcm-token-here',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/mobile/devices'
payload = {
"deviceUuid": "550e8400-e29b-41d4-a716-446655440000",
"platform": "android",
"deviceModel": "Pixel 7 Pro",
"osVersion": "14.0",
"appVersion": "1.0.0",
"buildNumber": "42",
"pushToken": "fcm-token-here"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Update Mobile Device Metadata
requires authentication
Updates partial metadata on an existing mobile device (appVersion, buildNumber, pushToken, etc.). The device must belong to the authenticated user.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/me/mobile/devices/cd0c5477-bb27-31be-8515-d13424e5025a" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"deviceModel\": \"Pixel 7 Pro\",
\"osVersion\": \"14.0\",
\"appVersion\": \"1.0.0\",
\"buildNumber\": \"42\",
\"pushToken\": \"fcm-token-here\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/me/mobile/devices/cd0c5477-bb27-31be-8515-d13424e5025a"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"deviceModel": "Pixel 7 Pro",
"osVersion": "14.0",
"appVersion": "1.0.0",
"buildNumber": "42",
"pushToken": "fcm-token-here"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/me/mobile/devices/cd0c5477-bb27-31be-8515-d13424e5025a',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'deviceModel' => 'Pixel 7 Pro',
'osVersion' => '14.0',
'appVersion' => '1.0.0',
'buildNumber' => '42',
'pushToken' => 'fcm-token-here',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/mobile/devices/cd0c5477-bb27-31be-8515-d13424e5025a'
payload = {
"deviceModel": "Pixel 7 Pro",
"osVersion": "14.0",
"appVersion": "1.0.0",
"buildNumber": "42",
"pushToken": "fcm-token-here"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Get Sync Status
requires authentication
Returns server time, feature flags, and limits for mobile clients to configure their sync behavior.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/mobile/sync-status" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/mobile/sync-status"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/mobile/sync-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/mobile/sync-status'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-rules
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation-rules
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-solar\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440101\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440102\",
\"status\": \"enabled\",
\"name\": \"High Wind Stow Rule\",
\"description\": \"Stows trackers when wind speed exceeds threshold.\",
\"cooldownMinutes\": 15,
\"autoClear\": true,
\"clearAfterSeconds\": 300,
\"evaluationPeriodSeconds\": 60,
\"evaluationCountThreshold\": 3
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440101",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440102",
"status": "enabled",
"name": "High Wind Stow Rule",
"description": "Stows trackers when wind speed exceeds threshold.",
"cooldownMinutes": 15,
"autoClear": true,
"clearAfterSeconds": 300,
"evaluationPeriodSeconds": 60,
"evaluationCountThreshold": 3
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-solar',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440101',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440102',
'status' => 'enabled',
'name' => 'High Wind Stow Rule',
'description' => 'Stows trackers when wind speed exceeds threshold.',
'cooldownMinutes' => 15,
'autoClear' => true,
'clearAfterSeconds' => 300,
'evaluationPeriodSeconds' => 60,
'evaluationCountThreshold' => 3,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules'
payload = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440101",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440102",
"status": "enabled",
"name": "High Wind Stow Rule",
"description": "Stows trackers when wind speed exceeds threshold.",
"cooldownMinutes": 15,
"autoClear": true,
"clearAfterSeconds": 300,
"evaluationPeriodSeconds": 60,
"evaluationCountThreshold": 3
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-rules/{automationRule_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/f581f30c-6b48-3a74-85e7-64bb38d7158c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/f581f30c-6b48-3a74-85e7-64bb38d7158c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/f581f30c-6b48-3a74-85e7-64bb38d7158c',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/f581f30c-6b48-3a74-85e7-64bb38d7158c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/c/{company_slug}/automation-rules/{automationRule_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/2935c460-ec38-3387-88ca-aedcba0ae51f" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"disabled\",
\"name\": \"High Wind Stow Rule\",
\"description\": \"Updated description for wind stow rule.\",
\"cooldownMinutes\": 30,
\"autoClear\": true,
\"clearAfterSeconds\": 600,
\"evaluationPeriodSeconds\": 120,
\"evaluationCountThreshold\": 2
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/2935c460-ec38-3387-88ca-aedcba0ae51f"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "disabled",
"name": "High Wind Stow Rule",
"description": "Updated description for wind stow rule.",
"cooldownMinutes": 30,
"autoClear": true,
"clearAfterSeconds": 600,
"evaluationPeriodSeconds": 120,
"evaluationCountThreshold": 2
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/2935c460-ec38-3387-88ca-aedcba0ae51f',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'disabled',
'name' => 'High Wind Stow Rule',
'description' => 'Updated description for wind stow rule.',
'cooldownMinutes' => 30,
'autoClear' => true,
'clearAfterSeconds' => 600,
'evaluationPeriodSeconds' => 120,
'evaluationCountThreshold' => 2,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/2935c460-ec38-3387-88ca-aedcba0ae51f'
payload = {
"status": "disabled",
"name": "High Wind Stow Rule",
"description": "Updated description for wind stow rule.",
"cooldownMinutes": 30,
"autoClear": true,
"clearAfterSeconds": 600,
"evaluationPeriodSeconds": 120,
"evaluationCountThreshold": 2
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/automation-rules/{automationRule_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/ea7fc462-0684-3df5-b64d-67887d4d9ab9" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/ea7fc462-0684-3df5-b64d-67887d4d9ab9"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/ea7fc462-0684-3df5-b64d-67887d4d9ab9',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-rules/ea7fc462-0684-3df5-b64d-67887d4d9ab9'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-webhook-sources
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation-webhook-sources
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Farm Weather Provider\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440020\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Farm Weather Provider",
"farmUuid": "550e8400-e29b-41d4-a716-446655440020"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Farm Weather Provider',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440020',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources'
payload = {
"name": "Farm Weather Provider",
"farmUuid": "550e8400-e29b-41d4-a716-446655440020"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-webhook-sources/{automationInboundWebhookSource_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/82f764e1-4611-3048-b203-aa182a730f74" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/82f764e1-4611-3048-b203-aa182a730f74"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/82f764e1-4611-3048-b203-aa182a730f74',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/82f764e1-4611-3048-b203-aa182a730f74'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/automation-webhook-sources/{automationInboundWebhookSource_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/cfb66508-ddd5-3f5e-959d-e2764857a6e5" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/cfb66508-ddd5-3f5e-959d-e2764857a6e5"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/cfb66508-ddd5-3f5e-959d-e2764857a6e5',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/cfb66508-ddd5-3f5e-959d-e2764857a6e5'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation-webhook-sources/{automationInboundWebhookSource_uuid}/rotate
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/f467d3b6-63ea-3eb4-896f-a9c97ff6f92a/rotate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/f467d3b6-63ea-3eb4-896f-a9c97ff6f92a/rotate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/f467d3b6-63ea-3eb4-896f-a9c97ff6f92a/rotate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-webhook-sources/f467d3b6-63ea-3eb4-896f-a9c97ff6f92a/rotate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-events
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-events/{automationEvent_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/02ccea26-141c-4f51-9aea-470b69cea45c'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation-events/manual
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/manual" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"emergency_stow\",
\"payload\": {
\"reason\": \"high_wind\",
\"speed\": 75
},
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440002\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/manual"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "emergency_stow",
"payload": {
"reason": "high_wind",
"speed": 75
},
"collectorUuid": "550e8400-e29b-41d4-a716-446655440001",
"farmUuid": "550e8400-e29b-41d4-a716-446655440002"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/manual',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'emergency_stow',
'payload' => [
'reason' => 'high_wind',
'speed' => 75,
],
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440001',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440002',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-events/manual'
payload = {
"name": "emergency_stow",
"payload": {
"reason": "high_wind",
"speed": 75
},
"collectorUuid": "550e8400-e29b-41d4-a716-446655440001",
"farmUuid": "550e8400-e29b-41d4-a716-446655440002"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-executions
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation-executions/{automationExecution_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions/31e0f72f-9c0b-3245-8bb1-c802bfc06535" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions/31e0f72f-9c0b-3245-8bb1-c802bfc06535"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions/31e0f72f-9c0b-3245-8bb1-c802bfc06535',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation-executions/31e0f72f-9c0b-3245-8bb1-c802bfc06535'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/fire-event
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/fire-event" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"manual_stow_triggered\",
\"payload\": {
\"reason\": \"high_wind\",
\"windSpeed\": 21.6
},
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440040\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440041\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/fire-event"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "manual_stow_triggered",
"payload": {
"reason": "high_wind",
"windSpeed": 21.6
},
"farmUuid": "550e8400-e29b-41d4-a716-446655440040",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440041"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/fire-event',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'manual_stow_triggered',
'payload' => [
'reason' => 'high_wind',
'windSpeed' => 21.6,
],
'farmUuid' => '550e8400-e29b-41d4-a716-446655440040',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440041',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/fire-event'
payload = {
"name": "manual_stow_triggered",
"payload": {
"reason": "high_wind",
"windSpeed": 21.6
},
"farmUuid": "550e8400-e29b-41d4-a716-446655440040",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440041"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/dry-run-match
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/dry-run-match" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"ruleUuid\": \"550e8400-e29b-41d4-a716-446655440030\",
\"eventPayload\": {
\"eventName\": \"wind_alert\",
\"speed\": 72.4,
\"unit\": \"kmh\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/dry-run-match"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ruleUuid": "550e8400-e29b-41d4-a716-446655440030",
"eventPayload": {
"eventName": "wind_alert",
"speed": 72.4,
"unit": "kmh"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/dry-run-match',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'ruleUuid' => '550e8400-e29b-41d4-a716-446655440030',
'eventPayload' => [
'eventName' => 'wind_alert',
'speed' => 72.4,
'unit' => 'kmh',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/dry-run-match'
payload = {
"ruleUuid": "550e8400-e29b-41d4-a716-446655440030",
"eventPayload": {
"eventName": "wind_alert",
"speed": 72.4,
"unit": "kmh"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/preview-template
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/preview-template" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"template\": \"Alert: {{ collector.name }} exceeded {{ threshold }}.\",
\"context\": {
\"collector\": {
\"name\": \"NCU-12\"
},
\"threshold\": 85
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/preview-template"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"template": "Alert: {{ collector.name }} exceeded {{ threshold }}.",
"context": {
"collector": {
"name": "NCU-12"
},
"threshold": 85
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/preview-template',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'template' => 'Alert: {{ collector.name }} exceeded {{ threshold }}.',
'context' => [
'collector' => [
'name' => 'NCU-12',
],
'threshold' => 85,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/preview-template'
payload = {
"template": "Alert: {{ collector.name }} exceeded {{ threshold }}.",
"context": {
"collector": {
"name": "NCU-12"
},
"threshold": 85
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/send-notification
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/send-notification" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationPolicyUuid\": \"550e8400-e29b-41d4-a716-446655440050\",
\"recipientEmail\": \"alerts@example.com\",
\"context\": {
\"collectorName\": \"NCU-5\",
\"alarm\": \"overheat\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/send-notification"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationPolicyUuid": "550e8400-e29b-41d4-a716-446655440050",
"recipientEmail": "alerts@example.com",
"context": {
"collectorName": "NCU-5",
"alarm": "overheat"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/send-notification',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationPolicyUuid' => '550e8400-e29b-41d4-a716-446655440050',
'recipientEmail' => 'alerts@example.com',
'context' => [
'collectorName' => 'NCU-5',
'alarm' => 'overheat',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/send-notification'
payload = {
"notificationPolicyUuid": "550e8400-e29b-41d4-a716-446655440050",
"recipientEmail": "alerts@example.com",
"context": {
"collectorName": "NCU-5",
"alarm": "overheat"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"weather-station-test-endpoint\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "weather-station-test-endpoint"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'weather-station-test-endpoint',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints'
payload = {
"name": "weather-station-test-endpoint"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/b08e44f2-9bb2-38f6-82cb-663878dc1782" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/b08e44f2-9bb2-38f6-82cb-663878dc1782"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/b08e44f2-9bb2-38f6-82cb-663878dc1782',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/b08e44f2-9bb2-38f6-82cb-663878dc1782'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/26ab52fd-9e52-3207-875c-c4e4e7d4d54d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/26ab52fd-9e52-3207-875c-c4e4e7d4d54d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"enabled": true
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/26ab52fd-9e52-3207-875c-c4e4e7d4d54d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/26ab52fd-9e52-3207-875c-c4e4e7d4d54d'
payload = {
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/rotate
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/efd2d379-3e27-3497-acb9-530dc08d9e3b/rotate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/efd2d379-3e27-3497-acb9-530dc08d9e3b/rotate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/efd2d379-3e27-3497-acb9-530dc08d9e3b/rotate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/efd2d379-3e27-3497-acb9-530dc08d9e3b/rotate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/3ba1c96f-c0b4-3ff5-8482-a0786b4b429a" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/3ba1c96f-c0b4-3ff5-8482-a0786b4b429a"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/3ba1c96f-c0b4-3ff5-8482-a0786b4b429a',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/3ba1c96f-c0b4-3ff5-8482-a0786b4b429a'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/events
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/9523d35d-71d3-35e6-89dd-6e87c1e440dc/events?perPage=25&page=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/9523d35d-71d3-35e6-89dd-6e87c1e440dc/events"
);
const params = {
"perPage": "25",
"page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/9523d35d-71d3-35e6-89dd-6e87c1e440dc/events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'perPage' => '25',
'page' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/9523d35d-71d3-35e6-89dd-6e87c1e440dc/events'
params = {
'perPage': '25',
'page': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/events/latest
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/c9494408-88bf-340b-a9d0-d71145e7f42e/events/latest" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/c9494408-88bf-340b-a9d0-d71145e7f42e/events/latest"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/c9494408-88bf-340b-a9d0-d71145e7f42e/events/latest',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/c9494408-88bf-340b-a9d0-d71145e7f42e/events/latest'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/events
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/d5598939-cab2-3cea-b945-9f2f155c115f/events" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/d5598939-cab2-3cea-b945-9f2f155c115f/events"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/d5598939-cab2-3cea-b945-9f2f155c115f/events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-endpoints/d5598939-cab2-3cea-b945-9f2f155c115f/events'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/automation/test/webhook-events/{automationTestWebhookEvent_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/396228d8-5c65-3b7b-8655-6c8e2c49392f" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/396228d8-5c65-3b7b-8655-6c8e2c49392f"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/396228d8-5c65-3b7b-8655-6c8e2c49392f',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/396228d8-5c65-3b7b-8655-6c8e2c49392f'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/automation/test/webhook-events/{automationTestWebhookEvent_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/d797fbcb-0fa1-3288-b79d-d462d56c833e" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/d797fbcb-0fa1-3288-b79d-d462d56c833e"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/d797fbcb-0fa1-3288-b79d-d462d56c833e',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-events/d797fbcb-0fa1-3288-b79d-d462d56c833e'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/automation/test/webhook-inbox/setup
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-inbox/setup" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Automation Test Inbox\",
\"resetEvents\": false,
\"rotateSecret\": true,
\"notificationChannelUuid\": \"550e8400-e29b-41d4-a716-446655440010\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-inbox/setup"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Automation Test Inbox",
"resetEvents": false,
"rotateSecret": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440010"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-inbox/setup',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Automation Test Inbox',
'resetEvents' => false,
'rotateSecret' => true,
'notificationChannelUuid' => '550e8400-e29b-41d4-a716-446655440010',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/automation/test/webhook-inbox/setup'
payload = {
"name": "Automation Test Inbox",
"resetEvents": false,
"rotateSecret": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440010"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collectors
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collectors" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collectors',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/collectors
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collectors" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"NCU-001\",
\"description\": \"Main control unit for section A\",
\"collectorTypeSlug\": \"ncu\",
\"farmSectionUuid\": \"550e8400-e29b-41d4-a716-446655440123\",
\"serial\": \"NCU-2025-001234\",
\"enabled\": true,
\"locationJson\": {
\"latitude\": -33.8688,
\"longitude\": 151.2093
},
\"parentUuid\": \"550e8400-e29b-41d4-a716-446655440001\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "NCU-001",
"description": "Main control unit for section A",
"collectorTypeSlug": "ncu",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123",
"serial": "NCU-2025-001234",
"enabled": true,
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"parentUuid": "550e8400-e29b-41d4-a716-446655440001"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collectors',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'NCU-001',
'description' => 'Main control unit for section A',
'collectorTypeSlug' => 'ncu',
'farmSectionUuid' => '550e8400-e29b-41d4-a716-446655440123',
'serial' => 'NCU-2025-001234',
'enabled' => true,
'locationJson' => [
'latitude' => -33.8688,
'longitude' => 151.2093,
],
'parentUuid' => '550e8400-e29b-41d4-a716-446655440001',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors'
payload = {
"name": "NCU-001",
"description": "Main control unit for section A",
"collectorTypeSlug": "ncu",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123",
"serial": "NCU-2025-001234",
"enabled": true,
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"parentUuid": "550e8400-e29b-41d4-a716-446655440001"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collectors/summary
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collectors/summary" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/summary"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collectors/summary',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/summary'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/collectors/register
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collectors/register" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"serial\": \"NCU-2025-001234\",
\"deviceModelTypeSlug\": \"ncu-x100-001\",
\"hardwareVersionTypeSlug\": \"v1-0-0\",
\"manufacturedAt\": \"2025-01-15\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/register"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"serial": "NCU-2025-001234",
"deviceModelTypeSlug": "ncu-x100-001",
"hardwareVersionTypeSlug": "v1-0-0",
"manufacturedAt": "2025-01-15"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collectors/register',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'serial' => 'NCU-2025-001234',
'deviceModelTypeSlug' => 'ncu-x100-001',
'hardwareVersionTypeSlug' => 'v1-0-0',
'manufacturedAt' => '2025-01-15',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/register'
payload = {
"serial": "NCU-2025-001234",
"deviceModelTypeSlug": "ncu-x100-001",
"hardwareVersionTypeSlug": "v1-0-0",
"manufacturedAt": "2025-01-15"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/collectors/bulk-register
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collectors/bulk-register" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"devices\": [
{
\"serial\": \"NCU-2025-001234\",
\"deviceModelTypeSlug\": \"ncu-x100-001\",
\"hardwareVersionTypeSlug\": \"v1-0-0\",
\"manufacturedAt\": \"2025-01-15\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/bulk-register"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"devices": [
{
"serial": "NCU-2025-001234",
"deviceModelTypeSlug": "ncu-x100-001",
"hardwareVersionTypeSlug": "v1-0-0",
"manufacturedAt": "2025-01-15"
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collectors/bulk-register',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'devices' => [
[
'serial' => 'NCU-2025-001234',
'deviceModelTypeSlug' => 'ncu-x100-001',
'hardwareVersionTypeSlug' => 'v1-0-0',
'manufacturedAt' => '2025-01-15',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/bulk-register'
payload = {
"devices": [
{
"serial": "NCU-2025-001234",
"deviceModelTypeSlug": "ncu-x100-001",
"hardwareVersionTypeSlug": "v1-0-0",
"manufacturedAt": "2025-01-15"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collectors/{uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/collectors/{uuid}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"NCU-001 Updated\",
\"description\": \"Updated control unit for section A\",
\"collectorTypeSlug\": \"tcu\",
\"farmSectionUuid\": \"550e8400-e29b-41d4-a716-446655440123\",
\"serial\": \"NCU-2025-001234\",
\"enabled\": true,
\"locationJson\": {
\"latitude\": -33.8688,
\"longitude\": 151.2093
},
\"parentUuid\": \"550e8400-e29b-41d4-a716-446655440001\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "NCU-001 Updated",
"description": "Updated control unit for section A",
"collectorTypeSlug": "tcu",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123",
"serial": "NCU-2025-001234",
"enabled": true,
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"parentUuid": "550e8400-e29b-41d4-a716-446655440001"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'NCU-001 Updated',
'description' => 'Updated control unit for section A',
'collectorTypeSlug' => 'tcu',
'farmSectionUuid' => '550e8400-e29b-41d4-a716-446655440123',
'serial' => 'NCU-2025-001234',
'enabled' => true,
'locationJson' => [
'latitude' => -33.8688,
'longitude' => 151.2093,
],
'parentUuid' => '550e8400-e29b-41d4-a716-446655440001',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa'
payload = {
"name": "NCU-001 Updated",
"description": "Updated control unit for section A",
"collectorTypeSlug": "tcu",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440123",
"serial": "NCU-2025-001234",
"enabled": true,
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"parentUuid": "550e8400-e29b-41d4-a716-446655440001"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/collectors/{uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collectors/{collector_uuid}/status-history
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status-history" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status-history"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status-history',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status-history'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/collectors/{collector_uuid}/status
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"testing\",
\"reason\": \"Moving to testing phase after QA review\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "testing",
"reason": "Moving to testing phase after QA review"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'testing',
'reason' => 'Moving to testing phase after QA review',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/status'
payload = {
"status": "testing",
"reason": "Moving to testing phase after QA review"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collectors/{collector_uuid}/timeline
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/timeline'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/collectors/{collector_uuid}/transfer
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/transfer" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"targetCompanySlug\": \"acme-solar\",
\"reason\": \"Customer contract change\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/transfer"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"targetCompanySlug": "acme-solar",
"reason": "Customer contract change"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/transfer',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'targetCompanySlug' => 'acme-solar',
'reason' => 'Customer contract change',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/transfer'
payload = {
"targetCompanySlug": "acme-solar",
"reason": "Customer contract change"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/unassigned-collectors
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/unassigned-collectors" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/unassigned-collectors"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/unassigned-collectors',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/unassigned-collectors'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/collectors/{collector_uuid}/assign
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/assign" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"parentCollectorUuid\": \"550e8400-e29b-41d4-a716-446655440321\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/assign"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"parentCollectorUuid": "550e8400-e29b-41d4-a716-446655440321"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/assign',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'parentCollectorUuid' => '550e8400-e29b-41d4-a716-446655440321',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/assign'
payload = {
"parentCollectorUuid": "550e8400-e29b-41d4-a716-446655440321"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/collectors/{collector_uuid}/unlink
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unlink" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unlink"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unlink',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/unlink'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
PATCH api/v1/sa/collectors/{collector_uuid}/change-type
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/change-type" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorTypeSlug\": \"tcu\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/change-type"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorTypeSlug": "tcu"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/change-type',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorTypeSlug' => 'tcu',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/change-type'
payload = {
"collectorTypeSlug": "tcu"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Assign a warranty to a collector.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"warrantyTypeSlug\": \"standard-two-year\",
\"warrantyStart\": \"2026-02-17\",
\"warrantyEnd\": \"2028-02-17\",
\"notes\": \"Coverage includes actuator and controller board.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"warrantyTypeSlug": "standard-two-year",
"warrantyStart": "2026-02-17",
"warrantyEnd": "2028-02-17",
"notes": "Coverage includes actuator and controller board."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'warrantyTypeSlug' => 'standard-two-year',
'warrantyStart' => '2026-02-17',
'warrantyEnd' => '2028-02-17',
'notes' => 'Coverage includes actuator and controller board.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collectors/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/warranty'
payload = {
"warrantyTypeSlug": "standard-two-year",
"warrantyStart": "2026-02-17",
"warrantyEnd": "2028-02-17",
"notes": "Coverage includes actuator and controller board."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/farms
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/farms
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Solar Farm Alpha\",
\"description\": \"Main solar installation in the northern region\",
\"companySlug\": \"solar-energy-corp\",
\"locationJson\": {
\"latitude\": -33.8688,
\"longitude\": 151.2093
},
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Solar Farm Alpha",
"description": "Main solar installation in the northern region",
"companySlug": "solar-energy-corp",
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Solar Farm Alpha',
'description' => 'Main solar installation in the northern region',
'companySlug' => 'solar-energy-corp',
'locationJson' => [
'latitude' => -33.8688,
'longitude' => 151.2093,
],
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms'
payload = {
"name": "Solar Farm Alpha",
"description": "Main solar installation in the northern region",
"companySlug": "solar-energy-corp",
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/farms/{uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/farms/{uuid}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Solar Farm Alpha Updated\",
\"description\": \"Updated solar installation details\",
\"locationJson\": {
\"latitude\": -33.8688,
\"longitude\": 151.2093
},
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Solar Farm Alpha Updated",
"description": "Updated solar installation details",
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Solar Farm Alpha Updated',
'description' => 'Updated solar installation details',
'locationJson' => [
'latitude' => -33.8688,
'longitude' => 151.2093,
],
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b'
payload = {
"name": "Solar Farm Alpha Updated",
"description": "Updated solar installation details",
"locationJson": {
"latitude": -33.8688,
"longitude": 151.2093
},
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/farms/{uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Bulk assign collectors to a farm
requires authentication
Assign multiple collectors to a farm in a single request. Collectors must belong to the same company as the farm.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collectors/bulk-assign" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorUuids\": [
\"550e8400-e29b-41d4-a716-446655440001\",
\"550e8400-e29b-41d4-a716-446655440002\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collectors/bulk-assign"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorUuids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collectors/bulk-assign',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorUuids' => [
'550e8400-e29b-41d4-a716-446655440001',
'550e8400-e29b-41d4-a716-446655440002',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/collectors/bulk-assign'
payload = {
"collectorUuids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Assigned 5 collector(s) to farm",
"data": {
"assigned": 5,
"skipped": 2,
"collectors": [...]
}
}
Received response:
Request failed with error:
List sections for a farm
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections?enabled_only=1&page=1&perPage=25" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections"
);
const params = {
"enabled_only": "1",
"page": "1",
"perPage": "25",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled_only' => '1',
'page' => '1',
'perPage' => '25',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections'
params = {
'enabled_only': '1',
'page': '1',
'perPage': '25',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
},
{
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
]
}
Received response:
Request failed with error:
Create a new farm section
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Field\",
\"description\": \"Northern section of the farm\",
\"enabled\": true,
\"orderColumn\": 1,
\"locationJson\": {
\"latitude\": 51.509865,
\"longitude\": -0.118092
},
\"metadata\": {
\"notes\": \"Primary section\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Field",
"description": "Northern section of the farm",
"enabled": true,
"orderColumn": 1,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Primary section"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Field',
'description' => 'Northern section of the farm',
'enabled' => true,
'orderColumn' => 1,
'locationJson' => [
'latitude' => 51.509865,
'longitude' => -0.118092,
],
'metadata' => [
'notes' => 'Primary section',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/sections'
payload = {
"name": "North Field",
"description": "Northern section of the farm",
"enabled": true,
"orderColumn": 1,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Primary section"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
}
Received response:
Request failed with error:
Show a farm section
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
}
Received response:
Request failed with error:
Update a farm section
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"North Field Updated\",
\"description\": \"Updated description\",
\"enabled\": false,
\"orderColumn\": 2,
\"locationJson\": {
\"latitude\": 51.509865,
\"longitude\": -0.118092
},
\"metadata\": {
\"notes\": \"Updated notes\"
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "North Field Updated",
"description": "Updated description",
"enabled": false,
"orderColumn": 2,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Updated notes"
}
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'North Field Updated',
'description' => 'Updated description',
'enabled' => false,
'orderColumn' => 2,
'locationJson' => [
'latitude' => 51.509865,
'longitude' => -0.118092,
],
'metadata' => [
'notes' => 'Updated notes',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1'
payload = {
"name": "North Field Updated",
"description": "Updated description",
"enabled": false,
"orderColumn": 2,
"locationJson": {
"latitude": 51.509865,
"longitude": -0.118092
},
"metadata": {
"notes": "Updated notes"
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "147594ba-6f75-4b06-9daf-4c9dc58b34c1",
"name": "Unassigned",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": null,
"locationJson": null,
"metadata": null,
"createdAt": "2026-01-14T19:48:46+00:00",
"updatedAt": "2026-01-16T10:41:36+00:00",
"isUnassigned": true
}
}
Received response:
Request failed with error:
Delete a farm section
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (204):
[Empty response]
Received response:
Request failed with error:
Bulk assign collectors to section
requires authentication
Assigns multiple collectors to a specific farm section. The farm is derived from the section automatically. Collectors already on this farm+section are skipped.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorUuids\": [
\"550e8400-e29b-41d4-a716-446655440001\",
\"550e8400-e29b-41d4-a716-446655440002\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorUuids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorUuids' => [
'550e8400-e29b-41d4-a716-446655440001',
'550e8400-e29b-41d4-a716-446655440002',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farm-sections/147594ba-6f75-4b06-9daf-4c9dc58b34c1/collectors/bulk-assign'
payload = {
"collectorUuids": [
"550e8400-e29b-41d4-a716-446655440001",
"550e8400-e29b-41d4-a716-446655440002"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{"data": {"assigned": 2, "skipped": 1, "collectors": [...]}}
Example response (404):
{
"error": "Section not found"
}
Example response (422):
{
"message": "Validation failed",
"errors": {
"collectorUuids": [
"At least one collector UUID is required"
]
}
}
Received response:
Request failed with error:
List trackers for a farm
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers?sectionUuid=550e8400-e29b-41d4-a716-446655440001&isCurrent=1&placed=1§ioned=1&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers"
);
const params = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"isCurrent": "1",
"placed": "1",
"sectioned": "1",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'sectionUuid' => '550e8400-e29b-41d4-a716-446655440001',
'isCurrent' => '1',
'placed' => '1',
'sectioned' => '1',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers'
params = {
'sectionUuid': '550e8400-e29b-41d4-a716-446655440001',
'isCurrent': '1',
'placed': '1',
'sectioned': '1',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": [
{
"uuid": "a205ee53-a5ce-4ecf-8103-d1ace6488432",
"collectorUuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorType": "TCU",
"farmUuid": null,
"farmSectionUuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"row": 0,
"column": 0,
"widthM": "5.00",
"heightM": "2.00",
"angleDeg": "0.00",
"location": null,
"locationJson": null,
"metadata": null,
"isCurrent": false,
"activeFrom": "2026-01-14T20:08:43+00:00",
"activeTo": "2026-03-10T09:42:17+00:00",
"createdAt": "2026-01-14T20:08:43+00:00",
"updatedAt": "2026-03-10T09:42:17+00:00",
"collector": {
"uuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorTypeSlug": "tcu",
"serial": "9",
"name": "Auto-created TCU Collector 9",
"enabled": true
},
"farmSection": {
"uuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"name": "Section1",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": {
"lat": -25.860111769169364,
"lng": 28.194855451583862
},
"locationJson": {
"latitude": -25.860111769169364,
"longitude": 28.194855451583862
},
"metadata": null,
"createdAt": "2025-12-17T18:48:47+00:00",
"updatedAt": "2026-02-08T10:22:07+00:00",
"isUnassigned": false
}
},
{
"uuid": "a205ee53-a5ce-4ecf-8103-d1ace6488432",
"collectorUuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorType": "TCU",
"farmUuid": null,
"farmSectionUuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"row": 0,
"column": 0,
"widthM": "5.00",
"heightM": "2.00",
"angleDeg": "0.00",
"location": null,
"locationJson": null,
"metadata": null,
"isCurrent": false,
"activeFrom": "2026-01-14T20:08:43+00:00",
"activeTo": "2026-03-10T09:42:17+00:00",
"createdAt": "2026-01-14T20:08:43+00:00",
"updatedAt": "2026-03-10T09:42:17+00:00",
"collector": {
"uuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorTypeSlug": "tcu",
"serial": "9",
"name": "Auto-created TCU Collector 9",
"enabled": true
},
"farmSection": {
"uuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"name": "Section1",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": {
"lat": -25.860111769169364,
"lng": 28.194855451583862
},
"locationJson": {
"latitude": -25.860111769169364,
"longitude": 28.194855451583862
},
"metadata": null,
"createdAt": "2025-12-17T18:48:47+00:00",
"updatedAt": "2026-02-08T10:22:07+00:00",
"isUnassigned": false
}
}
]
}
Received response:
Request failed with error:
Get tracker statistics for a farm
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/stats" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/stats"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/stats',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/stats'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"totalCurrent": 150,
"totalHistoric": 45,
"placed": 120,
"unplaced": 30,
"sectioned": 100,
"unsectioned": 50,
"placementPercentage": 80
}
Received response:
Request failed with error:
Get section statistics for a farm
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/section-stats" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/section-stats"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/section-stats',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/section-stats'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"sections": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"name": "North Field",
"slug": "north-field",
"enabled": true,
"orderColumn": 1,
"trackerCount": 50,
"placedCount": 45,
"unplacedCount": 5
}
]
}
Received response:
Request failed with error:
Bulk update trackers
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/bulk-update" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tracker_uuids\": [
\"550e8400-e29b-41d4-a716-446655440001\"
],
\"row\": 5,
\"column\": 10,
\"width_m\": \"6.0\",
\"height_m\": \"2.5\",
\"angle_deg\": \"15.0\",
\"farm_section_uuid\": \"550e8400-e29b-41d4-a716-446655440002\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/bulk-update"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"tracker_uuids": [
"550e8400-e29b-41d4-a716-446655440001"
],
"row": 5,
"column": 10,
"width_m": "6.0",
"height_m": "2.5",
"angle_deg": "15.0",
"farm_section_uuid": "550e8400-e29b-41d4-a716-446655440002"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/bulk-update',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'tracker_uuids' => [
'550e8400-e29b-41d4-a716-446655440001',
],
'row' => 5,
'column' => 10,
'width_m' => '6.0',
'height_m' => '2.5',
'angle_deg' => '15.0',
'farm_section_uuid' => '550e8400-e29b-41d4-a716-446655440002',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/bulk-update'
payload = {
"tracker_uuids": [
"550e8400-e29b-41d4-a716-446655440001"
],
"row": 5,
"column": 10,
"width_m": "6.0",
"height_m": "2.5",
"angle_deg": "15.0",
"farm_section_uuid": "550e8400-e29b-41d4-a716-446655440002"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Updated 10 trackers",
"count": 10
}
Received response:
Request failed with error:
Auto-place trackers in a grid
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"section_uuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"tracker_uuids\": [
\"550e8400-e29b-41d4-a716-446655440002\"
],
\"start_row\": 1,
\"start_column\": 1,
\"gap_width_m\": \"1.0\",
\"gap_height_m\": \"1.0\",
\"columns_per_row\": 10,
\"angle_deg\": \"0.0\",
\"apply\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"section_uuid": "550e8400-e29b-41d4-a716-446655440001",
"tracker_uuids": [
"550e8400-e29b-41d4-a716-446655440002"
],
"start_row": 1,
"start_column": 1,
"gap_width_m": "1.0",
"gap_height_m": "1.0",
"columns_per_row": 10,
"angle_deg": "0.0",
"apply": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'section_uuid' => '550e8400-e29b-41d4-a716-446655440001',
'tracker_uuids' => [
'550e8400-e29b-41d4-a716-446655440002',
],
'start_row' => 1,
'start_column' => 1,
'gap_width_m' => '1.0',
'gap_height_m' => '1.0',
'columns_per_row' => 10,
'angle_deg' => '0.0',
'apply' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place'
payload = {
"section_uuid": "550e8400-e29b-41d4-a716-446655440001",
"tracker_uuids": [
"550e8400-e29b-41d4-a716-446655440002"
],
"start_row": 1,
"start_column": 1,
"gap_width_m": "1.0",
"gap_height_m": "1.0",
"columns_per_row": 10,
"angle_deg": "0.0",
"apply": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Trackers placed successfully",
"applied": true,
"count": 25,
"placements": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440002",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440003",
"row": 1,
"column": 1,
"angleDeg": 0
}
],
"section": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"name": "North Field",
"slug": "north-field"
}
}
Received response:
Request failed with error:
Auto-place unplaced trackers
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place-unplaced" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"section_uuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"start_row\": 1,
\"start_column\": 1,
\"columns_per_row\": 10,
\"apply\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place-unplaced"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"section_uuid": "550e8400-e29b-41d4-a716-446655440001",
"start_row": 1,
"start_column": 1,
"columns_per_row": 10,
"apply": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place-unplaced',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'section_uuid' => '550e8400-e29b-41d4-a716-446655440001',
'start_row' => 1,
'start_column' => 1,
'columns_per_row' => 10,
'apply' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/auto-place-unplaced'
payload = {
"section_uuid": "550e8400-e29b-41d4-a716-446655440001",
"start_row": 1,
"start_column": 1,
"columns_per_row": 10,
"apply": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Unplaced trackers filled successfully",
"applied": true,
"count": 15,
"placements": [...]
}
Received response:
Request failed with error:
Validate layout for conflicts
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/validate-layout?sectionUuid=550e8400-e29b-41d4-a716-446655440001" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/validate-layout"
);
const params = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/validate-layout',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'sectionUuid' => '550e8400-e29b-41d4-a716-446655440001',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/validate-layout'
params = {
'sectionUuid': '550e8400-e29b-41d4-a716-446655440001',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"valid": false,
"totalTrackers": 150,
"conflicts": 2,
"duplicates": [
{
"row": 5,
"column": 10,
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"trackerUuids": [
"uuid1",
"uuid2"
]
}
]
}
Received response:
Request failed with error:
Resolve overlapping trackers
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/resolve-overlaps" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"sectionUuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"apply\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/resolve-overlaps"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"apply": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/resolve-overlaps',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'sectionUuid' => '550e8400-e29b-41d4-a716-446655440001',
'apply' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/resolve-overlaps'
payload = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"apply": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Resolved 2 overlapping tracker(s)",
"data": {
"applied": true,
"resolvedCount": 2,
"remainingConflictCount": 0,
"placements": [
{
"trackerUuid": "550e8400-e29b-41d4-a716-446655440001",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440002",
"previousRow": 1,
"previousColumn": 1,
"newRow": 1,
"newColumn": 2
}
]
}
}
Received response:
Request failed with error:
Snap trackers to a section
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/snap-to-section" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"sectionUuid\": \"550e8400-e29b-41d4-a716-446655440001\",
\"trackerUuids\": [
\"550e8400-e29b-41d4-a716-446655440002\"
],
\"startRow\": 1,
\"startColumn\": 1,
\"columnsPerRow\": 10,
\"apply\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/snap-to-section"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"trackerUuids": [
"550e8400-e29b-41d4-a716-446655440002"
],
"startRow": 1,
"startColumn": 1,
"columnsPerRow": 10,
"apply": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/snap-to-section',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'sectionUuid' => '550e8400-e29b-41d4-a716-446655440001',
'trackerUuids' => [
'550e8400-e29b-41d4-a716-446655440002',
],
'startRow' => 1,
'startColumn' => 1,
'columnsPerRow' => 10,
'apply' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/farms/c9b4c54e-a135-4a7f-86c9-7f03b9329a1b/trackers/snap-to-section'
payload = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"trackerUuids": [
"550e8400-e29b-41d4-a716-446655440002"
],
"startRow": 1,
"startColumn": 1,
"columnsPerRow": 10,
"apply": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Snapped 5 tracker(s) to section North Field",
"data": {
"applied": true,
"count": 5,
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"sectionName": "North Field",
"placements": [...]
}
}
Received response:
Request failed with error:
List trackers across farms (optionally filtered by farm UUID)
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/trackers?farmUuid=550e8400-e29b-41d4-a716-446655440000§ionUuid=550e8400-e29b-41d4-a716-446655440001&isCurrent=1&placed=1§ioned=1&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"farmUuid\": \"dddabba7-d68f-37b0-9e5d-da2b9df848c6\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/trackers"
);
const params = {
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"sectionUuid": "550e8400-e29b-41d4-a716-446655440001",
"isCurrent": "1",
"placed": "1",
"sectioned": "1",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"farmUuid": "dddabba7-d68f-37b0-9e5d-da2b9df848c6"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/trackers',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'farmUuid' => '550e8400-e29b-41d4-a716-446655440000',
'sectionUuid' => '550e8400-e29b-41d4-a716-446655440001',
'isCurrent' => '1',
'placed' => '1',
'sectioned' => '1',
'perPage' => '50',
],
'json' => [
'farmUuid' => 'dddabba7-d68f-37b0-9e5d-da2b9df848c6',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/trackers'
payload = {
"farmUuid": "dddabba7-d68f-37b0-9e5d-da2b9df848c6"
}
params = {
'farmUuid': '550e8400-e29b-41d4-a716-446655440000',
'sectionUuid': '550e8400-e29b-41d4-a716-446655440001',
'isCurrent': '1',
'placed': '1',
'sectioned': '1',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload, params=params)
response.json()Example response (200):
{
"data": [
{
"uuid": "a205ee53-a5ce-4ecf-8103-d1ace6488432",
"collectorUuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorType": "TCU",
"farmUuid": null,
"farmSectionUuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"row": 0,
"column": 0,
"widthM": "5.00",
"heightM": "2.00",
"angleDeg": "0.00",
"location": null,
"locationJson": null,
"metadata": null,
"isCurrent": false,
"activeFrom": "2026-01-14T20:08:43+00:00",
"activeTo": "2026-03-10T09:42:17+00:00",
"createdAt": "2026-01-14T20:08:43+00:00",
"updatedAt": "2026-03-10T09:42:17+00:00",
"collector": {
"uuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorTypeSlug": "tcu",
"serial": "9",
"name": "Auto-created TCU Collector 9",
"enabled": true
},
"farmSection": {
"uuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"name": "Section1",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": {
"lat": -25.860111769169364,
"lng": 28.194855451583862
},
"locationJson": {
"latitude": -25.860111769169364,
"longitude": 28.194855451583862
},
"metadata": null,
"createdAt": "2025-12-17T18:48:47+00:00",
"updatedAt": "2026-02-08T10:22:07+00:00",
"isUnassigned": false
}
},
{
"uuid": "a205ee53-a5ce-4ecf-8103-d1ace6488432",
"collectorUuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorType": "TCU",
"farmUuid": null,
"farmSectionUuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"row": 0,
"column": 0,
"widthM": "5.00",
"heightM": "2.00",
"angleDeg": "0.00",
"location": null,
"locationJson": null,
"metadata": null,
"isCurrent": false,
"activeFrom": "2026-01-14T20:08:43+00:00",
"activeTo": "2026-03-10T09:42:17+00:00",
"createdAt": "2026-01-14T20:08:43+00:00",
"updatedAt": "2026-03-10T09:42:17+00:00",
"collector": {
"uuid": "a5ed3d06-9ac9-4eaf-8ea3-c7ec9dcafe54",
"collectorTypeSlug": "tcu",
"serial": "9",
"name": "Auto-created TCU Collector 9",
"enabled": true
},
"farmSection": {
"uuid": "9d97ca6c-31f2-45e3-a586-2656291af1eb",
"name": "Section1",
"description": "",
"enabled": true,
"orderColumn": 0,
"location": {
"lat": -25.860111769169364,
"lng": 28.194855451583862
},
"locationJson": {
"latitude": -25.860111769169364,
"longitude": 28.194855451583862
},
"metadata": null,
"createdAt": "2025-12-17T18:48:47+00:00",
"updatedAt": "2026-02-08T10:22:07+00:00",
"isUnassigned": false
}
}
]
}
Received response:
Request failed with error:
Update a single tracker
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"row\": 5,
\"column\": 10,
\"widthM\": \"6.0\",
\"heightM\": \"2.5\",
\"angleDeg\": \"15.0\",
\"farmSectionUuid\": \"550e8400-e29b-41d4-a716-446655440002\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"row": 5,
"column": 10,
"widthM": "6.0",
"heightM": "2.5",
"angleDeg": "15.0",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440002"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'row' => 5,
'column' => 10,
'widthM' => '6.0',
'heightM' => '2.5',
'angleDeg' => '15.0',
'farmSectionUuid' => '550e8400-e29b-41d4-a716-446655440002',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432'
payload = {
"row": 5,
"column": 10,
"widthM": "6.0",
"heightM": "2.5",
"angleDeg": "15.0",
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440002"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Tracker updated successfully",
"data": {
"trackerUuid": "550e8400-e29b-41d4-a716-446655440001",
"layout": {
"uuid": "550e8400-e29b-41d4-a716-446655440001",
"row": 5,
"column": 10,
"widthM": 6,
"heightM": 2.5,
"angleDeg": 15,
"farmSectionUuid": "550e8400-e29b-41d4-a716-446655440002"
}
}
}
Received response:
Request failed with error:
Delete (end) a single tracker
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/trackers/a205ee53-a5ce-4ecf-8103-d1ace6488432'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Example response (204, Success):
[Empty response]
Example response (404, Not Found):
{
"success": false,
"message": "Tracker not found"
}
Received response:
Request failed with error:
Copy collector locations to trackers
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/trackers/copy-locations" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tracker_uuids\": [
\"550e8400-e29b-41d4-a716-446655440001\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/trackers/copy-locations"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"tracker_uuids": [
"550e8400-e29b-41d4-a716-446655440001"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/trackers/copy-locations',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'tracker_uuids' => [
'550e8400-e29b-41d4-a716-446655440001',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/trackers/copy-locations'
payload = {
"tracker_uuids": [
"550e8400-e29b-41d4-a716-446655440001"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"success": true,
"message": "Copied locations for 10 trackers",
"count": 10
}
Received response:
Request failed with error:
GET api/v1/sa/data-unit-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-unit-types?enabled=1&search=celsius&dataTypeSlug=numeric&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-unit-types"
);
const params = {
"enabled": "1",
"search": "celsius",
"dataTypeSlug": "numeric",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-unit-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'search' => 'celsius',
'dataTypeSlug' => 'numeric',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-unit-types'
params = {
'enabled': '1',
'search': 'celsius',
'dataTypeSlug': 'numeric',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/data-unit-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/data-unit-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"celsius\",
\"name\": \"Celsius\",
\"unit\": \"°C\",
\"description\": \"Temperature in degrees Celsius\",
\"dataTypeSlug\": \"numeric\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-unit-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "celsius",
"name": "Celsius",
"unit": "°C",
"description": "Temperature in degrees Celsius",
"dataTypeSlug": "numeric",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/data-unit-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'celsius',
'name' => 'Celsius',
'unit' => '°C',
'description' => 'Temperature in degrees Celsius',
'dataTypeSlug' => 'numeric',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-unit-types'
payload = {
"slug": "celsius",
"name": "Celsius",
"unit": "°C",
"description": "Temperature in degrees Celsius",
"dataTypeSlug": "numeric",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/data-unit-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-unit-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-unit-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-unit-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-unit-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/data-unit-types/{dataUnit_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/data-unit-types/{dataUnit_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"celsius-updated\",
\"name\": \"Celsius Updated\",
\"unit\": \"°C\",
\"description\": \"Updated temperature description\",
\"dataTypeSlug\": \"numeric\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "celsius-updated",
"name": "Celsius Updated",
"unit": "°C",
"description": "Updated temperature description",
"dataTypeSlug": "numeric",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'celsius-updated',
'name' => 'Celsius Updated',
'unit' => '°C',
'description' => 'Updated temperature description',
'dataTypeSlug' => 'numeric',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown'
payload = {
"slug": "celsius-updated",
"name": "Celsius Updated",
"unit": "°C",
"description": "Updated temperature description",
"dataTypeSlug": "numeric",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/data-unit-types/{dataUnit_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-unit-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collector-measurement-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-measurement-types?enabled=1&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types"
);
const params = {
"enabled": "1",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-measurement-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-measurement-types'
params = {
'enabled': '1',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/collector-measurement-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"temperature\",
\"name\": \"Temperature\",
\"description\": \"Ambient temperature measurement\",
\"dataUnitSlug\": \"celsius\",
\"collectorTypeSlug\": \"tcu\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "temperature",
"name": "Temperature",
"description": "Ambient temperature measurement",
"dataUnitSlug": "celsius",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collector-measurement-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'temperature',
'name' => 'Temperature',
'description' => 'Ambient temperature measurement',
'dataUnitSlug' => 'celsius',
'collectorTypeSlug' => 'tcu',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-measurement-types'
payload = {
"slug": "temperature",
"name": "Temperature",
"description": "Ambient temperature measurement",
"dataUnitSlug": "celsius",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collector-measurement-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-measurement-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/collector-measurement-types/{collectorMeasurementType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/collector-measurement-types/{collectorMeasurementType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"temperature-updated\",
\"name\": \"Temperature Updated\",
\"description\": \"Updated ambient temperature measurement\",
\"dataUnitSlug\": \"celsius\",
\"collectorTypeSlug\": \"tcu\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "temperature-updated",
"name": "Temperature Updated",
"description": "Updated ambient temperature measurement",
"dataUnitSlug": "celsius",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'temperature-updated',
'name' => 'Temperature Updated',
'description' => 'Updated ambient temperature measurement',
'dataUnitSlug' => 'celsius',
'collectorTypeSlug' => 'tcu',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown'
payload = {
"slug": "temperature-updated",
"name": "Temperature Updated",
"description": "Updated ambient temperature measurement",
"dataUnitSlug": "celsius",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/collector-measurement-types/{collectorMeasurementType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-measurement-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collector-parameter-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-parameter-types?enabled=1&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types"
);
const params = {
"enabled": "1",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-types'
params = {
'enabled': '1',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/collector-parameter-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"tracking-mode\",
\"name\": \"Tracking Mode\",
\"description\": \"Collector tracking mode configuration\",
\"dataUnitSlug\": \"string\",
\"collectorTypeSlug\": \"tcu\",
\"orderColumn\": 1,
\"enabled\": true,
\"isReadOnly\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "tracking-mode",
"name": "Tracking Mode",
"description": "Collector tracking mode configuration",
"dataUnitSlug": "string",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true,
"isReadOnly": false
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'tracking-mode',
'name' => 'Tracking Mode',
'description' => 'Collector tracking mode configuration',
'dataUnitSlug' => 'string',
'collectorTypeSlug' => 'tcu',
'orderColumn' => 1,
'enabled' => true,
'isReadOnly' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-types'
payload = {
"slug": "tracking-mode",
"name": "Tracking Mode",
"description": "Collector tracking mode configuration",
"dataUnitSlug": "string",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true,
"isReadOnly": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collector-parameter-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-parameter-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/collector-parameter-types/{collectorParameterType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/collector-parameter-types/{collectorParameterType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"tracking-mode-updated\",
\"name\": \"Tracking Mode Updated\",
\"description\": \"Updated collector tracking mode configuration\",
\"dataUnitSlug\": \"string\",
\"collectorTypeSlug\": \"tcu\",
\"orderColumn\": 1,
\"enabled\": true,
\"isReadOnly\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "tracking-mode-updated",
"name": "Tracking Mode Updated",
"description": "Updated collector tracking mode configuration",
"dataUnitSlug": "string",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true,
"isReadOnly": false
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'tracking-mode-updated',
'name' => 'Tracking Mode Updated',
'description' => 'Updated collector tracking mode configuration',
'dataUnitSlug' => 'string',
'collectorTypeSlug' => 'tcu',
'orderColumn' => 1,
'enabled' => true,
'isReadOnly' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown'
payload = {
"slug": "tracking-mode-updated",
"name": "Tracking Mode Updated",
"description": "Updated collector tracking mode configuration",
"dataUnitSlug": "string",
"collectorTypeSlug": "tcu",
"orderColumn": 1,
"enabled": true,
"isReadOnly": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/collector-parameter-types/{collectorParameterType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collector-parameter-validation-rules
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules?enabled=1&orderBy=collectorParameterTypeSlug&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules"
);
const params = {
"enabled": "1",
"orderBy": "collectorParameterTypeSlug",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'orderBy' => 'collectorParameterTypeSlug',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules'
params = {
'enabled': '1',
'orderBy': 'collectorParameterTypeSlug',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/collector-parameter-validation-rules
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorParameterTypeSlug\": \"tracking-mode\",
\"minValueDecimal\": 0,
\"maxValueDecimal\": 100,
\"stringRegex\": \"^[a-zA-Z]+$\",
\"defaultValue\": \"auto\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorParameterTypeSlug": "tracking-mode",
"minValueDecimal": 0,
"maxValueDecimal": 100,
"stringRegex": "^[a-zA-Z]+$",
"defaultValue": "auto",
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorParameterTypeSlug' => 'tracking-mode',
'minValueDecimal' => 0.0,
'maxValueDecimal' => 100.0,
'stringRegex' => '^[a-zA-Z]+$',
'defaultValue' => 'auto',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules'
payload = {
"collectorParameterTypeSlug": "tracking-mode",
"minValueDecimal": 0,
"maxValueDecimal": 100,
"stringRegex": "^[a-zA-Z]+$",
"defaultValue": "auto",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/collector-parameter-validation-rules/{collectorParameterType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/collector-parameter-validation-rules/{collectorParameterType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"collectorParameterTypeSlug\": \"tracking-mode\",
\"minValueDecimal\": 0,
\"maxValueDecimal\": 100,
\"stringRegex\": \"^[a-zA-Z]+$\",
\"defaultValue\": \"manual\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"collectorParameterTypeSlug": "tracking-mode",
"minValueDecimal": 0,
"maxValueDecimal": 100,
"stringRegex": "^[a-zA-Z]+$",
"defaultValue": "manual",
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'collectorParameterTypeSlug' => 'tracking-mode',
'minValueDecimal' => 0.0,
'maxValueDecimal' => 100.0,
'stringRegex' => '^[a-zA-Z]+$',
'defaultValue' => 'manual',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown'
payload = {
"collectorParameterTypeSlug": "tracking-mode",
"minValueDecimal": 0,
"maxValueDecimal": 100,
"stringRegex": "^[a-zA-Z]+$",
"defaultValue": "manual",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/collector-parameter-validation-rules/{collectorParameterType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/collector-parameter-validation-rules/validate
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/validate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/validate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/validate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/collector-parameter-validation-rules/validate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/device-model-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/device-model-types?enabled=1&collectorTypeSlug=ncu&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/device-model-types"
);
const params = {
"enabled": "1",
"collectorTypeSlug": "ncu",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/device-model-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'collectorTypeSlug' => 'ncu',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/device-model-types'
params = {
'enabled': '1',
'collectorTypeSlug': 'ncu',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/device-model-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/device-model-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"ncu-v3\",
\"name\": \"NCU Version 3\",
\"description\": \"Network Control Unit version 3 with advanced features\",
\"manufacturerTypeSlug\": \"tracklab\",
\"collectorTypeSlug\": \"ncu\",
\"capabilities\": {
\"wifi\": \"true\",
\"channels\": \"8\"
},
\"orderColumn\": 1,
\"enabled\": true,
\"hardwareVersionSlugs\": [
{
\"slug\": \"fugit\",
\"isPrimary\": false,
\"notes\": \"excepturi\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/device-model-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "ncu-v3",
"name": "NCU Version 3",
"description": "Network Control Unit version 3 with advanced features",
"manufacturerTypeSlug": "tracklab",
"collectorTypeSlug": "ncu",
"capabilities": {
"wifi": "true",
"channels": "8"
},
"orderColumn": 1,
"enabled": true,
"hardwareVersionSlugs": [
{
"slug": "fugit",
"isPrimary": false,
"notes": "excepturi"
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/device-model-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'ncu-v3',
'name' => 'NCU Version 3',
'description' => 'Network Control Unit version 3 with advanced features',
'manufacturerTypeSlug' => 'tracklab',
'collectorTypeSlug' => 'ncu',
'capabilities' => [
'wifi' => 'true',
'channels' => '8',
],
'orderColumn' => 1,
'enabled' => true,
'hardwareVersionSlugs' => [
[
'slug' => 'fugit',
'isPrimary' => false,
'notes' => 'excepturi',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/device-model-types'
payload = {
"slug": "ncu-v3",
"name": "NCU Version 3",
"description": "Network Control Unit version 3 with advanced features",
"manufacturerTypeSlug": "tracklab",
"collectorTypeSlug": "ncu",
"capabilities": {
"wifi": "true",
"channels": "8"
},
"orderColumn": 1,
"enabled": true,
"hardwareVersionSlugs": [
{
"slug": "fugit",
"isPrimary": false,
"notes": "excepturi"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/device-model-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/device-model-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/device-model-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/device-model-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/device-model-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/device-model-types/{deviceModelType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/device-model-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/device-model-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/device-model-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/device-model-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/device-model-types/{deviceModelType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/device-model-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"ncu-v3-updated\",
\"name\": \"NCU Version 3 Updated\",
\"description\": \"Updated Network Control Unit version 3\",
\"manufacturerTypeSlug\": \"tracklab\",
\"collectorTypeSlug\": \"ncu\",
\"capabilities\": {
\"wifi\": \"true\",
\"channels\": \"8\"
},
\"orderColumn\": 1,
\"enabled\": true,
\"hardwareVersionSlugs\": [
{
\"slug\": \"sit\",
\"isPrimary\": false,
\"notes\": \"quaerat\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/device-model-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "ncu-v3-updated",
"name": "NCU Version 3 Updated",
"description": "Updated Network Control Unit version 3",
"manufacturerTypeSlug": "tracklab",
"collectorTypeSlug": "ncu",
"capabilities": {
"wifi": "true",
"channels": "8"
},
"orderColumn": 1,
"enabled": true,
"hardwareVersionSlugs": [
{
"slug": "sit",
"isPrimary": false,
"notes": "quaerat"
}
]
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/device-model-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'ncu-v3-updated',
'name' => 'NCU Version 3 Updated',
'description' => 'Updated Network Control Unit version 3',
'manufacturerTypeSlug' => 'tracklab',
'collectorTypeSlug' => 'ncu',
'capabilities' => [
'wifi' => 'true',
'channels' => '8',
],
'orderColumn' => 1,
'enabled' => true,
'hardwareVersionSlugs' => [
[
'slug' => 'sit',
'isPrimary' => false,
'notes' => 'quaerat',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/device-model-types/unknown'
payload = {
"slug": "ncu-v3-updated",
"name": "NCU Version 3 Updated",
"description": "Updated Network Control Unit version 3",
"manufacturerTypeSlug": "tracklab",
"collectorTypeSlug": "ncu",
"capabilities": {
"wifi": "true",
"channels": "8"
},
"orderColumn": 1,
"enabled": true,
"hardwareVersionSlugs": [
{
"slug": "sit",
"isPrimary": false,
"notes": "quaerat"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/device-model-types/{deviceModelType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/device-model-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/device-model-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/device-model-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/device-model-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/manufacturer-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/manufacturer-types?enabled=1&search=tracklab&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/manufacturer-types"
);
const params = {
"enabled": "1",
"search": "tracklab",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/manufacturer-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'search' => 'tracklab',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/manufacturer-types'
params = {
'enabled': '1',
'search': 'tracklab',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/manufacturer-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/manufacturer-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"tracklab\",
\"name\": \"TrackLab\",
\"description\": \"Solar tracking systems manufacturer\",
\"websiteUrl\": \"https:\\/\\/tracklab.com\",
\"supportEmail\": \"support@tracklab.com\",
\"supportUrl\": \"https:\\/\\/tracklab.com\\/support\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/manufacturer-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "tracklab",
"name": "TrackLab",
"description": "Solar tracking systems manufacturer",
"websiteUrl": "https:\/\/tracklab.com",
"supportEmail": "support@tracklab.com",
"supportUrl": "https:\/\/tracklab.com\/support",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/manufacturer-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'tracklab',
'name' => 'TrackLab',
'description' => 'Solar tracking systems manufacturer',
'websiteUrl' => 'https://tracklab.com',
'supportEmail' => 'support@tracklab.com',
'supportUrl' => 'https://tracklab.com/support',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/manufacturer-types'
payload = {
"slug": "tracklab",
"name": "TrackLab",
"description": "Solar tracking systems manufacturer",
"websiteUrl": "https:\/\/tracklab.com",
"supportEmail": "support@tracklab.com",
"supportUrl": "https:\/\/tracklab.com\/support",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/manufacturer-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/manufacturer-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/manufacturer-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/manufacturer-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/manufacturer-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/manufacturer-types/{manufacturerType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/manufacturer-types/{manufacturerType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"tracklab\",
\"name\": \"TrackLab\",
\"description\": \"TrackLab supported manufacturer\",
\"websiteUrl\": \"https:\\/\\/tracklab.example\",
\"supportEmail\": \"support@tracklab.example\",
\"supportUrl\": \"https:\\/\\/tracklab.example\\/support\",
\"orderColumn\": 10,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "tracklab",
"name": "TrackLab",
"description": "TrackLab supported manufacturer",
"websiteUrl": "https:\/\/tracklab.example",
"supportEmail": "support@tracklab.example",
"supportUrl": "https:\/\/tracklab.example\/support",
"orderColumn": 10,
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'tracklab',
'name' => 'TrackLab',
'description' => 'TrackLab supported manufacturer',
'websiteUrl' => 'https://tracklab.example',
'supportEmail' => 'support@tracklab.example',
'supportUrl' => 'https://tracklab.example/support',
'orderColumn' => 10,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown'
payload = {
"slug": "tracklab",
"name": "TrackLab",
"description": "TrackLab supported manufacturer",
"websiteUrl": "https:\/\/tracklab.example",
"supportEmail": "support@tracklab.example",
"supportUrl": "https:\/\/tracklab.example\/support",
"orderColumn": 10,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/manufacturer-types/{manufacturerType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/manufacturer-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/hardware-version-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/hardware-version-types?enabled=1&search=1.0&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/hardware-version-types"
);
const params = {
"enabled": "1",
"search": "1.0",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/hardware-version-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'search' => '1.0',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/hardware-version-types'
params = {
'enabled': '1',
'search': '1.0',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/hardware-version-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/hardware-version-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"v1-0-0\",
\"version\": \"1.0.0\",
\"description\": \"Initial production release\",
\"releaseDate\": \"2024-01-15\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/hardware-version-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "v1-0-0",
"version": "1.0.0",
"description": "Initial production release",
"releaseDate": "2024-01-15",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/hardware-version-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'v1-0-0',
'version' => '1.0.0',
'description' => 'Initial production release',
'releaseDate' => '2024-01-15',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/hardware-version-types'
payload = {
"slug": "v1-0-0",
"version": "1.0.0",
"description": "Initial production release",
"releaseDate": "2024-01-15",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/hardware-version-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/hardware-version-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/hardware-version-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/hardware-version-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/hardware-version-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/hardware-version-types/{hardwareVersionType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/hardware-version-types/{hardwareVersionType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"ncu-v2\",
\"version\": \"2.0.0\",
\"description\": \"Second generation NCU hardware\",
\"releaseDate\": \"2025-01-01\",
\"orderColumn\": 10,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "ncu-v2",
"version": "2.0.0",
"description": "Second generation NCU hardware",
"releaseDate": "2025-01-01",
"orderColumn": 10,
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'ncu-v2',
'version' => '2.0.0',
'description' => 'Second generation NCU hardware',
'releaseDate' => '2025-01-01',
'orderColumn' => 10,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown'
payload = {
"slug": "ncu-v2",
"version": "2.0.0",
"description": "Second generation NCU hardware",
"releaseDate": "2025-01-01",
"orderColumn": 10,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/hardware-version-types/{hardwareVersionType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/hardware-version-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/capability-types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/capability-types?enabled=1&category=power&valueType=boolean&search=tracking&orderBy=orderColumn&direction=asc&perPage=50" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types"
);
const params = {
"enabled": "1",
"category": "power",
"valueType": "boolean",
"search": "tracking",
"orderBy": "orderColumn",
"direction": "asc",
"perPage": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/capability-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'enabled' => '1',
'category' => 'power',
'valueType' => 'boolean',
'search' => 'tracking',
'orderBy' => 'orderColumn',
'direction' => 'asc',
'perPage' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types'
params = {
'enabled': '1',
'category': 'power',
'valueType': 'boolean',
'search': 'tracking',
'orderBy': 'orderColumn',
'direction': 'asc',
'perPage': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/capability-types
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/capability-types" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"wifi\",
\"name\": \"WiFi\",
\"description\": \"WiFi connectivity support\",
\"valueType\": \"boolean\",
\"defaultValue\": \"true\",
\"category\": \"communication\",
\"orderColumn\": 1,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "wifi",
"name": "WiFi",
"description": "WiFi connectivity support",
"valueType": "boolean",
"defaultValue": "true",
"category": "communication",
"orderColumn": 1,
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/capability-types',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'wifi',
'name' => 'WiFi',
'description' => 'WiFi connectivity support',
'valueType' => 'boolean',
'defaultValue' => 'true',
'category' => 'communication',
'orderColumn' => 1,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types'
payload = {
"slug": "wifi",
"name": "WiFi",
"description": "WiFi connectivity support",
"valueType": "boolean",
"defaultValue": "true",
"category": "communication",
"orderColumn": 1,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/capability-types/export
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/capability-types/export" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types/export"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/capability-types/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types/export'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/capability-types/categories
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/capability-types/categories" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types/categories"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/capability-types/categories',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types/categories'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/capability-types/{capabilityType_slug}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/capability-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/capability-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/capability-types/{capabilityType_slug}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/capability-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"slug\": \"supports-tracking\",
\"name\": \"Supports tracking\",
\"description\": \"Whether the device supports tracking mode\",
\"valueType\": \"boolean\",
\"defaultValue\": \"false\",
\"category\": \"tracking\",
\"orderColumn\": 10,
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"slug": "supports-tracking",
"name": "Supports tracking",
"description": "Whether the device supports tracking mode",
"valueType": "boolean",
"defaultValue": "false",
"category": "tracking",
"orderColumn": 10,
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/capability-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'slug' => 'supports-tracking',
'name' => 'Supports tracking',
'description' => 'Whether the device supports tracking mode',
'valueType' => 'boolean',
'defaultValue' => 'false',
'category' => 'tracking',
'orderColumn' => 10,
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types/unknown'
payload = {
"slug": "supports-tracking",
"name": "Supports tracking",
"description": "Whether the device supports tracking mode",
"valueType": "boolean",
"defaultValue": "false",
"category": "tracking",
"orderColumn": 10,
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/capability-types/{capabilityType_slug}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/capability-types/unknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/capability-types/unknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/capability-types/unknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/capability-types/unknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/device-commands/{collector_uuid}/raw
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/raw" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"command\": {
\"setParameter\": {
\"key\": \"reporting_interval\",
\"value\": 60
}
},
\"ttl\": 3600
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/raw"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"command": {
"setParameter": {
"key": "reporting_interval",
"value": 60
}
},
"ttl": 3600
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/raw',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'command' => [
'setParameter' => [
'key' => 'reporting_interval',
'value' => 60,
],
],
'ttl' => 3600,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/raw'
payload = {
"command": {
"setParameter": {
"key": "reporting_interval",
"value": 60
}
},
"ttl": 3600
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Broadcast Parameter Update
requires authentication
Send a single MQTT broadcast command to all child TCUs of an NCU, while storing parameters locally per-child-TCU.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"parameters\": []
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"parameters": []
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'parameters' => [],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-commands/aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa/broadcast-parameters'
payload = {
"parameters": []
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/device-groups
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/device-groups
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Section A Collectors\",
\"description\": \"All collectors in section A of the farm\",
\"targetFilters\": {
\"deviceModelTypeSlugs\": [
\"ncu-v2\",
\"tcu-v1\"
],
\"farmUuids\": [
\"550e8400-e29b-41d4-a716-446655440000\"
],
\"siteUuids\": [
\"f965dfca-9ad3-3aac-bca6-314a3d2ca63b\"
],
\"collectorUuids\": [
\"4b75035a-4ac9-34d1-8276-e5fe3fc533d9\"
],
\"excludeCollectorUuids\": [
\"87c9c27d-3b5e-33aa-a451-c44e711fc4d2\"
]
},
\"collectorUuids\": [
\"ac8acc36-da1e-35a8-b807-098a620230c2\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Section A Collectors",
"description": "All collectors in section A of the farm",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"siteUuids": [
"f965dfca-9ad3-3aac-bca6-314a3d2ca63b"
],
"collectorUuids": [
"4b75035a-4ac9-34d1-8276-e5fe3fc533d9"
],
"excludeCollectorUuids": [
"87c9c27d-3b5e-33aa-a451-c44e711fc4d2"
]
},
"collectorUuids": [
"ac8acc36-da1e-35a8-b807-098a620230c2"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Section A Collectors',
'description' => 'All collectors in section A of the farm',
'targetFilters' => [
'deviceModelTypeSlugs' => [
'ncu-v2',
'tcu-v1',
],
'farmUuids' => [
'550e8400-e29b-41d4-a716-446655440000',
],
'siteUuids' => [
'f965dfca-9ad3-3aac-bca6-314a3d2ca63b',
],
'collectorUuids' => [
'4b75035a-4ac9-34d1-8276-e5fe3fc533d9',
],
'excludeCollectorUuids' => [
'87c9c27d-3b5e-33aa-a451-c44e711fc4d2',
],
],
'collectorUuids' => [
'ac8acc36-da1e-35a8-b807-098a620230c2',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups'
payload = {
"name": "Section A Collectors",
"description": "All collectors in section A of the farm",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000"
],
"siteUuids": [
"f965dfca-9ad3-3aac-bca6-314a3d2ca63b"
],
"collectorUuids": [
"4b75035a-4ac9-34d1-8276-e5fe3fc533d9"
],
"excludeCollectorUuids": [
"87c9c27d-3b5e-33aa-a451-c44e711fc4d2"
]
},
"collectorUuids": [
"ac8acc36-da1e-35a8-b807-098a620230c2"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Section A Collectors Updated\",
\"description\": \"Updated collectors in section A\",
\"targetFilters\": {
\"deviceModelTypeSlugs\": [
\"ncu-v2\",
\"tcu-v1\",
\"ncu-v3\"
],
\"farmUuids\": [
\"550e8400-e29b-41d4-a716-446655440000\",
\"550e8400-e29b-41d4-a716-446655440001\"
],
\"siteUuids\": [
\"a4683fe9-438a-3bf7-8679-a6a24316dd06\"
],
\"collectorUuids\": [
\"6a43dd00-329f-3f22-8fe1-b2ea72d600e9\"
],
\"excludeCollectorUuids\": [
\"9224be29-9381-3756-8a3e-275cf05603a2\"
]
},
\"collectorUuids\": [
\"f7197dd9-4487-3018-b593-72fd11cccdb1\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Section A Collectors Updated",
"description": "Updated collectors in section A",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1",
"ncu-v3"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"siteUuids": [
"a4683fe9-438a-3bf7-8679-a6a24316dd06"
],
"collectorUuids": [
"6a43dd00-329f-3f22-8fe1-b2ea72d600e9"
],
"excludeCollectorUuids": [
"9224be29-9381-3756-8a3e-275cf05603a2"
]
},
"collectorUuids": [
"f7197dd9-4487-3018-b593-72fd11cccdb1"
]
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Section A Collectors Updated',
'description' => 'Updated collectors in section A',
'targetFilters' => [
'deviceModelTypeSlugs' => [
'ncu-v2',
'tcu-v1',
'ncu-v3',
],
'farmUuids' => [
'550e8400-e29b-41d4-a716-446655440000',
'550e8400-e29b-41d4-a716-446655440001',
],
'siteUuids' => [
'a4683fe9-438a-3bf7-8679-a6a24316dd06',
],
'collectorUuids' => [
'6a43dd00-329f-3f22-8fe1-b2ea72d600e9',
],
'excludeCollectorUuids' => [
'9224be29-9381-3756-8a3e-275cf05603a2',
],
],
'collectorUuids' => [
'f7197dd9-4487-3018-b593-72fd11cccdb1',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
payload = {
"name": "Section A Collectors Updated",
"description": "Updated collectors in section A",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1",
"ncu-v3"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"siteUuids": [
"a4683fe9-438a-3bf7-8679-a6a24316dd06"
],
"collectorUuids": [
"6a43dd00-329f-3f22-8fe1-b2ea72d600e9"
],
"excludeCollectorUuids": [
"9224be29-9381-3756-8a3e-275cf05603a2"
]
},
"collectorUuids": [
"f7197dd9-4487-3018-b593-72fd11cccdb1"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
PATCH api/v1/sa/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Section A Collectors Updated\",
\"description\": \"Updated collectors in section A\",
\"targetFilters\": {
\"deviceModelTypeSlugs\": [
\"ncu-v2\",
\"tcu-v1\",
\"ncu-v3\"
],
\"farmUuids\": [
\"550e8400-e29b-41d4-a716-446655440000\",
\"550e8400-e29b-41d4-a716-446655440001\"
],
\"siteUuids\": [
\"8b359f57-1303-3235-b6a7-2fde0afc1d3c\"
],
\"collectorUuids\": [
\"3f5a1511-1ee5-3cdd-9bdd-e96ac8d2585f\"
],
\"excludeCollectorUuids\": [
\"998df23f-29cd-3360-93d1-3d3c3113a7f9\"
]
},
\"collectorUuids\": [
\"3655e560-493f-39e1-8311-ebf730a73675\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Section A Collectors Updated",
"description": "Updated collectors in section A",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1",
"ncu-v3"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"siteUuids": [
"8b359f57-1303-3235-b6a7-2fde0afc1d3c"
],
"collectorUuids": [
"3f5a1511-1ee5-3cdd-9bdd-e96ac8d2585f"
],
"excludeCollectorUuids": [
"998df23f-29cd-3360-93d1-3d3c3113a7f9"
]
},
"collectorUuids": [
"3655e560-493f-39e1-8311-ebf730a73675"
]
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Section A Collectors Updated',
'description' => 'Updated collectors in section A',
'targetFilters' => [
'deviceModelTypeSlugs' => [
'ncu-v2',
'tcu-v1',
'ncu-v3',
],
'farmUuids' => [
'550e8400-e29b-41d4-a716-446655440000',
'550e8400-e29b-41d4-a716-446655440001',
],
'siteUuids' => [
'8b359f57-1303-3235-b6a7-2fde0afc1d3c',
],
'collectorUuids' => [
'3f5a1511-1ee5-3cdd-9bdd-e96ac8d2585f',
],
'excludeCollectorUuids' => [
'998df23f-29cd-3360-93d1-3d3c3113a7f9',
],
],
'collectorUuids' => [
'3655e560-493f-39e1-8311-ebf730a73675',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
payload = {
"name": "Section A Collectors Updated",
"description": "Updated collectors in section A",
"targetFilters": {
"deviceModelTypeSlugs": [
"ncu-v2",
"tcu-v1",
"ncu-v3"
],
"farmUuids": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
],
"siteUuids": [
"8b359f57-1303-3235-b6a7-2fde0afc1d3c"
],
"collectorUuids": [
"3f5a1511-1ee5-3cdd-9bdd-e96ac8d2585f"
],
"excludeCollectorUuids": [
"998df23f-29cd-3360-93d1-3d3c3113a7f9"
]
},
"collectorUuids": [
"3655e560-493f-39e1-8311-ebf730a73675"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/device-groups/{deviceGroup_uuid}/collectors
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"action\": \"add\",
\"collectorUuids\": [
\"333b9775-74a2-3052-8116-932b53b86bc7\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"action": "add",
"collectorUuids": [
"333b9775-74a2-3052-8116-932b53b86bc7"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'action' => 'add',
'collectorUuids' => [
'333b9775-74a2-3052-8116-932b53b86bc7',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/collectors'
payload = {
"action": "add",
"collectorUuids": [
"333b9775-74a2-3052-8116-932b53b86bc7"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/device-groups/{deviceGroup_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/device-groups/{deviceGroup_uuid}/parameters
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/parameters" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"parameters\": [
\"tempore\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/parameters"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"parameters": [
"tempore"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/parameters',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'parameters' => [
'tempore',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/device-groups/a2f63e5f-8488-4b5f-a10e-04616e26f78d/parameters'
payload = {
"parameters": [
"tempore"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List all document library sections.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/doc-lib/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create a new document library section.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Technical Manuals\",
\"description\": \"Technical documentation and user manuals for all product lines.\",
\"enabled\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Technical Manuals",
"description": "Technical documentation and user manuals for all product lines.",
"enabled": false
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Technical Manuals',
'description' => 'Technical documentation and user manuals for all product lines.',
'enabled' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections'
payload = {
"name": "Technical Manuals",
"description": "Technical documentation and user manuals for all product lines.",
"enabled": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Update an existing document library section.
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Technical Manuals\",
\"description\": \"Technical documentation and user manuals for all product lines.\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Technical Manuals",
"description": "Technical documentation and user manuals for all product lines.",
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Technical Manuals',
'description' => 'Technical documentation and user manuals for all product lines.',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3'
payload = {
"name": "Technical Manuals",
"description": "Technical documentation and user manuals for all product lines.",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Delete a document library section.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Upload an icon image for a section.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"file\": \"modi\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"file": "modi"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'file' => 'modi',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon'
payload = {
"file": "modi"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove the icon from a section.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/icon'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Reorder document library sections.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/reorder" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"orderedUuids\": [
\"7ce2d232-a8f8-347c-a2df-9a70a29e897c\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/reorder"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"orderedUuids": [
"7ce2d232-a8f8-347c-a2df-9a70a29e897c"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/reorder',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'orderedUuids' => [
'7ce2d232-a8f8-347c-a2df-9a70a29e897c',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/reorder'
payload = {
"orderedUuids": [
"7ce2d232-a8f8-347c-a2df-9a70a29e897c"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List all categories for a section.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create a new category within a section.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Installation Guides\",
\"description\": \"Step-by-step installation guides for field technicians.\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Installation Guides",
"description": "Step-by-step installation guides for field technicians.",
"enabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Installation Guides',
'description' => 'Step-by-step installation guides for field technicians.',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories'
payload = {
"name": "Installation Guides",
"description": "Step-by-step installation guides for field technicians.",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Update an existing category.
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Installation Guides\",
\"description\": \"Step-by-step installation guides for field technicians.\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Installation Guides",
"description": "Step-by-step installation guides for field technicians.",
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Installation Guides',
'description' => 'Step-by-step installation guides for field technicians.',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd'
payload = {
"name": "Installation Guides",
"description": "Step-by-step installation guides for field technicians.",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Delete a category.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Upload an icon image for a category.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"file\": \"excepturi\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"file": "excepturi"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'file' => 'excepturi',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon'
payload = {
"file": "excepturi"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove the icon from a category.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/icon'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Reorder categories within a section.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/reorder" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"orderedUuids\": [
\"86f07b5d-baf1-345f-b6ad-1e546ea72580\"
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/reorder"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"orderedUuids": [
"86f07b5d-baf1-345f-b6ad-1e546ea72580"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/reorder',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'orderedUuids' => [
'86f07b5d-baf1-345f-b6ad-1e546ea72580',
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/reorder'
payload = {
"orderedUuids": [
"86f07b5d-baf1-345f-b6ad-1e546ea72580"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Move a category to a different section.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/move" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"sectionUuid\": \"550e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/move"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/move',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'sectionUuid' => '550e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/move'
payload = {
"sectionUuid": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List all documents for a category.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Upload a new document into a category.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "name=NCU Installation Manual v2.1" \
--form "description=Complete installation and commissioning guide for NCU v2 units." \
--form "enabled=1" \
--form "file=@/tmp/phpvjhh689jbvdceUP4ipw" const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('name', 'NCU Installation Manual v2.1');
body.append('description', 'Complete installation and commissioning guide for NCU v2 units.');
body.append('enabled', '1');
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'name',
'contents' => 'NCU Installation Manual v2.1'
],
[
'name' => 'description',
'contents' => 'Complete installation and commissioning guide for NCU v2 units.'
],
[
'name' => 'enabled',
'contents' => '1'
],
[
'name' => 'file',
'contents' => fopen('/tmp/phpvjhh689jbvdceUP4ipw', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents'
files = {
'file': open('/tmp/phpvjhh689jbvdceUP4ipw', 'rb')
}
payload = {
"name": "NCU Installation Manual v2.1",
"description": "Complete installation and commissioning guide for NCU v2 units.",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files, data=payload)
response.json()Received response:
Request failed with error:
Upload an icon image for a document record.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"file\": \"aut\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"file": "aut"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'file' => 'aut',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon'
payload = {
"file": "aut"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove the icon from a document record.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/icon'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Update document metadata.
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"NCU Installation Manual v2.1\",
\"description\": \"Complete installation and commissioning guide for NCU v2 units.\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "NCU Installation Manual v2.1",
"description": "Complete installation and commissioning guide for NCU v2 units.",
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'NCU Installation Manual v2.1',
'description' => 'Complete installation and commissioning guide for NCU v2 units.',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf'
payload = {
"name": "NCU Installation Manual v2.1",
"description": "Complete installation and commissioning guide for NCU v2 units.",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Delete a document.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Move a document to a different category.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/move" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"categoryUuid\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/move"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"categoryUuid": "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/move',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'categoryUuid' => '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/doc-lib/sections/6218f665-ccd0-417e-917a-faecaa225bc3/categories/6d8ce9e4-ee38-432f-b75b-6834ef1d21bd/documents/ccee35e3-6359-4d97-80cc-bca275fc26cf/move'
payload = {
"categoryUuid": "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/companies/{company_slug}/firmware-keys
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/companies/{company_slug}/firmware-keys
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Production Farm Key\",
\"description\": \"Key for firmware updates on production farm\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440000\",
\"expiresAt\": \"2025-12-31\",
\"isActive\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Production Farm Key",
"description": "Key for firmware updates on production farm",
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2025-12-31",
"isActive": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Production Farm Key',
'description' => 'Key for firmware updates on production farm',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440000',
'expiresAt' => '2025-12-31',
'isActive' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys'
payload = {
"name": "Production Farm Key",
"description": "Key for firmware updates on production farm",
"farmUuid": "550e8400-e29b-41d4-a716-446655440000",
"expiresAt": "2025-12-31",
"isActive": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/companies/{company_slug}/firmware-keys/{firmwareAccessKey_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/companies/{company_slug}/firmware-keys/{firmwareAccessKey_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Updated Farm Key\",
\"description\": \"Updated key description\",
\"expiresAt\": \"2026-06-30\",
\"isActive\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Updated Farm Key",
"description": "Updated key description",
"expiresAt": "2026-06-30",
"isActive": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Updated Farm Key',
'description' => 'Updated key description',
'expiresAt' => '2026-06-30',
'isActive' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271'
payload = {
"name": "Updated Farm Key",
"description": "Updated key description",
"expiresAt": "2026-06-30",
"isActive": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
PUT api/v1/sa/companies/{company_slug}/firmware-keys/{firmwareAccessKey_uuid}/deactivate
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/companies/tracklab/firmware-keys/f2c02d5b-8653-47d4-b315-5d073c2da271/deactivate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers)
response.json()Received response:
Request failed with error:
List available firmware versions (global scope)
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/firmware" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"deviceModelTypeSlug\": \"ncu-v2\",
\"enabled\": true,
\"perPage\": 25
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/firmware"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"deviceModelTypeSlug": "ncu-v2",
"enabled": true,
"perPage": 25
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/firmware',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'deviceModelTypeSlug' => 'ncu-v2',
'enabled' => true,
'perPage' => 25,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/firmware'
payload = {
"deviceModelTypeSlug": "ncu-v2",
"enabled": true,
"perPage": 25
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Upload new firmware
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/firmware" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "version=v1.2.3" \
--form "deviceModelTypeSlug=ncu-v2" \
--form "name=NCU Firmware v1.2.3" \
--form "description=Bug fixes and performance improvements" \
--form "file=@/site/web/resources/scribe/fixtures/firmware.bin" const url = new URL(
"https://tracklabsolar.com/api/v1/sa/firmware"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('version', 'v1.2.3');
body.append('deviceModelTypeSlug', 'ncu-v2');
body.append('name', 'NCU Firmware v1.2.3');
body.append('description', 'Bug fixes and performance improvements');
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/firmware',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'version',
'contents' => 'v1.2.3'
],
[
'name' => 'deviceModelTypeSlug',
'contents' => 'ncu-v2'
],
[
'name' => 'name',
'contents' => 'NCU Firmware v1.2.3'
],
[
'name' => 'description',
'contents' => 'Bug fixes and performance improvements'
],
[
'name' => 'file',
'contents' => fopen('/site/web/resources/scribe/fixtures/firmware.bin', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/firmware'
files = {
'file': open('/site/web/resources/scribe/fixtures/firmware.bin', 'rb')
}
payload = {
"version": "v1.2.3",
"deviceModelTypeSlug": "ncu-v2",
"name": "NCU Firmware v1.2.3",
"description": "Bug fixes and performance improvements"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files, data=payload)
response.json()Received response:
Request failed with error:
Show firmware details
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/firmware/nknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/firmware/nknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/firmware/nknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/firmware/nknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update firmware metadata
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/firmware/nknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tokenRequired\": false,
\"name\": \"qlqbdpfwylgxl\",
\"description\": \"Est est quo enim autem reprehenderit.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/firmware/nknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"tokenRequired": false,
"name": "qlqbdpfwylgxl",
"description": "Est est quo enim autem reprehenderit."
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/firmware/nknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'tokenRequired' => false,
'name' => 'qlqbdpfwylgxl',
'description' => 'Est est quo enim autem reprehenderit.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/firmware/nknown'
payload = {
"tokenRequired": false,
"name": "qlqbdpfwylgxl",
"description": "Est est quo enim autem reprehenderit."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Enable/disable firmware
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/firmware/nknown/toggle" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"enabled\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/firmware/nknown/toggle"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"enabled": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/firmware/nknown/toggle',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'enabled' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/firmware/nknown/toggle'
payload = {
"enabled": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Delete firmware (soft delete)
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/firmware/nknown" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/firmware/nknown"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/firmware/nknown',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/firmware/nknown'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/notification-channels
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/notification-channels
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-solar\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440111\",
\"notificationChannelType\": \"email\",
\"name\": \"Ops Email Alerts\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440111",
"notificationChannelType": "email",
"name": "Ops Email Alerts"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-solar',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440111',
'notificationChannelType' => 'email',
'name' => 'Ops Email Alerts',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels'
payload = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440111",
"notificationChannelType": "email",
"name": "Ops Email Alerts"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/notification-channels/{notificationChannel_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/7f7c4196-264c-34bd-a8b9-d4d45d374030" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/7f7c4196-264c-34bd-a8b9-d4d45d374030"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/7f7c4196-264c-34bd-a8b9-d4d45d374030',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/7f7c4196-264c-34bd-a8b9-d4d45d374030'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/c/{company_slug}/notification-channels/{notificationChannel_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f8be940e-f6fc-3b43-baef-499cf9b23eb3" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationChannelType\": \"email\",
\"name\": \"Operations Alerts\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f8be940e-f6fc-3b43-baef-499cf9b23eb3"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationChannelType": "email",
"name": "Operations Alerts"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f8be940e-f6fc-3b43-baef-499cf9b23eb3',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationChannelType' => 'email',
'name' => 'Operations Alerts',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f8be940e-f6fc-3b43-baef-499cf9b23eb3'
payload = {
"notificationChannelType": "email",
"name": "Operations Alerts"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/notification-channels/{notificationChannel_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/597a04bc-ab5e-374b-9cdd-03f2c3746577" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/597a04bc-ab5e-374b-9cdd-03f2c3746577"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/597a04bc-ab5e-374b-9cdd-03f2c3746577',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/597a04bc-ab5e-374b-9cdd-03f2c3746577'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/notification-channels/{notificationChannel_uuid}/emails
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f7a32869-a0aa-3e1e-8d47-63f2b0475265/emails" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"emailAddress\": \"alerts@example.com\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f7a32869-a0aa-3e1e-8d47-63f2b0475265/emails"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"emailAddress": "alerts@example.com"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f7a32869-a0aa-3e1e-8d47-63f2b0475265/emails',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'emailAddress' => 'alerts@example.com',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/f7a32869-a0aa-3e1e-8d47-63f2b0475265/emails'
payload = {
"emailAddress": "alerts@example.com"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/notification-channels/{notificationChannel_uuid}/push-devices
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/122221c6-5ee2-3083-b1f5-fec96c8f9292/push-devices" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"mobileDeviceUuid\": \"550e8400-e29b-41d4-a716-446655440000\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/122221c6-5ee2-3083-b1f5-fec96c8f9292/push-devices"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"mobileDeviceUuid": "550e8400-e29b-41d4-a716-446655440000"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/122221c6-5ee2-3083-b1f5-fec96c8f9292/push-devices',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'mobileDeviceUuid' => '550e8400-e29b-41d4-a716-446655440000',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/122221c6-5ee2-3083-b1f5-fec96c8f9292/push-devices'
payload = {
"mobileDeviceUuid": "550e8400-e29b-41d4-a716-446655440000"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/notification-channels/{notificationChannel_uuid}/webhooks
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/4bc73de7-ecf3-3214-a190-785074365fac/webhooks" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"PagerDuty Webhook\",
\"url\": \"https:\\/\\/hooks.example.com\\/alerts\",
\"httpMethod\": \"POST\",
\"timeoutSeconds\": 30
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/4bc73de7-ecf3-3214-a190-785074365fac/webhooks"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "POST",
"timeoutSeconds": 30
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/4bc73de7-ecf3-3214-a190-785074365fac/webhooks',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'PagerDuty Webhook',
'url' => 'https://hooks.example.com/alerts',
'httpMethod' => 'POST',
'timeoutSeconds' => 30,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channels/4bc73de7-ecf3-3214-a190-785074365fac/webhooks'
payload = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "POST",
"timeoutSeconds": 30
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/notification-channel-emails/{notificationChannelEmail_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-emails/72f3e884-55a6-3542-93e9-62ceaac23f28" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-emails/72f3e884-55a6-3542-93e9-62ceaac23f28"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-emails/72f3e884-55a6-3542-93e9-62ceaac23f28',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-emails/72f3e884-55a6-3542-93e9-62ceaac23f28'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/notification-channel-push-devices/{notificationChannelPushDevice_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-push-devices/dd55949e-a728-3bda-b5ec-6e022d4a7fb0" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-push-devices/dd55949e-a728-3bda-b5ec-6e022d4a7fb0"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-push-devices/dd55949e-a728-3bda-b5ec-6e022d4a7fb0',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-push-devices/dd55949e-a728-3bda-b5ec-6e022d4a7fb0'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
PUT api/v1/sa/c/{company_slug}/notification-channel-webhooks/{notificationChannelWebhook_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/3ce25307-2dbc-33be-bb66-585139140664" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"PagerDuty Webhook\",
\"url\": \"https:\\/\\/hooks.example.com\\/alerts\",
\"httpMethod\": \"PATCH\",
\"timeoutSeconds\": 20
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/3ce25307-2dbc-33be-bb66-585139140664"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "PATCH",
"timeoutSeconds": 20
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/3ce25307-2dbc-33be-bb66-585139140664',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'PagerDuty Webhook',
'url' => 'https://hooks.example.com/alerts',
'httpMethod' => 'PATCH',
'timeoutSeconds' => 20,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/3ce25307-2dbc-33be-bb66-585139140664'
payload = {
"name": "PagerDuty Webhook",
"url": "https:\/\/hooks.example.com\/alerts",
"httpMethod": "PATCH",
"timeoutSeconds": 20
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/notification-channel-webhooks/{notificationChannelWebhook_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/e847cb8d-b274-3d99-973b-f0e8669601e5" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/e847cb8d-b274-3d99-973b-f0e8669601e5"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/e847cb8d-b274-3d99-973b-f0e8669601e5',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/e847cb8d-b274-3d99-973b-f0e8669601e5'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/notification-channel-webhooks/{notificationChannelWebhook_uuid}/headers
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/54f30de0-9716-38f8-bb64-d32a76684236/headers" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"headerKey\": \"X-Signature\",
\"headerValue\": \"secret-token\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/54f30de0-9716-38f8-bb64-d32a76684236/headers"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"headerKey": "X-Signature",
"headerValue": "secret-token"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/54f30de0-9716-38f8-bb64-d32a76684236/headers',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'headerKey' => 'X-Signature',
'headerValue' => 'secret-token',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhooks/54f30de0-9716-38f8-bb64-d32a76684236/headers'
payload = {
"headerKey": "X-Signature",
"headerValue": "secret-token"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/notification-channel-webhook-headers/{notificationChannelWebhookHeader_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhook-headers/ea780eed-d501-3e67-98da-27887be0ccf5" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhook-headers/ea780eed-d501-3e67-98da-27887be0ccf5"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhook-headers/ea780eed-d501-3e67-98da-27887be0ccf5',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-channel-webhook-headers/ea780eed-d501-3e67-98da-27887be0ccf5'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/notification-templates
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/notification-templates" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/notification-templates"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/notification-templates',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/notification-templates'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/notification-templates
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/notification-templates" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationChannelType\": \"email\",
\"notificationTemplateFormatType\": \"text\",
\"name\": \"Critical Alert Template\",
\"subjectTemplate\": \"[Alert] Collector Offline\",
\"bodyTemplate\": \"Alert: Collector went offline at Farm Alpha.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/notification-templates"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "text",
"name": "Critical Alert Template",
"subjectTemplate": "[Alert] Collector Offline",
"bodyTemplate": "Alert: Collector went offline at Farm Alpha."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/notification-templates',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationChannelType' => 'email',
'notificationTemplateFormatType' => 'text',
'name' => 'Critical Alert Template',
'subjectTemplate' => '[Alert] Collector Offline',
'bodyTemplate' => 'Alert: Collector went offline at Farm Alpha.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/notification-templates'
payload = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "text",
"name": "Critical Alert Template",
"subjectTemplate": "[Alert] Collector Offline",
"bodyTemplate": "Alert: Collector went offline at Farm Alpha."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/notification-templates/{notificationTemplate_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/notification-templates/{notificationTemplate_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"notificationChannelType\": \"email\",
\"notificationTemplateFormatType\": \"html\",
\"name\": \"Updated Alert Template\",
\"subjectTemplate\": \"[Updated] Collector Offline\",
\"bodyTemplate\": \"<p>Alert rule updated for Collector Alpha.<\\/p>\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "html",
"name": "Updated Alert Template",
"subjectTemplate": "[Updated] Collector Offline",
"bodyTemplate": "<p>Alert rule updated for Collector Alpha.<\/p>"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'notificationChannelType' => 'email',
'notificationTemplateFormatType' => 'html',
'name' => 'Updated Alert Template',
'subjectTemplate' => '[Updated] Collector Offline',
'bodyTemplate' => '<p>Alert rule updated for Collector Alpha.</p>',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888'
payload = {
"notificationChannelType": "email",
"notificationTemplateFormatType": "html",
"name": "Updated Alert Template",
"subjectTemplate": "[Updated] Collector Offline",
"bodyTemplate": "<p>Alert rule updated for Collector Alpha.<\/p>"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/notification-templates/{notificationTemplate_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/notification-templates/d4d5b924-eff1-44a7-bcc9-b271d8207888'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/notification-policies
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/notification-policies
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companySlug\": \"acme-solar\",
\"farmUuid\": \"550e8400-e29b-41d4-a716-446655440121\",
\"collectorUuid\": \"550e8400-e29b-41d4-a716-446655440122\",
\"name\": \"Critical Weather Policy\",
\"enabled\": true,
\"notificationChannelUuid\": \"550e8400-e29b-41d4-a716-446655440123\",
\"notificationTemplateUuid\": \"550e8400-e29b-41d4-a716-446655440124\",
\"labels\": [
{
\"key\": \"severity\",
\"value\": \"critical\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440121",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440122",
"name": "Critical Weather Policy",
"enabled": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440123",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440124",
"labels": [
{
"key": "severity",
"value": "critical"
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companySlug' => 'acme-solar',
'farmUuid' => '550e8400-e29b-41d4-a716-446655440121',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440122',
'name' => 'Critical Weather Policy',
'enabled' => true,
'notificationChannelUuid' => '550e8400-e29b-41d4-a716-446655440123',
'notificationTemplateUuid' => '550e8400-e29b-41d4-a716-446655440124',
'labels' => [
[
'key' => 'severity',
'value' => 'critical',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies'
payload = {
"companySlug": "acme-solar",
"farmUuid": "550e8400-e29b-41d4-a716-446655440121",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440122",
"name": "Critical Weather Policy",
"enabled": true,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440123",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440124",
"labels": [
{
"key": "severity",
"value": "critical"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/c/{company_slug}/notification-policies/{notificationPolicy_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/0d78281c-7fe7-343b-b373-ef3ef026a738" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/0d78281c-7fe7-343b-b373-ef3ef026a738"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/0d78281c-7fe7-343b-b373-ef3ef026a738',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/0d78281c-7fe7-343b-b373-ef3ef026a738'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PUT api/v1/sa/c/{company_slug}/notification-policies/{notificationPolicy_uuid}
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/c03a2117-9413-3c58-9964-5b65a474630a" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Critical Weather Policy\",
\"enabled\": false,
\"notificationChannelUuid\": \"550e8400-e29b-41d4-a716-446655440223\",
\"notificationTemplateUuid\": \"550e8400-e29b-41d4-a716-446655440224\",
\"labels\": [
{
\"key\": \"site\",
\"value\": \"north-farm\"
}
]
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/c03a2117-9413-3c58-9964-5b65a474630a"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Critical Weather Policy",
"enabled": false,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440223",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440224",
"labels": [
{
"key": "site",
"value": "north-farm"
}
]
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/c03a2117-9413-3c58-9964-5b65a474630a',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Critical Weather Policy',
'enabled' => false,
'notificationChannelUuid' => '550e8400-e29b-41d4-a716-446655440223',
'notificationTemplateUuid' => '550e8400-e29b-41d4-a716-446655440224',
'labels' => [
[
'key' => 'site',
'value' => 'north-farm',
],
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/c03a2117-9413-3c58-9964-5b65a474630a'
payload = {
"name": "Critical Weather Policy",
"enabled": false,
"notificationChannelUuid": "550e8400-e29b-41d4-a716-446655440223",
"notificationTemplateUuid": "550e8400-e29b-41d4-a716-446655440224",
"labels": [
{
"key": "site",
"value": "north-farm"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/c/{company_slug}/notification-policies/{notificationPolicy_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/1722d8a4-3326-3532-be32-a5818adaa1d5" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/1722d8a4-3326-3532-be32-a5818adaa1d5"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/1722d8a4-3326-3532-be32-a5818adaa1d5',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/notification-policies/1722d8a4-3326-3532-be32-a5818adaa1d5'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Quality report: failure counts grouped by device model, firmware, and hardware version.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/quality-report" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/quality-report"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/quality-report',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/quality-report'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Inventory summary: per-company collector status counts.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/inventory" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/inventory"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/inventory',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/inventory'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
List all RMA requests across all companies.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/rma" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/rma',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Show a single RMA request with full relations.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/rma/9f632600-b90f-3b96-8a31-923a8b9f8811" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/9f632600-b90f-3b96-8a31-923a8b9f8811"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/rma/9f632600-b90f-3b96-8a31-923a8b9f8811',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/9f632600-b90f-3b96-8a31-923a8b9f8811'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update the status of an RMA request (intermediate workflow statuses).
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/rma/b6858e97-83fb-3f35-bbe2-4f57361d71d8" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"diagnosing\",
\"notes\": \"Device received and initial electrical diagnostics started.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/b6858e97-83fb-3f35-bbe2-4f57361d71d8"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"status": "diagnosing",
"notes": "Device received and initial electrical diagnostics started."
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/rma/b6858e97-83fb-3f35-bbe2-4f57361d71d8',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'status' => 'diagnosing',
'notes' => 'Device received and initial electrical diagnostics started.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/b6858e97-83fb-3f35-bbe2-4f57361d71d8'
payload = {
"status": "diagnosing",
"notes": "Device received and initial electrical diagnostics started."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Approve an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/rma/ff30af8f-544a-356f-9bc8-c760bd88d80d/approve" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/ff30af8f-544a-356f-9bc8-c760bd88d80d/approve"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/rma/ff30af8f-544a-356f-9bc8-c760bd88d80d/approve',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/ff30af8f-544a-356f-9bc8-c760bd88d80d/approve'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Reject an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/rma/21440c3d-2fdf-3861-810d-912c4d271136/reject" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"reason\": \"Submitted issue does not meet warranty criteria.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/21440c3d-2fdf-3861-810d-912c4d271136/reject"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"reason": "Submitted issue does not meet warranty criteria."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/rma/21440c3d-2fdf-3861-810d-912c4d271136/reject',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'reason' => 'Submitted issue does not meet warranty criteria.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/21440c3d-2fdf-3861-810d-912c4d271136/reject'
payload = {
"reason": "Submitted issue does not meet warranty criteria."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Resolve an RMA request (repaired, replaced, or unrepairable).
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/rma/6939404e-72fc-363e-aa31-045c5ba1b7d3/resolve" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"resolutionType\": \"replaced\",
\"notes\": \"Unit replaced after diagnostics confirmed controller board failure.\",
\"replacementCollectorUuid\": \"550e8400-e29b-41d4-a716-446655440110\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/6939404e-72fc-363e-aa31-045c5ba1b7d3/resolve"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"resolutionType": "replaced",
"notes": "Unit replaced after diagnostics confirmed controller board failure.",
"replacementCollectorUuid": "550e8400-e29b-41d4-a716-446655440110"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/rma/6939404e-72fc-363e-aa31-045c5ba1b7d3/resolve',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'resolutionType' => 'replaced',
'notes' => 'Unit replaced after diagnostics confirmed controller board failure.',
'replacementCollectorUuid' => '550e8400-e29b-41d4-a716-446655440110',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/6939404e-72fc-363e-aa31-045c5ba1b7d3/resolve'
payload = {
"resolutionType": "replaced",
"notes": "Unit replaced after diagnostics confirmed controller board failure.",
"replacementCollectorUuid": "550e8400-e29b-41d4-a716-446655440110"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Cancel an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/rma/d8ef4ca4-8a75-37fe-adc3-2b1c04cebf53/cancel" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"reason\": \"arfnqxunwpndjcu\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/d8ef4ca4-8a75-37fe-adc3-2b1c04cebf53/cancel"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"reason": "arfnqxunwpndjcu"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/rma/d8ef4ca4-8a75-37fe-adc3-2b1c04cebf53/cancel',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'reason' => 'arfnqxunwpndjcu',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/d8ef4ca4-8a75-37fe-adc3-2b1c04cebf53/cancel'
payload = {
"reason": "arfnqxunwpndjcu"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List notes for an RMA request.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/rma/e7db2fb6-eb2c-3c79-8468-d7b7c6539a24/notes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/e7db2fb6-eb2c-3c79-8468-d7b7c6539a24/notes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/rma/e7db2fb6-eb2c-3c79-8468-d7b7c6539a24/notes',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/e7db2fb6-eb2c-3c79-8468-d7b7c6539a24/notes'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Add a note to an RMA request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/rma/80ff2697-0dbc-3fef-8227-87600a16b4a0/notes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"note\": \"Customer confirmed issue is reproducible after reboot.\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/rma/80ff2697-0dbc-3fef-8227-87600a16b4a0/notes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"note": "Customer confirmed issue is reproducible after reboot."
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/rma/80ff2697-0dbc-3fef-8227-87600a16b4a0/notes',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'note' => 'Customer confirmed issue is reproducible after reboot.',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/rma/80ff2697-0dbc-3fef-8227-87600a16b4a0/notes'
payload = {
"note": "Customer confirmed issue is reproducible after reboot."
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/tracklab/users
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/tracklab/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/tracklab/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
POST api/v1/sa/tracklab/users
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/tracklab/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"new.user@tracklab.com\",
\"firstName\": \"John\",
\"lastName\": \"Doe\",
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1234567890\",
\"role\": \"admin\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "new.user@tracklab.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "admin"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/tracklab/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'new.user@tracklab.com',
'firstName' => 'John',
'lastName' => 'Doe',
'countryIsoCode' => 'US',
'phoneNumber' => '+1234567890',
'role' => 'admin',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users'
payload = {
"email": "new.user@tracklab.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "admin"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
GET api/v1/sa/tracklab/users/{user_uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/tracklab/users/{user_uuid}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"updated.user@tracklab.com\",
\"firstName\": \"John\",
\"lastName\": \"Smith\",
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1987654321\",
\"role\": \"user\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "updated.user@tracklab.com",
"firstName": "John",
"lastName": "Smith",
"countryIsoCode": "US",
"phoneNumber": "+1987654321",
"role": "user"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'updated.user@tracklab.com',
'firstName' => 'John',
'lastName' => 'Smith',
'countryIsoCode' => 'US',
'phoneNumber' => '+1987654321',
'role' => 'user',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
payload = {
"email": "updated.user@tracklab.com",
"firstName": "John",
"lastName": "Smith",
"countryIsoCode": "US",
"phoneNumber": "+1987654321",
"role": "user"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
DELETE api/v1/sa/tracklab/users/{user_uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user\": \"47921254-d262-34f7-8bc2-84fd0dc024fe\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user": "47921254-d262-34f7-8bc2-84fd0dc024fe"
};
fetch(url, {
method: "DELETE",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user' => '47921254-d262-34f7-8bc2-84fd0dc024fe',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
payload = {
"user": "47921254-d262-34f7-8bc2-84fd0dc024fe"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
List warranties expiring within N days.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/warranty/expiring" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/warranty/expiring"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/warranty/expiring',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/warranty/expiring'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/health
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/health" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/health"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/health',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/health'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
Show headers
cache-control: must-revalidate, no-cache, no-store, post-check=0, pre-check=0, private
content-type: application/json
vary: Origin
{
"finishedAt": 1774566311,
"checkResults": []
}
Received response:
Request failed with error:
GET api/v1/firmware/download
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/firmware/download" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/firmware/download"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/firmware/download',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/firmware/download'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (400):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Firmware slug required"
}
Received response:
Request failed with error:
GET api/v1/firmware/download/{token}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/firmware/download/aperiam" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/firmware/download/aperiam"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/firmware/download/aperiam',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/firmware/download/aperiam'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (400):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Firmware slug required"
}
Received response:
Request failed with error:
Download measurements using a signed link without authentication.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/open/c/tracklab/measurements?types[]=architecto&from=2025-01-01T00%3A00%3A00Z&collectorUuids[]=quo&farmUuid=d5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d&farmSectionUuid=3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa&collectorTypeSlug=ncu&to=2025-01-02T00%3A00%3A00Z&raw=&period=minute&aggregation=avg&valueMin=0&valueMax=1000&groupBy=measurement_type&includeMetadata=1&includeReplacements=&includeCount=&exportType=json&page=1&perPage=100" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/open/c/tracklab/measurements"
);
const params = {
"types[0]": "architecto",
"from": "2025-01-01T00:00:00Z",
"collectorUuids[0]": "quo",
"farmUuid": "d5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d",
"farmSectionUuid": "3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa",
"collectorTypeSlug": "ncu",
"to": "2025-01-02T00:00:00Z",
"raw": "0",
"period": "minute",
"aggregation": "avg",
"valueMin": "0",
"valueMax": "1000",
"groupBy": "measurement_type",
"includeMetadata": "1",
"includeReplacements": "0",
"includeCount": "0",
"exportType": "json",
"page": "1",
"perPage": "100",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/open/c/tracklab/measurements',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'types[0]' => 'architecto',
'from' => '2025-01-01T00:00:00Z',
'collectorUuids[0]' => 'quo',
'farmUuid' => 'd5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d',
'farmSectionUuid' => '3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa',
'collectorTypeSlug' => 'ncu',
'to' => '2025-01-02T00:00:00Z',
'raw' => '0',
'period' => 'minute',
'aggregation' => 'avg',
'valueMin' => '0',
'valueMax' => '1000',
'groupBy' => 'measurement_type',
'includeMetadata' => '1',
'includeReplacements' => '0',
'includeCount' => '0',
'exportType' => 'json',
'page' => '1',
'perPage' => '100',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/open/c/tracklab/measurements'
params = {
'types[0]': 'architecto',
'from': '2025-01-01T00:00:00Z',
'collectorUuids[0]': 'quo',
'farmUuid': 'd5b1b4e7-2d71-4c16-9c0c-fc0c2b9f3d0d',
'farmSectionUuid': '3b3fb893-1e88-4c3c-8b10-0a5c2b3cf6aa',
'collectorTypeSlug': 'ncu',
'to': '2025-01-02T00:00:00Z',
'raw': '0',
'period': 'minute',
'aggregation': 'avg',
'valueMin': '0',
'valueMax': '1000',
'groupBy': 'measurement_type',
'includeMetadata': '1',
'includeReplacements': '0',
'includeCount': '0',
'exportType': 'json',
'page': '1',
'perPage': '100',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (403):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Invalid signature."
}
Received response:
Request failed with error:
Get Profile Picture (Signed URL)
requires authentication
Retrieve a user's profile picture using a signed URL token. The token contains encrypted user UUID and expiry timestamp.
URL format: /me/profile/picture/{signedToken}/{format}/image.webp
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/me/profile/picture/eyJpdiI6.../square-48-webp/image.webp" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/me/profile/picture/eyJpdiI6.../square-48-webp/image.webp"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/me/profile/picture/eyJpdiI6.../square-48-webp/image.webp',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/me/profile/picture/eyJpdiI6.../square-48-webp/image.webp'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
The image file stream
Example response (403):
{
"message": "Invalid or expired token."
}
Example response (404):
{
"message": "User not found."
}
Received response:
Request failed with error:
GET api/v1/email/verify/{id}/{hash}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/email/verify/qui/incidunt" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/email/verify/qui/incidunt"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/email/verify/qui/incidunt',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/email/verify/qui/incidunt'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (403):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 6
x-ratelimit-remaining: 2
vary: Origin
{
"success": false,
"message": "Invalid verification link"
}
Received response:
Request failed with error:
Serve a section icon via signed token.
requires authentication
URL: /api/v1/doc-lib/sections/{sectionUuid}/icon/{signedToken}/{format}/image.webp
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/sections/459c09dc-bdcf-3774-886c-d6e684f68557/icon/cum/voluptatum/image.webp" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/sections/459c09dc-bdcf-3774-886c-d6e684f68557/icon/cum/voluptatum/image.webp"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/sections/459c09dc-bdcf-3774-886c-d6e684f68557/icon/cum/voluptatum/image.webp',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/sections/459c09dc-bdcf-3774-886c-d6e684f68557/icon/cum/voluptatum/image.webp'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (403):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Invalid or expired token."
}
Received response:
Request failed with error:
Serve a category icon via signed token.
requires authentication
URL: /api/v1/doc-lib/categories/{categoryUuid}/icon/{signedToken}/{format}/image.webp
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/categories/3d62664c-fffe-310a-b493-c97303857651/icon/et/est/image.webp" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/categories/3d62664c-fffe-310a-b493-c97303857651/icon/et/est/image.webp"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/categories/3d62664c-fffe-310a-b493-c97303857651/icon/et/est/image.webp',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/categories/3d62664c-fffe-310a-b493-c97303857651/icon/et/est/image.webp'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (403):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Invalid or expired token."
}
Received response:
Request failed with error:
Serve a document icon via signed token.
requires authentication
URL: /api/v1/doc-lib/documents/{documentSectionDocumentUuid}/icon/{signedToken}/{format}/image.webp
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/documents/bca27556-039a-39a9-829e-736f095f59ce/icon/eveniet/doloremque/image.webp" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/documents/bca27556-039a-39a9-829e-736f095f59ce/icon/eveniet/doloremque/image.webp"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/documents/bca27556-039a-39a9-829e-736f095f59ce/icon/eveniet/doloremque/image.webp',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/documents/bca27556-039a-39a9-829e-736f095f59ce/icon/eveniet/doloremque/image.webp'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (403):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Invalid or expired token."
}
Received response:
Request failed with error:
Serve a document file via signed token.
requires authentication
URL: /api/v1/doc-lib/documents/{documentSectionDocumentUuid}/{signedToken}/{format}/file
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/doc-lib/documents/8fb050a9-44e3-324c-9b2b-0e0b3e838614/et/sit/file" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/doc-lib/documents/8fb050a9-44e3-324c-9b2b-0e0b3e838614/et/sit/file"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/doc-lib/documents/8fb050a9-44e3-324c-9b2b-0e0b3e838614/et/sit/file',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/doc-lib/documents/8fb050a9-44e3-324c-9b2b-0e0b3e838614/et/sit/file'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (403):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Invalid or expired token."
}
Received response:
Request failed with error:
POST api/v1/c/{companySlug}/automation/webhooks/{automationInboundWebhookSource_uuid}/ingest
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/officia/automation/webhooks/03a0e431-35e7-383e-81d5-962acc9f2524/ingest" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/officia/automation/webhooks/03a0e431-35e7-383e-81d5-962acc9f2524/ingest"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/officia/automation/webhooks/03a0e431-35e7-383e-81d5-962acc9f2524/ingest',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/officia/automation/webhooks/03a0e431-35e7-383e-81d5-962acc9f2524/ingest'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/c/{companySlug}/automation/test/webhook-endpoints/{automationTestWebhookEndpoint_uuid}/ingest
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/c/magni/automation/test/webhook-endpoints/c2f61321-2f80-3814-9e90-9b23fbe6df39/ingest" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/c/magni/automation/test/webhook-endpoints/c2f61321-2f80-3814-9e90-9b23fbe6df39/ingest"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/c/magni/automation/test/webhook-endpoints/c2f61321-2f80-3814-9e90-9b23fbe6df39/ingest',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/c/magni/automation/test/webhook-endpoints/c2f61321-2f80-3814-9e90-9b23fbe6df39/ingest'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
GET api/v1/type/automation-action-failure-mode
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-action-failure-mode?page=1&perPage=20&sort=hbupydlmptqmsdlfl&sortBy=stugzwgjkywtlopssg&sortOrder=desc&filter[search]=bfrmnaregohpwbttlv&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-action-failure-mode"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "hbupydlmptqmsdlfl",
"sortBy": "stugzwgjkywtlopssg",
"sortOrder": "desc",
"filter[search]": "bfrmnaregohpwbttlv",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-action-failure-mode',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'hbupydlmptqmsdlfl',
'sortBy' => 'stugzwgjkywtlopssg',
'sortOrder' => 'desc',
'filter[search]' => 'bfrmnaregohpwbttlv',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-action-failure-mode'
params = {
'page': '1',
'perPage': '20',
'sort': 'hbupydlmptqmsdlfl',
'sortBy': 'stugzwgjkywtlopssg',
'sortOrder': 'desc',
'filter[search]': 'bfrmnaregohpwbttlv',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-action-failure-mode?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-action-failure-mode?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-action-failure-mode?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-action-failure-mode",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-action-target
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-action-target?page=1&perPage=20&sort=pr&sortBy=wiarbrfeaesptqi&sortOrder=desc&filter[search]=pilgjmekedrnubmcheeb&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-action-target"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "pr",
"sortBy": "wiarbrfeaesptqi",
"sortOrder": "desc",
"filter[search]": "pilgjmekedrnubmcheeb",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-action-target',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'pr',
'sortBy' => 'wiarbrfeaesptqi',
'sortOrder' => 'desc',
'filter[search]' => 'pilgjmekedrnubmcheeb',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-action-target'
params = {
'page': '1',
'perPage': '20',
'sort': 'pr',
'sortBy': 'wiarbrfeaesptqi',
'sortOrder': 'desc',
'filter[search]': 'pilgjmekedrnubmcheeb',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-action-target?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-action-target?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-action-target?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-action-target",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-action
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-action?page=1&perPage=20&sort=xglsvtouaivycf&sortBy=vqfzystkzuxpygrceasl&sortOrder=desc&filter[search]=qlgkkyzkuzwbevh&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-action"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "xglsvtouaivycf",
"sortBy": "vqfzystkzuxpygrceasl",
"sortOrder": "desc",
"filter[search]": "qlgkkyzkuzwbevh",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-action',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'xglsvtouaivycf',
'sortBy' => 'vqfzystkzuxpygrceasl',
'sortOrder' => 'desc',
'filter[search]' => 'qlgkkyzkuzwbevh',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-action'
params = {
'page': '1',
'perPage': '20',
'sort': 'xglsvtouaivycf',
'sortBy': 'vqfzystkzuxpygrceasl',
'sortOrder': 'desc',
'filter[search]': 'qlgkkyzkuzwbevh',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-action?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-action?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-action?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-action",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-condition-group-operator
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-condition-group-operator?page=1&perPage=20&sort=mlmycabslbflukoh&sortBy=kotajfvkcoilufyvmyd&sortOrder=asc&filter[search]=luvpbwohkdudiwyp&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-condition-group-operator"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "mlmycabslbflukoh",
"sortBy": "kotajfvkcoilufyvmyd",
"sortOrder": "asc",
"filter[search]": "luvpbwohkdudiwyp",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-condition-group-operator',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'mlmycabslbflukoh',
'sortBy' => 'kotajfvkcoilufyvmyd',
'sortOrder' => 'asc',
'filter[search]' => 'luvpbwohkdudiwyp',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-condition-group-operator'
params = {
'page': '1',
'perPage': '20',
'sort': 'mlmycabslbflukoh',
'sortBy': 'kotajfvkcoilufyvmyd',
'sortOrder': 'asc',
'filter[search]': 'luvpbwohkdudiwyp',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-condition-group-operator?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-condition-group-operator?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-condition-group-operator?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-condition-group-operator",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-condition-operator
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-condition-operator?page=1&perPage=20&sort=uwabjrkrhjsmowzgytvhg&sortBy=hjjdklyfspqucbaplyvhnlff&sortOrder=asc&filter[search]=vwzmbmoesnxwbbchjqi&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-condition-operator"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "uwabjrkrhjsmowzgytvhg",
"sortBy": "hjjdklyfspqucbaplyvhnlff",
"sortOrder": "asc",
"filter[search]": "vwzmbmoesnxwbbchjqi",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-condition-operator',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'uwabjrkrhjsmowzgytvhg',
'sortBy' => 'hjjdklyfspqucbaplyvhnlff',
'sortOrder' => 'asc',
'filter[search]' => 'vwzmbmoesnxwbbchjqi',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-condition-operator'
params = {
'page': '1',
'perPage': '20',
'sort': 'uwabjrkrhjsmowzgytvhg',
'sortBy': 'hjjdklyfspqucbaplyvhnlff',
'sortOrder': 'asc',
'filter[search]': 'vwzmbmoesnxwbbchjqi',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-condition-operator?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-condition-operator?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-condition-operator?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-condition-operator",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-event-source
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-event-source?page=1&perPage=20&sort=eoejvnqsmfu&sortBy=grwgqrfarayd&sortOrder=desc&filter[search]=nnecwug&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-event-source"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "eoejvnqsmfu",
"sortBy": "grwgqrfarayd",
"sortOrder": "desc",
"filter[search]": "nnecwug",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-event-source',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'eoejvnqsmfu',
'sortBy' => 'grwgqrfarayd',
'sortOrder' => 'desc',
'filter[search]' => 'nnecwug',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-event-source'
params = {
'page': '1',
'perPage': '20',
'sort': 'eoejvnqsmfu',
'sortBy': 'grwgqrfarayd',
'sortOrder': 'desc',
'filter[search]': 'nnecwug',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-event-source?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-event-source?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-event-source?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-event-source",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-event-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-event-status?page=1&perPage=20&sort=hjitwrqrlenurq&sortBy=kkcnudsbefguvrkd&sortOrder=asc&filter[search]=ewzduyhtbzpydi&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-event-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "hjitwrqrlenurq",
"sortBy": "kkcnudsbefguvrkd",
"sortOrder": "asc",
"filter[search]": "ewzduyhtbzpydi",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-event-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'hjitwrqrlenurq',
'sortBy' => 'kkcnudsbefguvrkd',
'sortOrder' => 'asc',
'filter[search]' => 'ewzduyhtbzpydi',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-event-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'hjitwrqrlenurq',
'sortBy': 'kkcnudsbefguvrkd',
'sortOrder': 'asc',
'filter[search]': 'ewzduyhtbzpydi',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-event-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-event-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-event-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-event-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-execution-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-execution-status?page=1&perPage=20&sort=mydqcbmqpmbrqukvkpydhsj&sortBy=gjwparvbacqfmhoryoomh&sortOrder=desc&filter[search]=o&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-execution-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "mydqcbmqpmbrqukvkpydhsj",
"sortBy": "gjwparvbacqfmhoryoomh",
"sortOrder": "desc",
"filter[search]": "o",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-execution-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'mydqcbmqpmbrqukvkpydhsj',
'sortBy' => 'gjwparvbacqfmhoryoomh',
'sortOrder' => 'desc',
'filter[search]' => 'o',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-execution-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'mydqcbmqpmbrqukvkpydhsj',
'sortBy': 'gjwparvbacqfmhoryoomh',
'sortOrder': 'desc',
'filter[search]': 'o',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-execution-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-execution-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-execution-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-execution-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-match-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-match-status?page=1&perPage=20&sort=klnagvpoiobqttvrymcqbnqbu&sortBy=nrcszlkyuoswtgh&sortOrder=desc&filter[search]=mctoafrvwd&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-match-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "klnagvpoiobqttvrymcqbnqbu",
"sortBy": "nrcszlkyuoswtgh",
"sortOrder": "desc",
"filter[search]": "mctoafrvwd",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-match-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'klnagvpoiobqttvrymcqbnqbu',
'sortBy' => 'nrcszlkyuoswtgh',
'sortOrder' => 'desc',
'filter[search]' => 'mctoafrvwd',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-match-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'klnagvpoiobqttvrymcqbnqbu',
'sortBy': 'nrcszlkyuoswtgh',
'sortOrder': 'desc',
'filter[search]': 'mctoafrvwd',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-match-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-match-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-match-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-match-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-rule-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-rule-status?page=1&perPage=20&sort=vxoxcldiyvbnf&sortBy=ia&sortOrder=asc&filter[search]=lpymxo&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-rule-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "vxoxcldiyvbnf",
"sortBy": "ia",
"sortOrder": "asc",
"filter[search]": "lpymxo",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-rule-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'vxoxcldiyvbnf',
'sortBy' => 'ia',
'sortOrder' => 'asc',
'filter[search]' => 'lpymxo',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-rule-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'vxoxcldiyvbnf',
'sortBy': 'ia',
'sortOrder': 'asc',
'filter[search]': 'lpymxo',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-rule-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-rule-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-rule-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-rule-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-trigger-subject
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-trigger-subject?page=1&perPage=20&sort=tebwfsjohuuzhodzxeg&sortBy=cpxyhhkynoigodsbhkyjsuuce&sortOrder=desc&filter[search]=ihrp&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-trigger-subject"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "tebwfsjohuuzhodzxeg",
"sortBy": "cpxyhhkynoigodsbhkyjsuuce",
"sortOrder": "desc",
"filter[search]": "ihrp",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-trigger-subject',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'tebwfsjohuuzhodzxeg',
'sortBy' => 'cpxyhhkynoigodsbhkyjsuuce',
'sortOrder' => 'desc',
'filter[search]' => 'ihrp',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-trigger-subject'
params = {
'page': '1',
'perPage': '20',
'sort': 'tebwfsjohuuzhodzxeg',
'sortBy': 'cpxyhhkynoigodsbhkyjsuuce',
'sortOrder': 'desc',
'filter[search]': 'ihrp',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-trigger-subject?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-trigger-subject?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-trigger-subject?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-trigger-subject",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-weather-metric
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-weather-metric?page=1&perPage=20&sort=ructtx&sortBy=zwmbcowfsauognk&sortOrder=asc&filter[search]=e&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-weather-metric"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "ructtx",
"sortBy": "zwmbcowfsauognk",
"sortOrder": "asc",
"filter[search]": "e",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-weather-metric',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'ructtx',
'sortBy' => 'zwmbcowfsauognk',
'sortOrder' => 'asc',
'filter[search]' => 'e',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-weather-metric'
params = {
'page': '1',
'perPage': '20',
'sort': 'ructtx',
'sortBy': 'zwmbcowfsauognk',
'sortOrder': 'asc',
'filter[search]': 'e',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [
{
"slug": "wind-speed",
"name": "Wind Speed",
"description": ""
},
{
"slug": "temperature",
"name": "Temperature",
"description": ""
}
],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-weather-metric?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-weather-metric?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-weather-metric?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-weather-metric",
"per_page": 20,
"to": 2,
"total": 2
}
}
Received response:
Request failed with error:
GET api/v1/type/automation-webhook-auth
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/automation-webhook-auth?page=1&perPage=20&sort=mgcovdkwswvfm&sortBy=qmxiynklwrgqlbcdvxeu&sortOrder=asc&filter[search]=bldrgofxvwokadwvfjtfi&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/automation-webhook-auth"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "mgcovdkwswvfm",
"sortBy": "qmxiynklwrgqlbcdvxeu",
"sortOrder": "asc",
"filter[search]": "bldrgofxvwokadwvfjtfi",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/automation-webhook-auth',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'mgcovdkwswvfm',
'sortBy' => 'qmxiynklwrgqlbcdvxeu',
'sortOrder' => 'asc',
'filter[search]' => 'bldrgofxvwokadwvfjtfi',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/automation-webhook-auth'
params = {
'page': '1',
'perPage': '20',
'sort': 'mgcovdkwswvfm',
'sortBy': 'qmxiynklwrgqlbcdvxeu',
'sortOrder': 'asc',
'filter[search]': 'bldrgofxvwokadwvfjtfi',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/automation-webhook-auth?page=1",
"last": "https://tracklabsolar.com/api/v1/type/automation-webhook-auth?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/automation-webhook-auth?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/automation-webhook-auth",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/collector
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/collector?page=1&perPage=20&sort=egloxwobcvyvnuxcji&sortBy=h&sortOrder=desc&filter[search]=jxdrwcelmfbrfshxa&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/collector"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "egloxwobcvyvnuxcji",
"sortBy": "h",
"sortOrder": "desc",
"filter[search]": "jxdrwcelmfbrfshxa",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/collector',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'egloxwobcvyvnuxcji',
'sortBy' => 'h',
'sortOrder' => 'desc',
'filter[search]' => 'jxdrwcelmfbrfshxa',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/collector'
params = {
'page': '1',
'perPage': '20',
'sort': 'egloxwobcvyvnuxcji',
'sortBy': 'h',
'sortOrder': 'desc',
'filter[search]': 'jxdrwcelmfbrfshxa',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/collector?page=1",
"last": "https://tracklabsolar.com/api/v1/type/collector?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/collector?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/collector",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/collector-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/collector-status?page=1&perPage=20&sort=gwobdxuhdyngs&sortBy=vujkqaeotloqtbmbkhmghsgtw&sortOrder=desc&filter[search]=snyb&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/collector-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "gwobdxuhdyngs",
"sortBy": "vujkqaeotloqtbmbkhmghsgtw",
"sortOrder": "desc",
"filter[search]": "snyb",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/collector-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'gwobdxuhdyngs',
'sortBy' => 'vujkqaeotloqtbmbkhmghsgtw',
'sortOrder' => 'desc',
'filter[search]' => 'snyb',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/collector-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'gwobdxuhdyngs',
'sortBy': 'vujkqaeotloqtbmbkhmghsgtw',
'sortOrder': 'desc',
'filter[search]': 'snyb',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/collector-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/collector-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/collector-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/collector-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/company-contact
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/company-contact?page=1&perPage=20&sort=apyngluhib&sortBy=zrmpcolunq&sortOrder=asc&filter[search]=jh&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/company-contact"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "apyngluhib",
"sortBy": "zrmpcolunq",
"sortOrder": "asc",
"filter[search]": "jh",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/company-contact',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'apyngluhib',
'sortBy' => 'zrmpcolunq',
'sortOrder' => 'asc',
'filter[search]' => 'jh',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/company-contact'
params = {
'page': '1',
'perPage': '20',
'sort': 'apyngluhib',
'sortBy': 'zrmpcolunq',
'sortOrder': 'asc',
'filter[search]': 'jh',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/company-contact?page=1",
"last": "https://tracklabsolar.com/api/v1/type/company-contact?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/company-contact?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/company-contact",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/company-link-invite-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/company-link-invite-status?page=1&perPage=20&sort=elpufpkem&sortBy=fcdjxjffjyyesfvdimcmvwpf&sortOrder=asc&filter[search]=ocfeuilgtimpn&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/company-link-invite-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "elpufpkem",
"sortBy": "fcdjxjffjyyesfvdimcmvwpf",
"sortOrder": "asc",
"filter[search]": "ocfeuilgtimpn",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/company-link-invite-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'elpufpkem',
'sortBy' => 'fcdjxjffjyyesfvdimcmvwpf',
'sortOrder' => 'asc',
'filter[search]' => 'ocfeuilgtimpn',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/company-link-invite-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'elpufpkem',
'sortBy': 'fcdjxjffjyyesfvdimcmvwpf',
'sortOrder': 'asc',
'filter[search]': 'ocfeuilgtimpn',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/company-link-invite-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/company-link-invite-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/company-link-invite-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/company-link-invite-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/company-link-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/company-link-status?page=1&perPage=20&sort=adavrgpuborfidxrixzylsn&sortBy=tvgfntshceojlo&sortOrder=desc&filter[search]=bwuglqcb&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/company-link-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "adavrgpuborfidxrixzylsn",
"sortBy": "tvgfntshceojlo",
"sortOrder": "desc",
"filter[search]": "bwuglqcb",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/company-link-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'adavrgpuborfidxrixzylsn',
'sortBy' => 'tvgfntshceojlo',
'sortOrder' => 'desc',
'filter[search]' => 'bwuglqcb',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/company-link-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'adavrgpuborfidxrixzylsn',
'sortBy': 'tvgfntshceojlo',
'sortOrder': 'desc',
'filter[search]': 'bwuglqcb',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/company-link-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/company-link-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/company-link-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/company-link-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/data-deletion-audit-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data-deletion-audit-status?page=1&perPage=20&sort=ckqdjvi&sortBy=dle&sortOrder=asc&filter[search]=sllmjnedhhkipnpmq&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data-deletion-audit-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "ckqdjvi",
"sortBy": "dle",
"sortOrder": "asc",
"filter[search]": "sllmjnedhhkipnpmq",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data-deletion-audit-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'ckqdjvi',
'sortBy' => 'dle',
'sortOrder' => 'asc',
'filter[search]' => 'sllmjnedhhkipnpmq',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data-deletion-audit-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'ckqdjvi',
'sortBy': 'dle',
'sortOrder': 'asc',
'filter[search]': 'sllmjnedhhkipnpmq',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/data-deletion-audit-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/data-deletion-audit-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/data-deletion-audit-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/data-deletion-audit-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/data-retention-data
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data-retention-data?page=1&perPage=20&sort=mjhitiz&sortBy=lfyq&sortOrder=asc&filter[search]=d&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data-retention-data"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "mjhitiz",
"sortBy": "lfyq",
"sortOrder": "asc",
"filter[search]": "d",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data-retention-data',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'mjhitiz',
'sortBy' => 'lfyq',
'sortOrder' => 'asc',
'filter[search]' => 'd',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data-retention-data'
params = {
'page': '1',
'perPage': '20',
'sort': 'mjhitiz',
'sortBy': 'lfyq',
'sortOrder': 'asc',
'filter[search]': 'd',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [
{
"slug": "device-messages",
"name": "Device Messages",
"description": ""
},
{
"slug": "device-commands",
"name": "Device Commands",
"description": ""
},
{
"slug": "automation-events",
"name": "Automation Events",
"description": "Automation events and their context data"
},
{
"slug": "automation-executions",
"name": "Automation Executions",
"description": "Automation action executions and notification dispatches"
}
],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/data-retention-data?page=1",
"last": "https://tracklabsolar.com/api/v1/type/data-retention-data?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/data-retention-data?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/data-retention-data",
"per_page": 20,
"to": 4,
"total": 4
}
}
Received response:
Request failed with error:
GET api/v1/type/device-message-processing-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/device-message-processing-status?page=1&perPage=20&sort=ypcdgmasypbrtrnthcppaqgcg&sortBy=jsyrgfxpcumarqxua&sortOrder=desc&filter[search]=tuyotle&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/device-message-processing-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "ypcdgmasypbrtrnthcppaqgcg",
"sortBy": "jsyrgfxpcumarqxua",
"sortOrder": "desc",
"filter[search]": "tuyotle",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/device-message-processing-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'ypcdgmasypbrtrnthcppaqgcg',
'sortBy' => 'jsyrgfxpcumarqxua',
'sortOrder' => 'desc',
'filter[search]' => 'tuyotle',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/device-message-processing-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'ypcdgmasypbrtrnthcppaqgcg',
'sortBy': 'jsyrgfxpcumarqxua',
'sortOrder': 'desc',
'filter[search]': 'tuyotle',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/device-message-processing-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/device-message-processing-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/device-message-processing-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/device-message-processing-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/failure
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/failure?page=1&perPage=20&sort=anfizvbk&sortBy=tfkvhrjitqfeyyuxqztmrhn&sortOrder=asc&filter[search]=rcj&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/failure"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "anfizvbk",
"sortBy": "tfkvhrjitqfeyyuxqztmrhn",
"sortOrder": "asc",
"filter[search]": "rcj",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/failure',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'anfizvbk',
'sortBy' => 'tfkvhrjitqfeyyuxqztmrhn',
'sortOrder' => 'asc',
'filter[search]' => 'rcj',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/failure'
params = {
'page': '1',
'perPage': '20',
'sort': 'anfizvbk',
'sortBy': 'tfkvhrjitqfeyyuxqztmrhn',
'sortOrder': 'asc',
'filter[search]': 'rcj',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/failure?page=1",
"last": "https://tracklabsolar.com/api/v1/type/failure?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/failure?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/failure",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/invitation-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/invitation-status?page=1&perPage=20&sort=nxhxdarhqarjqesn&sortBy=srkty&sortOrder=asc&filter[search]=hcuhglkbenpidbcxfuqgkverl&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/invitation-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "nxhxdarhqarjqesn",
"sortBy": "srkty",
"sortOrder": "asc",
"filter[search]": "hcuhglkbenpidbcxfuqgkverl",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/invitation-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'nxhxdarhqarjqesn',
'sortBy' => 'srkty',
'sortOrder' => 'asc',
'filter[search]' => 'hcuhglkbenpidbcxfuqgkverl',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/invitation-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'nxhxdarhqarjqesn',
'sortBy': 'srkty',
'sortOrder': 'asc',
'filter[search]': 'hcuhglkbenpidbcxfuqgkverl',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/invitation-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/invitation-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/invitation-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/invitation-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/ip
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/ip?page=1&perPage=20&sort=drdfougftpbxegzhhnpcnk&sortBy=oazdlburhctwnl&sortOrder=asc&filter[search]=ufzwlwhafgfiydt&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/ip"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "drdfougftpbxegzhhnpcnk",
"sortBy": "oazdlburhctwnl",
"sortOrder": "asc",
"filter[search]": "ufzwlwhafgfiydt",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/ip',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'drdfougftpbxegzhhnpcnk',
'sortBy' => 'oazdlburhctwnl',
'sortOrder' => 'asc',
'filter[search]' => 'ufzwlwhafgfiydt',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/ip'
params = {
'page': '1',
'perPage': '20',
'sort': 'drdfougftpbxegzhhnpcnk',
'sortBy': 'oazdlburhctwnl',
'sortOrder': 'asc',
'filter[search]': 'ufzwlwhafgfiydt',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/ip?page=1",
"last": "https://tracklabsolar.com/api/v1/type/ip?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/ip?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/ip",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mime-type-list
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mime-type-list?page=1&perPage=20&sort=lueq&sortBy=dqgy&sortOrder=desc&filter[search]=xfqqfusnfjcqlxktxyd&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mime-type-list"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "lueq",
"sortBy": "dqgy",
"sortOrder": "desc",
"filter[search]": "xfqqfusnfjcqlxktxyd",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mime-type-list',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'lueq',
'sortBy' => 'dqgy',
'sortOrder' => 'desc',
'filter[search]' => 'xfqqfusnfjcqlxktxyd',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mime-type-list'
params = {
'page': '1',
'perPage': '20',
'sort': 'lueq',
'sortBy': 'dqgy',
'sortOrder': 'desc',
'filter[search]': 'xfqqfusnfjcqlxktxyd',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mime-type-list?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mime-type-list?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mime-type-list?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mime-type-list",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-app-version
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-app-version?page=1&perPage=20&sort=iefqudev&sortBy=quzug&sortOrder=asc&filter[search]=u&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-app-version"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "iefqudev",
"sortBy": "quzug",
"sortOrder": "asc",
"filter[search]": "u",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-app-version',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'iefqudev',
'sortBy' => 'quzug',
'sortOrder' => 'asc',
'filter[search]' => 'u',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-app-version'
params = {
'page': '1',
'perPage': '20',
'sort': 'iefqudev',
'sortBy': 'quzug',
'sortOrder': 'asc',
'filter[search]': 'u',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-app-version?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-app-version?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-app-version?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-app-version",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-audit-action
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-audit-action?page=1&perPage=20&sort=jdbpifinqzjksapv&sortBy=zchjerznmyzijiabckbnzs&sortOrder=asc&filter[search]=yunrirsv&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-audit-action"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "jdbpifinqzjksapv",
"sortBy": "zchjerznmyzijiabckbnzs",
"sortOrder": "asc",
"filter[search]": "yunrirsv",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-audit-action',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'jdbpifinqzjksapv',
'sortBy' => 'zchjerznmyzijiabckbnzs',
'sortOrder' => 'asc',
'filter[search]' => 'yunrirsv',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-audit-action'
params = {
'page': '1',
'perPage': '20',
'sort': 'jdbpifinqzjksapv',
'sortBy': 'zchjerznmyzijiabckbnzs',
'sortOrder': 'asc',
'filter[search]': 'yunrirsv',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-audit-action?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-audit-action?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-audit-action?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-audit-action",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-audit-connection
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-audit-connection?page=1&perPage=20&sort=qqmkygtwfjllvfxszwkfgfywc&sortBy=ohkwtmxksfseuyakdtfq&sortOrder=desc&filter[search]=ajxsopdpncn&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-audit-connection"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "qqmkygtwfjllvfxszwkfgfywc",
"sortBy": "ohkwtmxksfseuyakdtfq",
"sortOrder": "desc",
"filter[search]": "ajxsopdpncn",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-audit-connection',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'qqmkygtwfjllvfxszwkfgfywc',
'sortBy' => 'ohkwtmxksfseuyakdtfq',
'sortOrder' => 'desc',
'filter[search]' => 'ajxsopdpncn',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-audit-connection'
params = {
'page': '1',
'perPage': '20',
'sort': 'qqmkygtwfjllvfxszwkfgfywc',
'sortBy': 'ohkwtmxksfseuyakdtfq',
'sortOrder': 'desc',
'filter[search]': 'ajxsopdpncn',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-audit-connection?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-audit-connection?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-audit-connection?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-audit-connection",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-audit-event
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-audit-event?page=1&perPage=20&sort=mhtmansoeywsddpkqwt&sortBy=zkukjuedavmzftitwyxf&sortOrder=asc&filter[search]=usmikohumbodtuqbxub&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-audit-event"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "mhtmansoeywsddpkqwt",
"sortBy": "zkukjuedavmzftitwyxf",
"sortOrder": "asc",
"filter[search]": "usmikohumbodtuqbxub",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-audit-event',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'mhtmansoeywsddpkqwt',
'sortBy' => 'zkukjuedavmzftitwyxf',
'sortOrder' => 'asc',
'filter[search]' => 'usmikohumbodtuqbxub',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-audit-event'
params = {
'page': '1',
'perPage': '20',
'sort': 'mhtmansoeywsddpkqwt',
'sortBy': 'zkukjuedavmzftitwyxf',
'sortOrder': 'asc',
'filter[search]': 'usmikohumbodtuqbxub',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-audit-event?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-audit-event?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-audit-event?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-audit-event",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-audit-result-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-audit-result-status?page=1&perPage=20&sort=c&sortBy=owfidxsnqua&sortOrder=asc&filter[search]=uqygneebtrxehlfgaj&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-audit-result-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "c",
"sortBy": "owfidxsnqua",
"sortOrder": "asc",
"filter[search]": "uqygneebtrxehlfgaj",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-audit-result-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'c',
'sortBy' => 'owfidxsnqua',
'sortOrder' => 'asc',
'filter[search]' => 'uqygneebtrxehlfgaj',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-audit-result-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'c',
'sortBy': 'owfidxsnqua',
'sortOrder': 'asc',
'filter[search]': 'uqygneebtrxehlfgaj',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-audit-result-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-audit-result-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-audit-result-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-audit-result-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-build-number
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-build-number?page=1&perPage=20&sort=umqxnk&sortBy=wj&sortOrder=asc&filter[search]=lbfwlnfqjc&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-build-number"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "umqxnk",
"sortBy": "wj",
"sortOrder": "asc",
"filter[search]": "lbfwlnfqjc",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-build-number',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'umqxnk',
'sortBy' => 'wj',
'sortOrder' => 'asc',
'filter[search]' => 'lbfwlnfqjc',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-build-number'
params = {
'page': '1',
'perPage': '20',
'sort': 'umqxnk',
'sortBy': 'wj',
'sortOrder': 'asc',
'filter[search]': 'lbfwlnfqjc',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-build-number?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-build-number?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-build-number?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-build-number",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-device-model
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-device-model?page=1&perPage=20&sort=xalzyiolvgggkysepuzcer&sortBy=rxnyduiqwpkvthstjqjcmp&sortOrder=asc&filter[search]=w&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-device-model"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "xalzyiolvgggkysepuzcer",
"sortBy": "rxnyduiqwpkvthstjqjcmp",
"sortOrder": "asc",
"filter[search]": "w",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-device-model',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'xalzyiolvgggkysepuzcer',
'sortBy' => 'rxnyduiqwpkvthstjqjcmp',
'sortOrder' => 'asc',
'filter[search]' => 'w',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-device-model'
params = {
'page': '1',
'perPage': '20',
'sort': 'xalzyiolvgggkysepuzcer',
'sortBy': 'rxnyduiqwpkvthstjqjcmp',
'sortOrder': 'asc',
'filter[search]': 'w',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-device-model?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-device-model?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-device-model?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-device-model",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-operator-label
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-operator-label?page=1&perPage=20&sort=ufyauvjkfgbfsfvcvhwqem&sortBy=tlgk&sortOrder=asc&filter[search]=ycpdbifvpjhkgijtz&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-operator-label"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "ufyauvjkfgbfsfvcvhwqem",
"sortBy": "tlgk",
"sortOrder": "asc",
"filter[search]": "ycpdbifvpjhkgijtz",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-operator-label',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'ufyauvjkfgbfsfvcvhwqem',
'sortBy' => 'tlgk',
'sortOrder' => 'asc',
'filter[search]' => 'ycpdbifvpjhkgijtz',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-operator-label'
params = {
'page': '1',
'perPage': '20',
'sort': 'ufyauvjkfgbfsfvcvhwqem',
'sortBy': 'tlgk',
'sortOrder': 'asc',
'filter[search]': 'ycpdbifvpjhkgijtz',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-operator-label?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-operator-label?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-operator-label?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-operator-label",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-os-version
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-os-version?page=1&perPage=20&sort=cfjspkytaurk&sortBy=xthzgbtryokkocufumdy&sortOrder=desc&filter[search]=iqbxwpwzqioh&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-os-version"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "cfjspkytaurk",
"sortBy": "xthzgbtryokkocufumdy",
"sortOrder": "desc",
"filter[search]": "iqbxwpwzqioh",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-os-version',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'cfjspkytaurk',
'sortBy' => 'xthzgbtryokkocufumdy',
'sortOrder' => 'desc',
'filter[search]' => 'iqbxwpwzqioh',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-os-version'
params = {
'page': '1',
'perPage': '20',
'sort': 'cfjspkytaurk',
'sortBy': 'xthzgbtryokkocufumdy',
'sortOrder': 'desc',
'filter[search]': 'iqbxwpwzqioh',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-os-version?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-os-version?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-os-version?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-os-version",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/mobile-platform
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/mobile-platform?page=1&perPage=20&sort=iennnggxsadrhyrnrq&sortBy=ubg&sortOrder=asc&filter[search]=gcbcxxmnmambuzrmudyukmva&filter[active]=&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/mobile-platform"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "iennnggxsadrhyrnrq",
"sortBy": "ubg",
"sortOrder": "asc",
"filter[search]": "gcbcxxmnmambuzrmudyukmva",
"filter[active]": "",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/mobile-platform',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'iennnggxsadrhyrnrq',
'sortBy' => 'ubg',
'sortOrder' => 'asc',
'filter[search]' => 'gcbcxxmnmambuzrmudyukmva',
'filter[active]' => '',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/mobile-platform'
params = {
'page': '1',
'perPage': '20',
'sort': 'iennnggxsadrhyrnrq',
'sortBy': 'ubg',
'sortOrder': 'asc',
'filter[search]': 'gcbcxxmnmambuzrmudyukmva',
'filter[active]': '',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/mobile-platform?page=1",
"last": "https://tracklabsolar.com/api/v1/type/mobile-platform?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/mobile-platform?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/mobile-platform",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/note
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/note?page=1&perPage=20&sort=dnakedeijdkwkyivorcnkym&sortBy=iedjubplp&sortOrder=desc&filter[search]=pabnqxgqchx&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/note"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "dnakedeijdkwkyivorcnkym",
"sortBy": "iedjubplp",
"sortOrder": "desc",
"filter[search]": "pabnqxgqchx",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/note',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'dnakedeijdkwkyivorcnkym',
'sortBy' => 'iedjubplp',
'sortOrder' => 'desc',
'filter[search]' => 'pabnqxgqchx',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/note'
params = {
'page': '1',
'perPage': '20',
'sort': 'dnakedeijdkwkyivorcnkym',
'sortBy': 'iedjubplp',
'sortOrder': 'desc',
'filter[search]': 'pabnqxgqchx',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/note?page=1",
"last": "https://tracklabsolar.com/api/v1/type/note?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/note?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/note",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/notification-channel
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/notification-channel?page=1&perPage=20&sort=iwivarbkpfsquxxnnqvt&sortBy=vw&sortOrder=desc&filter[search]=aahoh&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/notification-channel"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "iwivarbkpfsquxxnnqvt",
"sortBy": "vw",
"sortOrder": "desc",
"filter[search]": "aahoh",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/notification-channel',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'iwivarbkpfsquxxnnqvt',
'sortBy' => 'vw',
'sortOrder' => 'desc',
'filter[search]' => 'aahoh',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/notification-channel'
params = {
'page': '1',
'perPage': '20',
'sort': 'iwivarbkpfsquxxnnqvt',
'sortBy': 'vw',
'sortOrder': 'desc',
'filter[search]': 'aahoh',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/notification-channel?page=1",
"last": "https://tracklabsolar.com/api/v1/type/notification-channel?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/notification-channel?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/notification-channel",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/notification-delivery-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/notification-delivery-status?page=1&perPage=20&sort=ggsekyupftjizvwkcnohhqm&sortBy=ieekmekcwjjrukj&sortOrder=desc&filter[search]=axnoxgy&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/notification-delivery-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "ggsekyupftjizvwkcnohhqm",
"sortBy": "ieekmekcwjjrukj",
"sortOrder": "desc",
"filter[search]": "axnoxgy",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/notification-delivery-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'ggsekyupftjizvwkcnohhqm',
'sortBy' => 'ieekmekcwjjrukj',
'sortOrder' => 'desc',
'filter[search]' => 'axnoxgy',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/notification-delivery-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'ggsekyupftjizvwkcnohhqm',
'sortBy': 'ieekmekcwjjrukj',
'sortOrder': 'desc',
'filter[search]': 'axnoxgy',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/notification-delivery-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/notification-delivery-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/notification-delivery-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/notification-delivery-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/notification-template-format
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/notification-template-format?page=1&perPage=20&sort=hi&sortBy=vlch&sortOrder=desc&filter[search]=khaiylqmx&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/notification-template-format"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "hi",
"sortBy": "vlch",
"sortOrder": "desc",
"filter[search]": "khaiylqmx",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/notification-template-format',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'hi',
'sortBy' => 'vlch',
'sortOrder' => 'desc',
'filter[search]' => 'khaiylqmx',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/notification-template-format'
params = {
'page': '1',
'perPage': '20',
'sort': 'hi',
'sortBy': 'vlch',
'sortOrder': 'desc',
'filter[search]': 'khaiylqmx',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/notification-template-format?page=1",
"last": "https://tracklabsolar.com/api/v1/type/notification-template-format?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/notification-template-format?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/notification-template-format",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/permission
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/permission?page=1&perPage=20&sort=unazabqeojsabekcekglfur&sortBy=qojasjeurieqscf&sortOrder=asc&filter[search]=pxynistwlz&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/permission"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "unazabqeojsabekcekglfur",
"sortBy": "qojasjeurieqscf",
"sortOrder": "asc",
"filter[search]": "pxynistwlz",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/permission',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'unazabqeojsabekcekglfur',
'sortBy' => 'qojasjeurieqscf',
'sortOrder' => 'asc',
'filter[search]' => 'pxynistwlz',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/permission'
params = {
'page': '1',
'perPage': '20',
'sort': 'unazabqeojsabekcekglfur',
'sortBy': 'qojasjeurieqscf',
'sortOrder': 'asc',
'filter[search]': 'pxynistwlz',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/type/rma-status
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/rma-status?page=1&perPage=20&sort=cilwxevzruu&sortBy=onwuhvmlrjnakljwhqovbisf&sortOrder=desc&filter[search]=brrycgb&filter[active]=&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/rma-status"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "cilwxevzruu",
"sortBy": "onwuhvmlrjnakljwhqovbisf",
"sortOrder": "desc",
"filter[search]": "brrycgb",
"filter[active]": "",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/rma-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'cilwxevzruu',
'sortBy' => 'onwuhvmlrjnakljwhqovbisf',
'sortOrder' => 'desc',
'filter[search]' => 'brrycgb',
'filter[active]' => '',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/rma-status'
params = {
'page': '1',
'perPage': '20',
'sort': 'cilwxevzruu',
'sortBy': 'onwuhvmlrjnakljwhqovbisf',
'sortOrder': 'desc',
'filter[search]': 'brrycgb',
'filter[active]': '',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/rma-status?page=1",
"last": "https://tracklabsolar.com/api/v1/type/rma-status?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/rma-status?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/rma-status",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/role
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/role?page=1&perPage=20&sort=smot&sortBy=dck&sortOrder=asc&filter[search]=uvcxpkxpnc&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/role"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "smot",
"sortBy": "dck",
"sortOrder": "asc",
"filter[search]": "uvcxpkxpnc",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/role',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'smot',
'sortBy' => 'dck',
'sortOrder' => 'asc',
'filter[search]' => 'uvcxpkxpnc',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/role'
params = {
'page': '1',
'perPage': '20',
'sort': 'smot',
'sortBy': 'dck',
'sortOrder': 'asc',
'filter[search]': 'uvcxpkxpnc',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/type/user-address
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/user-address?page=1&perPage=20&sort=jsqek&sortBy=s&sortOrder=asc&filter[search]=nfuzgxynhwowyvrnjqhfuzufj&filter[active]=1&filter[enabled]=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/user-address"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "jsqek",
"sortBy": "s",
"sortOrder": "asc",
"filter[search]": "nfuzgxynhwowyvrnjqhfuzufj",
"filter[active]": "1",
"filter[enabled]": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/user-address',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'jsqek',
'sortBy' => 's',
'sortOrder' => 'asc',
'filter[search]' => 'nfuzgxynhwowyvrnjqhfuzufj',
'filter[active]' => '1',
'filter[enabled]' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/user-address'
params = {
'page': '1',
'perPage': '20',
'sort': 'jsqek',
'sortBy': 's',
'sortOrder': 'asc',
'filter[search]': 'nfuzgxynhwowyvrnjqhfuzufj',
'filter[active]': '1',
'filter[enabled]': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/user-address?page=1",
"last": "https://tracklabsolar.com/api/v1/type/user-address?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/user-address?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/user-address",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
GET api/v1/type/warranty
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/warranty?page=1&perPage=20&sort=adnulcz&sortBy=khylmnqnwy&sortOrder=asc&filter[search]=szelqpxtq&filter[active]=1&filter[enabled]=" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/warranty"
);
const params = {
"page": "1",
"perPage": "20",
"sort": "adnulcz",
"sortBy": "khylmnqnwy",
"sortOrder": "asc",
"filter[search]": "szelqpxtq",
"filter[active]": "1",
"filter[enabled]": "",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/warranty',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '20',
'sort' => 'adnulcz',
'sortBy' => 'khylmnqnwy',
'sortOrder' => 'asc',
'filter[search]' => 'szelqpxtq',
'filter[active]' => '1',
'filter[enabled]' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/warranty'
params = {
'page': '1',
'perPage': '20',
'sort': 'adnulcz',
'sortBy': 'khylmnqnwy',
'sortOrder': 'asc',
'filter[search]': 'szelqpxtq',
'filter[active]': '1',
'filter[enabled]': '',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [],
"links": {
"first": "https://tracklabsolar.com/api/v1/type/warranty?page=1",
"last": "https://tracklabsolar.com/api/v1/type/warranty?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://tracklabsolar.com/api/v1/type/warranty?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://tracklabsolar.com/api/v1/type/warranty",
"per_page": 20,
"to": null,
"total": 0
}
}
Received response:
Request failed with error:
Get Country Types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/country" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/country"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/country',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/country'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"isoCode": "",
"isoThreeCode": "",
"name": "Unknown",
"officialName": "Unknown",
"emoji": "",
"enabled": true,
"isActive": false
},
{
"isoCode": "",
"isoThreeCode": "",
"name": "Unknown",
"officialName": "Unknown",
"emoji": "",
"enabled": true,
"isActive": false
}
]
}
Received response:
Request failed with error:
Get Detailed Country Types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/country/detailed" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/country/detailed"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/country/detailed',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/country/detailed'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"isoCode": "",
"isoThreeCode": "",
"isoNumeric": 0,
"name": "Unknown",
"officialName": "Unknown",
"emoji": "",
"enabled": true,
"isActive": false,
"latitude": 0,
"longitude": 0,
"latitudeMin": 0,
"latitudeMax": 0,
"longitudeMin": 0,
"longitudeMax": 0,
"currencies": [
{
"code": "UNKNOWN",
"name": "Unknown",
"symbol": "ƒ",
"decimalPlaces": 0,
"isActive": false
}
],
"languages": [
{
"code": null,
"name": "Unknown",
"nativeName": null,
"isActive": false
}
],
"timezones": [
{
"identifier": "Unknown",
"name": "Unknown",
"utcOffset": 0,
"isActive": false
}
]
},
{
"isoCode": "",
"isoThreeCode": "",
"isoNumeric": 0,
"name": "Unknown",
"officialName": "Unknown",
"emoji": "",
"enabled": true,
"isActive": false,
"latitude": 0,
"longitude": 0,
"latitudeMin": 0,
"latitudeMax": 0,
"longitudeMin": 0,
"longitudeMax": 0,
"currencies": [
{
"code": "UNKNOWN",
"name": "Unknown",
"symbol": "ƒ",
"decimalPlaces": 0,
"isActive": false
}
],
"languages": [
{
"code": null,
"name": "Unknown",
"nativeName": null,
"isActive": false
}
],
"timezones": [
{
"identifier": "Unknown",
"name": "Unknown",
"utcOffset": 0,
"isActive": false
}
]
}
]
}
Received response:
Request failed with error:
Get Single Country Full Details
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/country/ZA" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/country/ZA"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/country/ZA',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/country/ZA'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"isoCode": "",
"isoThreeCode": "",
"isoNumeric": 0,
"name": "Unknown",
"officialName": "Unknown",
"emoji": "",
"enabled": true,
"isActive": false,
"latitude": 0,
"longitude": 0,
"latitudeMin": 0,
"latitudeMax": 0,
"longitudeMin": 0,
"longitudeMax": 0,
"continent": {
"name": "None"
},
"currencies": [
{
"code": "UNKNOWN",
"name": "Unknown",
"symbol": "ƒ",
"decimalPlaces": 0,
"isActive": false
}
],
"languages": [
{
"code": null,
"name": "Unknown",
"nativeName": null,
"isActive": false
}
],
"timezones": [
{
"identifier": "Unknown",
"name": "Unknown",
"utcOffset": 0,
"isActive": false
}
],
"regions": [
{
"name": "Unknown",
"isActive": false
}
],
"extras": null
}
}
Received response:
Request failed with error:
Get Data Types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "unknown",
"name": "unknown",
"description": ""
},
{
"slug": "unknown",
"name": "unknown",
"description": ""
}
]
}
Example response (200):
{
"data": [
{
"slug": "numeric",
"name": "Numeric",
"description": "Numeric data type"
},
{
"slug": "string",
"name": "String",
"description": "String data type"
}
]
}
Received response:
Request failed with error:
Get Data Unit Types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/units" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/units"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/units',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/units'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "unknown",
"dataTypeSlug": "unknown",
"name": "Unknown",
"unit": "",
"description": ""
},
{
"slug": "unknown",
"dataTypeSlug": "unknown",
"name": "Unknown",
"unit": "",
"description": ""
}
]
}
Received response:
Request failed with error:
Get Parameter Types
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/parameter" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/parameter"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/parameter',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/parameter'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "unknown",
"name": "Unknown",
"description": "",
"dataUnitSlug": "unknown",
"dataTypeSlug": "unknown",
"unit": "",
"orderColumn": 0,
"enabled": true,
"isReadOnly": false,
"collectorTypeSlug": null,
"validation": [],
"lookups": null
},
{
"slug": "unknown",
"name": "Unknown",
"description": "",
"dataUnitSlug": "unknown",
"dataTypeSlug": "unknown",
"unit": "",
"orderColumn": 0,
"enabled": true,
"isReadOnly": false,
"collectorTypeSlug": null,
"validation": [],
"lookups": null
}
]
}
Example response (200):
{
"data": [
{
"slug": "battery_level",
"dataUnitSlug": "percentage",
"dataTypeSlug": "numeric",
"unit": "%",
"name": "Battery Level",
"description": "Device battery level"
}
]
}
Received response:
Request failed with error:
Get Measurement Types
requires authentication
Retrieve all available measurement types for collectors.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/measurement" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/measurement"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/measurement',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/measurement'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Temperature",
"slug": "temperature",
"description": "Temperature measurements",
"data_type": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Numeric",
"slug": "numeric"
},
"data_unit": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Celsius",
"slug": "celsius",
"symbol": "°C"
}
}
]
}
Received response:
Request failed with error:
GET api/v1/type/data/measurement-aggregation
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/measurement-aggregation" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/measurement-aggregation"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/measurement-aggregation',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/measurement-aggregation'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": {
"avg": {
"slug": "avg",
"name": "Average",
"description": "Mean + stddev + kurtosis (default)",
"orderColumn": 1,
"requiresNumericData": true
},
"median": {
"slug": "median",
"name": "Median",
"description": "Median (50th percentile)",
"orderColumn": 2,
"requiresNumericData": true
},
"min": {
"slug": "min",
"name": "Minimum",
"description": "Minimum value in bucket",
"orderColumn": 3,
"requiresNumericData": true
},
"max": {
"slug": "max",
"name": "Maximum",
"description": "Maximum value in bucket",
"orderColumn": 4,
"requiresNumericData": true
},
"sum": {
"slug": "sum",
"name": "Sum",
"description": "Sum of all values",
"orderColumn": 5,
"requiresNumericData": true
},
"count": {
"slug": "count",
"name": "Count",
"description": "Number of data points",
"orderColumn": 6,
"requiresNumericData": false
},
"first": {
"slug": "first",
"name": "First",
"description": "First value by timestamp",
"orderColumn": 7,
"requiresNumericData": false
},
"last": {
"slug": "last",
"name": "Last",
"description": "Last value by timestamp",
"orderColumn": 8,
"requiresNumericData": false
}
}
}
Received response:
Request failed with error:
GET api/v1/type/data/period
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/period" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/period"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/period',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/period'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": [
{
"slug": "none",
"name": "No Aggregation",
"interval": "00:00:01",
"order": -10
},
{
"slug": "1-minute",
"name": "1 Minute",
"interval": "00:01:00",
"order": 0
},
{
"slug": "10-minutes",
"name": "10 Minutes",
"interval": "00:10:00",
"order": 10
},
{
"slug": "1-hour",
"name": "1 Hour",
"interval": "01:00:00",
"order": 20
},
{
"slug": "4-hours",
"name": "4 Hours",
"interval": "04:00:00",
"order": 30
},
{
"slug": "12-hours",
"name": "12 Hours",
"interval": "12:00:00",
"order": 40
},
{
"slug": "1-day",
"name": "1 Day",
"interval": "1 day",
"order": 50
},
{
"slug": "1-week",
"name": "1 Week",
"interval": "7 days",
"order": 60
},
{
"slug": "1-month",
"name": "1 Month",
"interval": "1 mon",
"order": 70
}
]
}
Received response:
Request failed with error:
GET api/v1/type/data/environment
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/environment" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/environment"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/environment',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/environment'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": {
"production": {
"slug": "production",
"name": "Production",
"description": "Production environment"
},
"staging": {
"slug": "staging",
"name": "Staging",
"description": "Staging environment"
},
"development": {
"slug": "development",
"name": "Development",
"description": "Development environment"
}
}
}
Received response:
Request failed with error:
GET api/v1/type/data/device-message-processing-error
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/data/device-message-processing-error" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/data/device-message-processing-error"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/data/device-message-processing-error',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/data/device-message-processing-error'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"data": {
"collector-not-found": {
"slug": "collector-not-found",
"name": "Collector Not Found",
"description": "No collector found for the given serial number"
},
"database-error": {
"slug": "database-error",
"name": "Database Error",
"description": "Database operation failed during processing"
},
"invalid-message-structure": {
"slug": "invalid-message-structure",
"name": "Invalid Message Structure",
"description": "Message JSON structure is invalid or missing required fields"
},
"json-parsing-error": {
"slug": "json-parsing-error",
"name": "JSON Parsing Error",
"description": "Failed to parse message JSON"
},
"measurement-type-not-found": {
"slug": "measurement-type-not-found",
"name": "Measurement Type Not Found",
"description": "Measurement type slug not found in measurement types table"
},
"parameter-type-not-found": {
"slug": "parameter-type-not-found",
"name": "Parameter Type Not Found",
"description": "Parameter type slug not found in parameter types table"
}
}
}
Received response:
Request failed with error:
Get User Status Types
requires authentication
Returns all enabled user status types ordered by order_column.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/type/user-status" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/type/user-status"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/type/user-status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/type/user-status'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": [
{
"slug": "pending",
"name": "Pending",
"enabled": true,
"orderColumn": 1
},
{
"slug": "pending",
"name": "Pending",
"enabled": true,
"orderColumn": 1
}
]
}
Example response (200):
{
"data": [
{
"slug": "pending",
"name": "Pending",
"enabled": true,
"orderColumn": 1
},
{
"slug": "active",
"name": "Active",
"enabled": true,
"orderColumn": 2
}
]
}
Received response:
Request failed with error:
Handle an incoming registration request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/register" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"companyName\": \"My Awesome Company\",
\"firstName\": \"Jane\",
\"lastName\": \"Smith\",
\"email\": \"jane.smith@example.com\",
\"password\": \"StrongPass123!@#\",
\"countryIsoCode\": \"GB\",
\"phoneNumber\": \"+447123456789\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/register"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"companyName": "My Awesome Company",
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@example.com",
"password": "StrongPass123!@#",
"countryIsoCode": "GB",
"phoneNumber": "+447123456789"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/register',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'companyName' => 'My Awesome Company',
'firstName' => 'Jane',
'lastName' => 'Smith',
'email' => 'jane.smith@example.com',
'password' => 'StrongPass123!@#',
'countryIsoCode' => 'GB',
'phoneNumber' => '+447123456789',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/register'
payload = {
"companyName": "My Awesome Company",
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@example.com",
"password": "StrongPass123!@#",
"countryIsoCode": "GB",
"phoneNumber": "+447123456789"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (201):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
Handle an incoming password reset link request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/forgot-password" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"user@example.com\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/forgot-password"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "user@example.com"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/forgot-password',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'user@example.com',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/forgot-password'
payload = {
"email": "user@example.com"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"status": "We have emailed your password reset link."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"email": [
"We can't find a user with that email address."
]
}
}
Received response:
Request failed with error:
Handle an incoming new password request.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/reset-password" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"token\": \"...\",
\"email\": \"user@example.com\",
\"password\": \"NewSecurePass123!\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/reset-password"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"token": "...",
"email": "user@example.com",
"password": "NewSecurePass123!"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/reset-password',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'token' => '...',
'email' => 'user@example.com',
'password' => 'NewSecurePass123!',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/reset-password'
payload = {
"token": "...",
"email": "user@example.com",
"password": "NewSecurePass123!"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"status": "Your password has been reset."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"email": [
"We can't find a user with that email address."
]
}
}
Received response:
Request failed with error:
Mark the user's email address as verified.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/verify-email/quas/dolor" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/verify-email/quas/dolor"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/verify-email/quas/dolor',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/verify-email/quas/dolor'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (302):
Show headers
cache-control: no-cache, private
location: https://tracklabsolar.com/emailVerification?error=invalid&msg=Invalid+verification+link
content-type: text/html; charset=utf-8
x-ratelimit-limit: 6
x-ratelimit-remaining: 1
vary: Origin
set-cookie: XSRF-TOKEN=eyJpdiI6IkpIZ0RPcFlMZ21WeEQ0NUM3NVpNQkE9PSIsInZhbHVlIjoiNWZOTmVHVHpOZzhNd2N5a2dDZWRnRmJpVDhDVHBtbEt0K28yTXhKR2pGbGoyY0hvWWFwR1FrVGsvUUR0dFU2bEJ0a2VhMFRVc1J6ekhrUVYwWUU0NEp3b2g1dzB2eVdrNTVQQm9GSFZNU09rbnhsWkZiaWMwbmVpTXJCWk1WbFYiLCJtYWMiOiJmOGM4ZTg4ZmIyZjc0MjYzNWM3NjY5ZDgwMjg1ODU2ZjRhOTExN2NmMTc1OGIyYTU4Mjg4MTJmMWU0ZDA5OTI4IiwidGFnIjoiIn0%3D; expires=Fri, 27 Mar 2026 01:05:12 GMT; Max-Age=7200; path=/; domain=tracklabsolar.com; secure; samesite=lax; tracklab_session=eyJpdiI6IkZlLzBLZ3NiYjJoaDNHL01JNVQ1Tnc9PSIsInZhbHVlIjoiUk1lRW9uY2QrUm5xWlA3RVpFMlZ3Y2NUQ2tnZ2MvNHhaQXdpTjgrVTZvM3htazNZVFAzVHdheW5kUGU1OTg2TURRNlBFb0NraC9MTE1odmUrNWU4VEFHWENkU2hielBacXFGSjhacDhGb0dBRnlxLzZGZ2tBNEhlN29sMGNIWUQiLCJtYWMiOiIxNWJjYTUxZGE4NjNhZjUxODg1NTFmNzM2OGY5NDQ1MzUxNDBlYzI1ZGQxMzhhMjg2OTBmNDk1NDcwMTk3MzZhIiwidGFnIjoiIn0%3D; expires=Fri, 27 Mar 2026 01:05:12 GMT; Max-Age=7200; path=/; domain=tracklabsolar.com; secure; httponly; samesite=lax
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="0;url='https://tracklabsolar.com/emailVerification?error=invalid&msg=Invalid+verification+link'" />
<title>Redirecting to https://tracklabsolar.com/emailVerification?error=invalid&msg=Invalid+verification+link</title>
</head>
<body>
Redirecting to <a href="https://tracklabsolar.com/emailVerification?error=invalid&msg=Invalid+verification+link">https://tracklabsolar.com/emailVerification?error=invalid&msg=Invalid+verification+link</a>.
</body>
</html>
Received response:
Request failed with error:
Invitations
Get invitation details by token.
requires authentication
Public endpoint - no authentication required. Returns invitation details for display before acceptance.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/invitations/tempore" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/invitations/tempore"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/invitations/tempore',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/invitations/tempore'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"email": "user@example.com",
"companyName": "Example Company",
"roleName": "user",
"invitedBy": "John Doe",
"status": "pending",
"validUntil": "2026-01-27T12:00:00Z",
"isExpired": false
}
}
Received response:
Request failed with error:
Accept an invitation.
requires authentication
Requires authentication. Adds the authenticated user to the company with the pre-assigned role from the invitation.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/invitations/deserunt/accept" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/invitations/deserunt/accept"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/invitations/deserunt/accept',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/invitations/deserunt/accept'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": null,
"email": null,
"status": null,
"roleSlug": null,
"invitedBy": {
"uuid": null,
"name": null
},
"validUntil": "2026-03-26T23:05:11+00:00",
"acceptedAt": null,
"createdAt": "2026-03-26T23:05:11+00:00"
}
}
Received response:
Request failed with error:
Super Admin - Activity Logs
List all activity logs (global scope).
requires authentication
Returns paginated activity logs with optional filtering by event type, action, date range, causer, and other parameters.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/activity-logs?page=1&perPage=25&event=sa.device-model-type&action=create&logName=default&subjectType=User&causerUuid=550e8400-e29b-41d4-a716-446655440000&companySlug=acme-corp&impersonatorUuid=550e8400-e29b-41d4-a716-446655440000&fromDate=2026-01-01&toDate=2026-12-31&batchUuid=550e8400-e29b-41d4-a716-446655440000&search=firmware&sortBy=created_at&sortOrder=desc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/activity-logs"
);
const params = {
"page": "1",
"perPage": "25",
"event": "sa.device-model-type",
"action": "create",
"logName": "default",
"subjectType": "User",
"causerUuid": "550e8400-e29b-41d4-a716-446655440000",
"companySlug": "acme-corp",
"impersonatorUuid": "550e8400-e29b-41d4-a716-446655440000",
"fromDate": "2026-01-01",
"toDate": "2026-12-31",
"batchUuid": "550e8400-e29b-41d4-a716-446655440000",
"search": "firmware",
"sortBy": "created_at",
"sortOrder": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/activity-logs',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'event' => 'sa.device-model-type',
'action' => 'create',
'logName' => 'default',
'subjectType' => 'User',
'causerUuid' => '550e8400-e29b-41d4-a716-446655440000',
'companySlug' => 'acme-corp',
'impersonatorUuid' => '550e8400-e29b-41d4-a716-446655440000',
'fromDate' => '2026-01-01',
'toDate' => '2026-12-31',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440000',
'search' => 'firmware',
'sortBy' => 'created_at',
'sortOrder' => 'desc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/activity-logs'
params = {
'page': '1',
'perPage': '25',
'event': 'sa.device-model-type',
'action': 'create',
'logName': 'default',
'subjectType': 'User',
'causerUuid': '550e8400-e29b-41d4-a716-446655440000',
'companySlug': 'acme-corp',
'impersonatorUuid': '550e8400-e29b-41d4-a716-446655440000',
'fromDate': '2026-01-01',
'toDate': '2026-12-31',
'batchUuid': '550e8400-e29b-41d4-a716-446655440000',
'search': 'firmware',
'sortBy': 'created_at',
'sortOrder': 'desc',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get available filter options for activity logs.
requires authentication
Returns distinct values for events, log names, and subject types to populate filter dropdowns in the UI.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/activity-logs/filter-options?page=1&perPage=25&event=sa.device-model-type&action=create&logName=default&subjectType=User&causerUuid=550e8400-e29b-41d4-a716-446655440000&companySlug=acme-corp&impersonatorUuid=550e8400-e29b-41d4-a716-446655440000&fromDate=2026-01-01&toDate=2026-12-31&batchUuid=550e8400-e29b-41d4-a716-446655440000&search=firmware&sortBy=created_at&sortOrder=desc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/activity-logs/filter-options"
);
const params = {
"page": "1",
"perPage": "25",
"event": "sa.device-model-type",
"action": "create",
"logName": "default",
"subjectType": "User",
"causerUuid": "550e8400-e29b-41d4-a716-446655440000",
"companySlug": "acme-corp",
"impersonatorUuid": "550e8400-e29b-41d4-a716-446655440000",
"fromDate": "2026-01-01",
"toDate": "2026-12-31",
"batchUuid": "550e8400-e29b-41d4-a716-446655440000",
"search": "firmware",
"sortBy": "created_at",
"sortOrder": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/activity-logs/filter-options',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'event' => 'sa.device-model-type',
'action' => 'create',
'logName' => 'default',
'subjectType' => 'User',
'causerUuid' => '550e8400-e29b-41d4-a716-446655440000',
'companySlug' => 'acme-corp',
'impersonatorUuid' => '550e8400-e29b-41d4-a716-446655440000',
'fromDate' => '2026-01-01',
'toDate' => '2026-12-31',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440000',
'search' => 'firmware',
'sortBy' => 'created_at',
'sortOrder' => 'desc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/activity-logs/filter-options'
params = {
'page': '1',
'perPage': '25',
'event': 'sa.device-model-type',
'action': 'create',
'logName': 'default',
'subjectType': 'User',
'causerUuid': '550e8400-e29b-41d4-a716-446655440000',
'companySlug': 'acme-corp',
'impersonatorUuid': '550e8400-e29b-41d4-a716-446655440000',
'fromDate': '2026-01-01',
'toDate': '2026-12-31',
'batchUuid': '550e8400-e29b-41d4-a716-446655440000',
'search': 'firmware',
'sortBy': 'created_at',
'sortOrder': 'desc',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Export activity logs.
requires authentication
Exports activity logs with optional filtering. Supports CSV and JSON formats. Uses streaming for memory-efficient export of large datasets.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/activity-logs/export?startDate=2026-01-01&endDate=2026-12-31&event=sa.device-model-type&action=create&logName=default&subjectType=User&causerUuid=550e8400-e29b-41d4-a716-446655440000&batchUuid=550e8400-e29b-41d4-a716-446655440000&search=firmware&format=csv" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/activity-logs/export"
);
const params = {
"startDate": "2026-01-01",
"endDate": "2026-12-31",
"event": "sa.device-model-type",
"action": "create",
"logName": "default",
"subjectType": "User",
"causerUuid": "550e8400-e29b-41d4-a716-446655440000",
"batchUuid": "550e8400-e29b-41d4-a716-446655440000",
"search": "firmware",
"format": "csv",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/activity-logs/export',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'startDate' => '2026-01-01',
'endDate' => '2026-12-31',
'event' => 'sa.device-model-type',
'action' => 'create',
'logName' => 'default',
'subjectType' => 'User',
'causerUuid' => '550e8400-e29b-41d4-a716-446655440000',
'batchUuid' => '550e8400-e29b-41d4-a716-446655440000',
'search' => 'firmware',
'format' => 'csv',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/activity-logs/export'
params = {
'startDate': '2026-01-01',
'endDate': '2026-12-31',
'event': 'sa.device-model-type',
'action': 'create',
'logName': 'default',
'subjectType': 'User',
'causerUuid': '550e8400-e29b-41d4-a716-446655440000',
'batchUuid': '550e8400-e29b-41d4-a716-446655440000',
'search': 'firmware',
'format': 'csv',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Super Admin - Company Users
Create a new user for the specified company.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"new.user@example.com\",
\"firstName\": \"John\",
\"lastName\": \"Doe\",
\"countryIsoCode\": \"US\",
\"phoneNumber\": \"+1234567890\",
\"role\": \"admin\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "new.user@example.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "admin"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'new.user@example.com',
'firstName' => 'John',
'lastName' => 'Doe',
'countryIsoCode' => 'US',
'phoneNumber' => '+1234567890',
'role' => 'admin',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/users'
payload = {
"email": "new.user@example.com",
"firstName": "John",
"lastName": "Doe",
"countryIsoCode": "US",
"phoneNumber": "+1234567890",
"role": "admin"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Remove a user from a specific company.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Super Admin - Data Retention
List all data retention audit records.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-retention/audits?page=1&perPage=25&status=completed&dataType=device-messages&operation=delete&startedAfter=2026-01-01&startedBefore=2026-12-31&sortBy=started_at&sortOrder=desc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/audits"
);
const params = {
"page": "1",
"perPage": "25",
"status": "completed",
"dataType": "device-messages",
"operation": "delete",
"startedAfter": "2026-01-01",
"startedBefore": "2026-12-31",
"sortBy": "started_at",
"sortOrder": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-retention/audits',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'status' => 'completed',
'dataType' => 'device-messages',
'operation' => 'delete',
'startedAfter' => '2026-01-01',
'startedBefore' => '2026-12-31',
'sortBy' => 'started_at',
'sortOrder' => 'desc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/audits'
params = {
'page': '1',
'perPage': '25',
'status': 'completed',
'dataType': 'device-messages',
'operation': 'delete',
'startedAfter': '2026-01-01',
'startedBefore': '2026-12-31',
'sortBy': 'started_at',
'sortOrder': 'desc',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Show a single data retention audit record.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-retention/audits/cc58b8da-c994-4cf2-a6d7-e7267b267ca2" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/audits/cc58b8da-c994-4cf2-a6d7-e7267b267ca2"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-retention/audits/cc58b8da-c994-4cf2-a6d7-e7267b267ca2',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/audits/cc58b8da-c994-4cf2-a6d7-e7267b267ca2'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
List global default retention policies.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-retention/defaults" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/defaults"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-retention/defaults',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/defaults'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
List effective retention policies for a company.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create or update a company retention policy override.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"dataType\": \"measurement\",
\"retentionDays\": 365,
\"archiveEnabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"dataType": "measurement",
"retentionDays": 365,
"archiveEnabled": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'dataType' => 'measurement',
'retentionDays' => 365,
'archiveEnabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies'
payload = {
"dataType": "measurement",
"retentionDays": 365,
"archiveEnabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Update a company retention policy override for a specific data type.
requires authentication
Example request:
curl --request PUT \
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"retentionDays\": 730,
\"archiveEnabled\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"retentionDays": 730,
"archiveEnabled": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->put(
'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'retentionDays' => 730,
'archiveEnabled' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements'
payload = {
"retentionDays": 730,
"archiveEnabled": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Delete a company retention policy override, reverting to global default.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/data-retention/companies/tracklab/policies/collector-measurements'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Super Admin - Impersonation
Stop the current impersonation session.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/impersonation/stop" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/impersonation/stop"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/impersonation/stop',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/impersonation/stop'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Get current impersonation status.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/impersonation/status" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/impersonation/status"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/impersonation/status',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/impersonation/status'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Start an impersonation session.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/impersonation/start" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/impersonation/start"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/impersonation/start',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/impersonation/start'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
List active impersonation sessions.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/impersonation/sessions?page=1&perPage=25&impersonatorUuid=550e8400-e29b-41d4-a716-446655440000&targetUserUuid=550e8400-e29b-41d4-a716-446655440000&active=1&fromDate=2026-01-01&toDate=2026-12-31&sortBy=startedAt&sortOrder=desc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/impersonation/sessions"
);
const params = {
"page": "1",
"perPage": "25",
"impersonatorUuid": "550e8400-e29b-41d4-a716-446655440000",
"targetUserUuid": "550e8400-e29b-41d4-a716-446655440000",
"active": "1",
"fromDate": "2026-01-01",
"toDate": "2026-12-31",
"sortBy": "startedAt",
"sortOrder": "desc",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/impersonation/sessions',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'impersonatorUuid' => '550e8400-e29b-41d4-a716-446655440000',
'targetUserUuid' => '550e8400-e29b-41d4-a716-446655440000',
'active' => '1',
'fromDate' => '2026-01-01',
'toDate' => '2026-12-31',
'sortBy' => 'startedAt',
'sortOrder' => 'desc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/impersonation/sessions'
params = {
'page': '1',
'perPage': '25',
'impersonatorUuid': '550e8400-e29b-41d4-a716-446655440000',
'targetUserUuid': '550e8400-e29b-41d4-a716-446655440000',
'active': '1',
'fromDate': '2026-01-01',
'toDate': '2026-12-31',
'sortBy': 'startedAt',
'sortOrder': 'desc',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Terminate an impersonation session (admin override).
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/impersonation/sessions/5eee9f6f-18ce-35ad-a991-6d2824df0fd3/terminate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/impersonation/sessions/5eee9f6f-18ce-35ad-a991-6d2824df0fd3/terminate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/impersonation/sessions/5eee9f6f-18ce-35ad-a991-6d2824df0fd3/terminate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/impersonation/sessions/5eee9f6f-18ce-35ad-a991-6d2824df0fd3/terminate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Super Admin - TrackLab Users
Elevate a TrackLab user to super admin status.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/elevate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/elevate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/elevate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/elevate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Revoke super admin status from a TrackLab user.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/revoke" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/revoke"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/revoke',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/tracklab/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/revoke'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()Received response:
Request failed with error:
Super Admin - Users
GET api/v1/sa/users
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"search\": \"tim\",
\"companySlug\": \"tracklab-solar\",
\"role\": \"admin\",
\"isActive\": true,
\"page\": 1,
\"perPage\": 25
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"search": "tim",
"companySlug": "tracklab-solar",
"role": "admin",
"isActive": true,
"page": 1,
"perPage": 25
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'search' => 'tim',
'companySlug' => 'tracklab-solar',
'role' => 'admin',
'isActive' => true,
'page' => 1,
'perPage' => 25,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users'
payload = {
"search": "tim",
"companySlug": "tracklab-solar",
"role": "admin",
"isActive": true,
"page": 1,
"perPage": 25
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": [
{
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
},
{
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
]
}
Received response:
Request failed with error:
GET api/v1/sa/users/{uuid}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
GET api/v1/sa/users/{user_uuid}/role
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/role" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/role"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/role',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/role'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
GET api/v1/sa/users/{user_uuid}/permissions
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/permissions" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/permissions"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/permissions',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/permissions'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
PATCH api/v1/sa/users/{uuid}
requires authentication
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"updated.user@example.com\",
\"firstName\": \"Tim\",
\"lastName\": \"Haak\",
\"countryIsoCode\": \"NL\",
\"phoneNumber\": \"+31612345678\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "updated.user@example.com",
"firstName": "Tim",
"lastName": "Haak",
"countryIsoCode": "NL",
"phoneNumber": "+31612345678"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'updated.user@example.com',
'firstName' => 'Tim',
'lastName' => 'Haak',
'countryIsoCode' => 'NL',
'phoneNumber' => '+31612345678',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
payload = {
"email": "updated.user@example.com",
"firstName": "Tim",
"lastName": "Haak",
"countryIsoCode": "NL",
"phoneNumber": "+31612345678"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
DELETE api/v1/sa/users/{uuid}
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/users/{user_uuid}/profile/picture
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"file\": \"perferendis\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"file": "perferendis"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'file' => 'perferendis',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture'
payload = {
"file": "perferendis"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Example response (200):
{
"data": {
"uuid": "b11fab33-a56a-4a78-a3c1-b9d324c6aacd",
"createdAt": "2025-11-12T20:27:08+00:00",
"updatedAt": "2026-02-10T15:20:26+00:00",
"defaultCompanySlug": null,
"emailVerifiedAt": null,
"defaultCountryIsoCode": "",
"defaultCountryEmoji": "",
"email": "liquid.ideas@gmail.com",
"firstName": "Jo",
"lastName": "Whitehouse",
"phoneNumbers": [],
"roles": [],
"imgUrl": null,
"imgThumbUrl": null,
"imgLargeUrl": null,
"imgUrlExpiresAt": null,
"isActive": true,
"disabledAt": null,
"status": null,
"statusName": null
}
}
Received response:
Request failed with error:
GET api/v1/sa/users/{user_uuid}/profile/picture/{format?}
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/architecto" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/architecto"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/architecto',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/users/b11fab33-a56a-4a78-a3c1-b9d324c6aacd/profile/picture/architecto'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Super Admin > Companies
List all companies
requires authentication
Returns a paginated list of all companies with optional filtering.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"search\": \"Solar\",
\"enabled\": true,
\"perPage\": 25,
\"page\": 1
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"search": "Solar",
"enabled": true,
"perPage": 25,
"page": 1
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'search' => 'Solar',
'enabled' => true,
'perPage' => 25,
'page' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c'
payload = {
"search": "Solar",
"enabled": true,
"perPage": 25,
"page": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create a new company
requires authentication
Creates a new company with the provided details.
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Solar Energy Corp\",
\"slug\": \"solar-energy-corp\",
\"countryIsoCode\": \"US\"
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Solar Energy Corp",
"slug": "solar-energy-corp",
"countryIsoCode": "US"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Solar Energy Corp',
'slug' => 'solar-energy-corp',
'countryIsoCode' => 'US',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c'
payload = {
"name": "Solar Energy Corp",
"slug": "solar-energy-corp",
"countryIsoCode": "US"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Get a company
requires authentication
Returns the details of a specific company.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"search\": \"Solar\",
\"enabled\": true,
\"perPage\": 25,
\"page\": 1
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"search": "Solar",
"enabled": true,
"perPage": 25,
"page": 1
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'search' => 'Solar',
'enabled' => true,
'perPage' => 25,
'page' => 1,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab'
payload = {
"search": "Solar",
"enabled": true,
"perPage": 25,
"page": 1
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Update a company
requires authentication
Updates the specified company with the provided details.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/c/tracklab" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"Solar Energy Corp Updated\",
\"slug\": \"solar-energy-corp-updated\",
\"countryIsoCode\": \"US\",
\"enabled\": true
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "Solar Energy Corp Updated",
"slug": "solar-energy-corp-updated",
"countryIsoCode": "US",
"enabled": true
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/c/tracklab',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'Solar Energy Corp Updated',
'slug' => 'solar-energy-corp-updated',
'countryIsoCode' => 'US',
'enabled' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab'
payload = {
"name": "Solar Energy Corp Updated",
"slug": "solar-energy-corp-updated",
"countryIsoCode": "US",
"enabled": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Disable a company
requires authentication
Disables the specified company. Users of this company will not be able to log in.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/disable" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/disable"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PATCH",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/disable',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/disable'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers)
response.json()Received response:
Request failed with error:
Enable a company
requires authentication
Enables the specified company. Users of this company will be able to log in again.
Example request:
curl --request PATCH \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/enable" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/enable"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PATCH",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->patch(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/enable',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/enable'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers)
response.json()Received response:
Request failed with error:
Delete a company
requires authentication
Soft deletes the specified company.
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
POST api/v1/sa/c/{company_slug}/address
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/address" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"addressString\": \"123 Main St, London SW1A 1AA\",
\"addressLine1\": \"123 Main Street\",
\"city\": \"London\",
\"postCode\": \"SW1A 1AA\",
\"countryIsoCode\": \"GB\",
\"addressLine2\": \"Apt 4B\",
\"neighborhood\": \"Westminster\",
\"locality\": \"Central London\",
\"place\": \"Piccadilly Circus\",
\"district\": \"City of Westminster\",
\"region\": \"Greater London\",
\"location\": {
\"lat\": 51.5074,
\"long\": -0.1278,
\"latitude\": 51.5074,
\"longitude\": -0.1278
}
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/address"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"addressString": "123 Main St, London SW1A 1AA",
"addressLine1": "123 Main Street",
"city": "London",
"postCode": "SW1A 1AA",
"countryIsoCode": "GB",
"addressLine2": "Apt 4B",
"neighborhood": "Westminster",
"locality": "Central London",
"place": "Piccadilly Circus",
"district": "City of Westminster",
"region": "Greater London",
"location": {
"lat": 51.5074,
"long": -0.1278,
"latitude": 51.5074,
"longitude": -0.1278
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/address',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'addressString' => '123 Main St, London SW1A 1AA',
'addressLine1' => '123 Main Street',
'city' => 'London',
'postCode' => 'SW1A 1AA',
'countryIsoCode' => 'GB',
'addressLine2' => 'Apt 4B',
'neighborhood' => 'Westminster',
'locality' => 'Central London',
'place' => 'Piccadilly Circus',
'district' => 'City of Westminster',
'region' => 'Greater London',
'location' => [
'lat' => 51.5074,
'long' => -0.1278,
'latitude' => 51.5074,
'longitude' => -0.1278,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/address'
payload = {
"addressString": "123 Main St, London SW1A 1AA",
"addressLine1": "123 Main Street",
"city": "London",
"postCode": "SW1A 1AA",
"countryIsoCode": "GB",
"addressLine2": "Apt 4B",
"neighborhood": "Westminster",
"locality": "Central London",
"place": "Piccadilly Circus",
"district": "City of Westminster",
"region": "Greater London",
"location": {
"lat": 51.5074,
"long": -0.1278,
"latitude": 51.5074,
"longitude": -0.1278
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()Received response:
Request failed with error:
Upload or replace a company's logo.
requires authentication
Example request:
curl --request POST \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/logo" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "file=@/tmp/phpkk6etesu7i9r6txGwqM" const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/logo"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->post(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'file',
'contents' => fopen('/tmp/phpkk6etesu7i9r6txGwqM', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo'
files = {
'file': open('/tmp/phpkk6etesu7i9r6txGwqM', 'rb')
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files)
response.json()Received response:
Request failed with error:
Get a company's logo in the requested format.
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/recusandae" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/recusandae"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/recusandae',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/recusandae'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Delete a company's logo.
requires authentication
Example request:
curl --request DELETE \
"https://tracklabsolar.com/api/v1/sa/c/tracklab/logo" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/logo"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->delete(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()Received response:
Request failed with error:
Get a company's logo using a signed URL token.
requires authentication
The token contains encrypted company slug and expiry timestamp. URL format: /sa/c/{companySlug}/logo/{signedToken}/{format}/image.webp
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/eyJpdiI6.../square-256-webp/image.webp" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/eyJpdiI6.../square-256-webp/image.webp"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/eyJpdiI6.../square-256-webp/image.webp',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/c/tracklab/logo/eyJpdiI6.../square-256-webp/image.webp'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
The image file stream
Example response (403):
{
"message": "Invalid or expired token."
}
Example response (404):
{
"message": "Company not found."
}
Received response:
Request failed with error:
Super Admin > Mobile Audit Events
List mobile audit events
requires authentication
Returns a paginated list of all mobile audit events with optional filtering.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/mobile/audit-events?page=1&perPage=25&companySlug=acme-corp&collectorUuid=550e8400-e29b-41d4-a716-446655440010&userUuid=550e8400-e29b-41d4-a716-446655440011&eventName=mobile-ncu&actionName=command-send&dateFrom=2026-03-01T00%3A00%3A00Z&dateTo=2026-03-11T23%3A59%3A59Z" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/mobile/audit-events"
);
const params = {
"page": "1",
"perPage": "25",
"companySlug": "acme-corp",
"collectorUuid": "550e8400-e29b-41d4-a716-446655440010",
"userUuid": "550e8400-e29b-41d4-a716-446655440011",
"eventName": "mobile-ncu",
"actionName": "command-send",
"dateFrom": "2026-03-01T00:00:00Z",
"dateTo": "2026-03-11T23:59:59Z",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/mobile/audit-events',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '1',
'perPage' => '25',
'companySlug' => 'acme-corp',
'collectorUuid' => '550e8400-e29b-41d4-a716-446655440010',
'userUuid' => '550e8400-e29b-41d4-a716-446655440011',
'eventName' => 'mobile-ncu',
'actionName' => 'command-send',
'dateFrom' => '2026-03-01T00:00:00Z',
'dateTo' => '2026-03-11T23:59:59Z',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/mobile/audit-events'
params = {
'page': '1',
'perPage': '25',
'companySlug': 'acme-corp',
'collectorUuid': '550e8400-e29b-41d4-a716-446655440010',
'userUuid': '550e8400-e29b-41d4-a716-446655440011',
'eventName': 'mobile-ncu',
'actionName': 'command-send',
'dateFrom': '2026-03-01T00:00:00Z',
'dateTo': '2026-03-11T23:59:59Z',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Show a mobile audit event
requires authentication
Returns full detail for a single mobile audit event including context, request, result, operator label, and device info.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/mobile/audit-events/de47c505-d218-3e81-89cb-159c6185fa5e" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/mobile/audit-events/de47c505-d218-3e81-89cb-159c6185fa5e"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/mobile/audit-events/de47c505-d218-3e81-89cb-159c6185fa5e',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/mobile/audit-events/de47c505-d218-3e81-89cb-159c6185fa5e'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Super Admin > Mobile Devices
List mobile devices
requires authentication
Returns a paginated list of all mobile devices with optional filtering.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/mobile/devices" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/mobile/devices"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/mobile/devices',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/mobile/devices'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Show a mobile device
requires authentication
Returns detailed information for a single mobile device including masked push token and audit event count.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/mobile/devices/91a2dba3-a2bd-4b91-bbe9-fa27c2970489" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/sa/mobile/devices/91a2dba3-a2bd-4b91-bbe9-fa27c2970489"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/mobile/devices/91a2dba3-a2bd-4b91-bbe9-fa27c2970489',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/mobile/devices/91a2dba3-a2bd-4b91-bbe9-fa27c2970489'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Super Admin > Routes
GET api/v1/sa/admin/routes
requires authentication
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/sa/admin/routes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"all\": false
}"
const url = new URL(
"https://tracklabsolar.com/api/v1/sa/admin/routes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"all": false
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/sa/admin/routes',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'all' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/sa/admin/routes'
payload = {
"all": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
System
APIs for system testing and health checks
Test System
Check if the system is working properly. Tests DB + Redis connectivity.
Example request:
curl --request GET \
--get "https://tracklabsolar.com/api/v1/test/basic_system" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://tracklabsolar.com/api/v1/test/basic_system"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$response = $client->get(
'https://tracklabsolar.com/api/v1/test/basic_system',
[
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));import requests
import json
url = 'https://tracklabsolar.com/api/v1/test/basic_system'
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
{
"success": true,
"data": {
"systemWorking": true,
"services": {
"database": true,
"redis": true
},
"errors": []
}
}
Received response:
Request failed with error: