curl --request PATCH \
--url https://api.hellotracks.com/v1/company \
--header 'API-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "+1 415 555 0100",
"workersEditTrips": true,
"tripsRequireApproval": true,
"autoCheckins": false
}
'import requests
url = "https://api.hellotracks.com/v1/company"
payload = {
"phone": "+1 415 555 0100",
"workersEditTrips": True,
"tripsRequireApproval": True,
"autoCheckins": False
}
headers = {
"API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '+1 415 555 0100',
workersEditTrips: true,
tripsRequireApproval: true,
autoCheckins: false
})
};
fetch('https://api.hellotracks.com/v1/company', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hellotracks.com/v1/company",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'phone' => '+1 415 555 0100',
'workersEditTrips' => true,
'tripsRequireApproval' => true,
'autoCheckins' => false
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hellotracks.com/v1/company"
payload := strings.NewReader("{\n \"phone\": \"+1 415 555 0100\",\n \"workersEditTrips\": true,\n \"tripsRequireApproval\": true,\n \"autoCheckins\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.hellotracks.com/v1/company")
.header("API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"+1 415 555 0100\",\n \"workersEditTrips\": true,\n \"tripsRequireApproval\": true,\n \"autoCheckins\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hellotracks.com/v1/company")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"phone\": \"+1 415 555 0100\",\n \"workersEditTrips\": true,\n \"tripsRequireApproval\": true,\n \"autoCheckins\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"company": {
"id": "c0c0c0",
"type": "company",
"username": "c0c0c0",
"name": "Bay Plumbing Co.",
"email": "office@example.com",
"phone": "+1 415 555 0100",
"color": "#1e2a3a",
"address": "1 Market St, San Francisco, CA 94105",
"city": "San Francisco",
"postalCode": "94105",
"state": "CA",
"countryCode": "US",
"location": {
"lat": 37.7941,
"lng": -122.395,
"ts": 1735689600000
},
"settings": {
"apiEnabled": true,
"workersCreateJobs": true,
"workersEditJob": false,
"workersCreatePlaces": false,
"workersViewPlaces": false,
"workersOptimizeRoute": false,
"workersViewJobCalendar": false,
"assistantEnabled": false,
"tripsEnabled": true,
"jobGroupsEnabled": false,
"snoozeNotifications": false,
"routeCalcIncludeCompany": false,
"etaPageDefaultShowWorkerName": false,
"etaPageDefaultShowMap": false,
"workersEditTrips": false,
"tripsRequireApproval": false,
"workersEditWorkingHours": false,
"workersWebForms": false,
"workersAllowedTrackingOff": false,
"autoCheckins": true
},
"teamsConfig": [
{
"id": 1,
"name": "North crew",
"working_hours": {
"monday": {
"start": 800,
"end": 1700
},
"tuesday": {
"start": 800,
"end": 1700
},
"wednesday": {
"start": 800,
"end": 1700
},
"thursday": {
"start": 800,
"end": 1700
},
"friday": {
"start": 800,
"end": 1700
},
"saturday": {
"start": 0,
"end": 0
},
"sunday": {
"start": 0,
"end": 0
},
"source": "team"
},
"route": {
"start_lat": 37.7941,
"start_lng": -122.395
}
}
]
}
},
"error": null,
"meta": {
"path": "/v1/company",
"method": "PATCH"
}
}{
"data": null,
"error": {
"code": "invalid_request",
"message": "date must be YYYY-MM-DD"
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "invalid_api_key",
"message": "Invalid Hellotracks API key."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "forbidden",
"message": "No permission."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "throttled",
"message": "Too many requests."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}Change the company
Changes the company’s name, contact details and settings. Only the fields sent change. Settings are sent flat at the top level, under the same names GET returns inside settings. Allowed for admins and company keys; operators and workers get 403, as for API keys and webhooks. Apps are told about the new settings.
curl --request PATCH \
--url https://api.hellotracks.com/v1/company \
--header 'API-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "+1 415 555 0100",
"workersEditTrips": true,
"tripsRequireApproval": true,
"autoCheckins": false
}
'import requests
url = "https://api.hellotracks.com/v1/company"
payload = {
"phone": "+1 415 555 0100",
"workersEditTrips": True,
"tripsRequireApproval": True,
"autoCheckins": False
}
headers = {
"API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '+1 415 555 0100',
workersEditTrips: true,
tripsRequireApproval: true,
autoCheckins: false
})
};
fetch('https://api.hellotracks.com/v1/company', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hellotracks.com/v1/company",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'phone' => '+1 415 555 0100',
'workersEditTrips' => true,
'tripsRequireApproval' => true,
'autoCheckins' => false
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hellotracks.com/v1/company"
payload := strings.NewReader("{\n \"phone\": \"+1 415 555 0100\",\n \"workersEditTrips\": true,\n \"tripsRequireApproval\": true,\n \"autoCheckins\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.hellotracks.com/v1/company")
.header("API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"+1 415 555 0100\",\n \"workersEditTrips\": true,\n \"tripsRequireApproval\": true,\n \"autoCheckins\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hellotracks.com/v1/company")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"phone\": \"+1 415 555 0100\",\n \"workersEditTrips\": true,\n \"tripsRequireApproval\": true,\n \"autoCheckins\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"company": {
"id": "c0c0c0",
"type": "company",
"username": "c0c0c0",
"name": "Bay Plumbing Co.",
"email": "office@example.com",
"phone": "+1 415 555 0100",
"color": "#1e2a3a",
"address": "1 Market St, San Francisco, CA 94105",
"city": "San Francisco",
"postalCode": "94105",
"state": "CA",
"countryCode": "US",
"location": {
"lat": 37.7941,
"lng": -122.395,
"ts": 1735689600000
},
"settings": {
"apiEnabled": true,
"workersCreateJobs": true,
"workersEditJob": false,
"workersCreatePlaces": false,
"workersViewPlaces": false,
"workersOptimizeRoute": false,
"workersViewJobCalendar": false,
"assistantEnabled": false,
"tripsEnabled": true,
"jobGroupsEnabled": false,
"snoozeNotifications": false,
"routeCalcIncludeCompany": false,
"etaPageDefaultShowWorkerName": false,
"etaPageDefaultShowMap": false,
"workersEditTrips": false,
"tripsRequireApproval": false,
"workersEditWorkingHours": false,
"workersWebForms": false,
"workersAllowedTrackingOff": false,
"autoCheckins": true
},
"teamsConfig": [
{
"id": 1,
"name": "North crew",
"working_hours": {
"monday": {
"start": 800,
"end": 1700
},
"tuesday": {
"start": 800,
"end": 1700
},
"wednesday": {
"start": 800,
"end": 1700
},
"thursday": {
"start": 800,
"end": 1700
},
"friday": {
"start": 800,
"end": 1700
},
"saturday": {
"start": 0,
"end": 0
},
"sunday": {
"start": 0,
"end": 0
},
"source": "team"
},
"route": {
"start_lat": 37.7941,
"start_lng": -122.395
}
}
]
}
},
"error": null,
"meta": {
"path": "/v1/company",
"method": "PATCH"
}
}{
"data": null,
"error": {
"code": "invalid_request",
"message": "date must be YYYY-MM-DD"
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "invalid_api_key",
"message": "Invalid Hellotracks API key."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "forbidden",
"message": "No permission."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}{
"data": null,
"error": {
"code": "throttled",
"message": "Too many requests."
},
"meta": {
"path": "/jobs",
"method": "GET"
}
}Authorizations
Your API key, from More → API & Integrations in the dashboard, or from ht signup / ht auth login.
Body
Flat: settings are sent at the top level (not inside settings, as GET returns them). Only fields sent are changed; unknown fields are refused with 400.
The company may use the API.
Workers may create jobs in the app.
Workers may edit their jobs.
Workers may create places.
Workers see the company's places.
Workers may optimize their own route.
Workers see the job calendar.
The in-app assistant is on.
Trips (mileage log) are on.
Job groups are on.
Notifications are snoozed.
Route calculation starts and ends at the company address.
The ETA page shows the worker's name by default.
The ETA page shows the map by default.
Workers may edit their trips.
Trips need an admin's approval.
Workers may edit their own working hours.
Workers fill forms on the web.
Workers may switch tracking off.
Automatic check-ins at places are on (default true).