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.

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.

Supported Parameters

{
"endpoint": "https://my-server.com/api/locations",
"interval": 10,
"distance": 5,
"syncInterval": 300,
"maxRetries": 5,
"retryInterval": 30,
"accuracyThreshold": 50,
"filterInaccurateLocations": true,
"isOfflineMode": false,
"isWifiOnlySync": false,
"apiTemplate": "owntracks",
"httpMethod": "POST",
"fieldMap": {
"lat": "lat",
"lon": "lon",
"acc": "acc",
"alt": "alt",
"vel": "vel",
"batt": "batt",
"bs": "bs",
"tst": "tst",
"bear": "cog"
},
"customFields": [
{ "key": "_type", "value": "location" },
{ "key": "tid", "value": "AA" }
],
"auth": {
"type": "bearer",
"bearerToken": "my-secret-token-123"
},
"customHeaders": {
"X-Api-Key": "abc123",
"CF-Access-Client-Id": "my-cf-id"
}
}

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)
maxRetriesnumberMax retry attempts for failed uploads
retryIntervalnumberSeconds between retry attempts
accuracyThresholdnumberDiscard locations less accurate than this (meters)
filterInaccurateLocationsbooleanEnable accuracy filtering
isOfflineModebooleanStore locally only, never sync
isWifiOnlySyncbooleanOnly sync on Wi-Fi
apiTemplatestringcustom, dawarich, geopulse, owntracks, phonetrack, reitti, or traccar
httpMethodstringPOST or GET
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)

Using Node.js

node -e "
const config = {
endpoint: 'https://my-server.com/api/locations',
interval: 10,
apiTemplate: 'owntracks',
auth: { type: 'bearer', bearerToken: 'my-token' }
};
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}')
"

QR Code

Generate a QR code from the colota://setup?config=... URL using any QR generator. When scanned, Android opens Colota and navigates directly to the confirmation screen.

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

Testing with ADB

adb shell am start -a android.intent.action.VIEW \
-d "colota://setup?config=BASE64_HERE" com.Colota

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.
  • Auth credentials are stored in AES-256-GCM encrypted storage on device after import.