Skip to main content

Deep Link Setup

Configure Colota instantly using a colota://setup URL. Generate a link or QR code with your server settings and share it with users - no manual typing required.

Fill in the settings you want to configure. Only the fields you set will be included - everything else keeps its current value on the device. All processing happens in your browser - no data is sent to any server.

Connection
Tracking
Sync
Authentication
Custom Headers
Custom Fields
Field Map
Geofences
Tracking Profiles

Fill in at least one field above to generate a setup link.

Sharing From the App

You can also generate a setup link straight from an existing installation, without the browser generator. Open Settings -> Share Setup, tick which categories to include - Tracking, Sync, API, Geofences, Profiles and Credentials - and tap Share to send the colota://setup link through any app.

Credentials are off by default. Enabling them puts your username, password, bearer token or custom headers into the link in plain text, so only share it over a trusted channel.

Geofences and tracking profiles can also be shared on their own from the Geofences and Tracking Profiles screens.

How It Works

  1. User taps the link or scans a QR code
  2. Colota opens and shows a confirmation screen listing all settings that will be applied
  3. Sensitive values (passwords, tokens) are masked in the preview
  4. User taps Apply Configuration to save or Cancel to discard
  5. Settings are persisted and the app navigates to the Dashboard

URL Format

colota://setup?config=BASE64_ENCODED_JSON

The config parameter is a base64-encoded JSON object. Only include the settings you want to change - everything else keeps its current value.

Parameter Reference

ParameterTypeDescription
endpointstringServer URL to send location data to
intervalnumberGPS polling interval in seconds (must be > 0)
distancenumberMinimum movement in meters before recording a new location
syncIntervalnumberBatch sync interval in seconds (0 = instant)
accuracyThresholdnumberDiscard locations less accurate than this (meters)
filterInaccurateLocationsbooleanEnable accuracy filtering
isOfflineModebooleanStore locally only, never sync
syncConditionstringany, wifi_any, wifi_ssid, or vpn
syncSsidstringWi-Fi SSID to sync on (only used with wifi_ssid)
apiTemplatestringcustom, dawarich, geopulse, overland, owntracks, phonetrack, reitti, or traccar
httpMethodstringPOST or GET
dawarichModestringsingle (OwnTracks endpoint) or batch (Overland endpoint). Only applies to apiTemplate: dawarich.
overlandBatchSizenumberPoints per batch POST for Overland format (1-500, default 50). Used by apiTemplate: overland and dawarich + batch.
fieldMapobjectCustom field name mapping for the JSON payload
customFieldsarrayStatic key-value pairs added to every payload
auth.typestringnone, basic, or bearer
auth.usernamestringUsername for Basic Auth
auth.passwordstringPassword for Basic Auth
auth.bearerTokenstringToken for Bearer Auth
customHeadersobjectCustom HTTP headers (e.g. Cloudflare Access)
geofencesarrayPause zone definitions (see Geofences)
profilesarrayTracking profile definitions (see Tracking Profiles)

Geofences

Each entry in the geofences array describes one pause zone. name, lat, lon and radius are required. Other fields fall back to safe defaults.

FieldTypeDefaultDescription
namestring(required)Display name
latnumber(required)Latitude in decimal degrees
lonnumber(required)Longitude in decimal degrees
radiusnumber(required)Radius in meters, must be > 0
enabledbooleantrueZone is active on import
pauseTrackingbooleanfalseStop saving locations inside the zone
pauseOnWifibooleanfalseAlso stop GPS while connected to Wi-Fi or Ethernet
pauseOnMotionlessbooleanfalseAlso stop GPS after no motion for motionlessTimeoutMinutes
motionlessTimeoutMinutesnumber10Minutes of stillness before motionless pause kicks in
heartbeatEnabledbooleanfalseSend periodic location updates while paused
heartbeatIntervalMinutesnumber15Heartbeat interval in minutes

Imported geofences are appended by default. The import confirmation screen has a "Replace zones with the same name" toggle that deletes existing zones whose names match before creating the incoming ones.

You can build links with geofences using the in-browser generator above, the Node.js or Python snippets below, or by sharing zones directly from the Geofences screen in the app (see the Geofencing guide).

Tracking Profiles

Each entry in the profiles array describes one tracking profile. name, interval, distance, syncInterval and condition are required. Other fields fall back to safe defaults. id and createdAt are ignored on import - the receiving device always creates fresh rows.

FieldTypeDefaultDescription
namestring(required)Display name
intervalnumber(required)GPS interval in seconds (must be >= 1)
distancenumber(required)Movement threshold in meters
syncIntervalnumber(required)Sync interval in seconds (0 = instant)
condition.typestring(required)charging, android_auto, speed_above, speed_below, or stationary
condition.speedThresholdnumber-Required for speed_above / speed_below. Speed in m/s (divide km/h by 3.6)
prioritynumber10Higher value wins when multiple profiles match
activationDelaynumber0 (stationary: 60)Seconds the condition must keep matching before the profile is applied (0 = immediate). For stationary, how long the device must be still before activating
deactivationDelaynumber60 (stationary: 0)Seconds to keep the profile active after the condition stops matching. Stationary resumes instantly via the motion sensor
enabledbooleantrueProfile is active on import

Imported profiles are appended by default. When both profiles and geofences are present the same "Replace ... with the same name" toggle on the import screen also deletes existing profiles whose names match before creating the incoming ones.

You can build links with profiles using the in-browser generator above, the Node.js or Python snippets below, or by sharing profiles directly from the Tracking Profiles screen in the app.

Using Node.js

node -e "
const config = {
endpoint: 'https://my-server.com/api/locations',
interval: 10,
apiTemplate: 'owntracks',
auth: { type: 'bearer', bearerToken: 'my-token' },
geofences: [
{ name: 'Home', lat: 52.52, lon: 13.405, radius: 100, pauseTracking: true }
]
};
const encoded = Buffer.from(JSON.stringify(config)).toString('base64');
console.log('colota://setup?config=' + encoded);
"

Using Python

python3 -c "
import json, base64
config = {'endpoint': 'https://my-server.com/api/locations', 'interval': 10}
encoded = base64.b64encode(json.dumps(config).encode()).decode()
print(f'colota://setup?config={encoded}')
"

Security Notes

  • The configuration URL is not encrypted. Avoid putting sensitive tokens in QR codes displayed in public.
  • All settings are shown to the user for confirmation before being applied.