Trackables support public-code browsing, secret-code or private scan-QR activation, one-time secret reveal during creation, browser-side active sessions, comments, and grouped inventory workflows.
Secret short codes and private scan URLs are only returned from the create endpoints below. They are never returned again from read, lookup, comment, or detail routes.
Identifier formats and examples
| Format |
Example |
Lookup rule |
| Public code token |
LN-7K4V9T |
Globally unique short public token. Safe for public lookup and public links. |
| Public entry route |
GET /trackable/LN-7K4V9T |
Short public entry URL. The same base route is used for public codes, short secret codes, and long private scan tokens. |
| Secret entry route |
GET /trackable/LN4C8R2Z |
Short possession-based entry URL for someone holding the item. It uses the same /trackable/{code} base route as the public and long scan forms. |
| User canonical route |
GET /api/trackables/profile/alex/LN-7K4V9T |
Canonical API route for a user-owned public trackable. |
| Team canonical route |
GET /api/trackables/team/beta-testers/LN-7K4V9T |
Canonical API route for a team-owned public trackable. |
| System short secret code |
LN4C8R2Z |
Globally unique across all trackables and also unique against public codes. Intended for manual possession-based entry. |
| Alternate system prefix |
GT8M2Q7V |
Same generated short-secret pattern on sister deployments that use the GT prefix. |
| Bring-your-own secret code |
ITEM42X |
Advanced external identifier. Must stay unique across all trackables and must not start with LN or GT. |
| Private scan route |
https://locationnotes.com/trackable/AB4D5QW2...<100 chars total>... |
Unique across all trackables and intended to come from QR scanning instead of manual entry. |
Generated public-code tokens and generated short-secret bodies use the same smudge-resistant character family. Typed
lookup treats O like 0, I or L like 1,
S like 5, and U like V. For system short-secret codes, that
normalization applies to the generated body after the literal prefix. Public codes use that same configured prefix
with a dash before the generated body, so they are visually distinct from short secret codes.
List and detail reads
GET /api/trackables/public
GET /api/trackables/mine
GET /api/trackables/{trackableId}
GET /api/trackables/profile/{userName}/{publicCode}
GET /api/trackables/team/{teamSlug}/{publicCode}
GET /api/trackables/{trackableId}/journey
Create one trackable
POST /api/trackables
Bearer
{
"name": "Promo coin",
"description": "Launch event inventory item",
"externalLinkUrl": "https://example.com/promo-coin",
"externalLinkDescription": "",
"teamId": null,
"isPublic": true,
"activateImmediately": false,
"secretCode": ""
}
{
"trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
"heading": "Unactivated Trackable",
"description": "Please activate this trackable item",
"items": [
{
"trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
"name": "Unactivated Trackable",
"publicCode": "LN-7K4V9T",
"secretCode": "LN4C8R2Z",
"scanUrl": "https://locationnotes.com/trackable/ABCD...<100 characters total>...",
"qrPayload": "https://locationnotes.com/trackable/ABCD...<100 characters total>..."
}
]
}
Bring your own secret code
{
"name": "Marketing token",
"description": "Bring-your-own identifier",
"teamId": null,
"isPublic": false,
"activateImmediately": true,
"secretCode": "TAG42"
}
The server accepts caller-supplied secret codes that do not start with LN or GT and do not match any existing secret or public code. The returned public code is still system-generated.
Create a group
POST /api/trackables/groups
Bearer
{
"name": "Gnomes in this hunt",
"description": "Seasonal hunt inventory",
"defaultTrackableTitle": "",
"defaultTrackableDescription": "",
"defaultExternalLinkUrl": "https://example.com/hunt-rules",
"defaultExternalLinkDescription": "",
"trackableCount": 12,
"teamId": null,
"isPublic": true,
"activateImmediately": false
}
Groups are limited to 100 trackables. Unactivated items fall back to the group defaults until activation. Once activated, they must use their own title and description.
Lookup and active session
POST /api/trackables/lookup matches a public code token or short secret code after normalizing the common smudged-character substitutions listed above.
GET /trackable/{code} is the short website entry route. It accepts a public code, a short secret code, or the long QR token and then routes to the correct flow.
GET /api/trackables/active lists the client's currently active secret-code sessions.
GET /api/trackables/active/{trackableId} returns the active landing payload, including activation requirements and grouped items when available.
POST /api/trackables/active/{trackableId}/message updates the remembered status text.
DELETE /api/trackables/active/{trackableId} ends the remembered secret-code session on that client.
Secret-code lookups and private scan-QR visits create an active client session instead of returning the secret value. That active session is what lets later note flows attach the trackable without re-entering the code.
A bare public-code lookup is safe because short public codes are globally unique. The website intentionally uses the same direct entry base route for all three forms: /trackable/{publicCode}, /trackable/{secretCode}, and /trackable/{qrToken}.
That shared entry route stays valid even if the configured short-code lengths change later, because the server resolves the code value instead of depending on hard-coded website path variations.
Owner-scoped profile and team public pages remain resolved destinations after lookup, but the shareable website entry URL still starts at /trackable/{code}.
That distinction also applies on note pages: a public code is for opening the public trackable page, while note attachment expects an existing short secret code or an already-active browser session.
GET /api/trackables/lookup?code=LN4C8R2Z
{
"found": true,
"trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
"isPublicCodeMatch": false,
"usesSecretAccess": true,
"redirectUrl": "/en-US/trackables/active/f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31"
}
GET /trackable/LN-7K4V9T
GET /api/trackables/profile/alex/LN-7K4V9T
GET /api/trackables/team/beta-testers/LN-7K4V9T
GET /trackable/ABCD...<100 characters total>...
Activate to self or team
POST /api/trackables/{trackableId}/activate
Bearer
{
"name": "Bramble the Mossy Wanderer",
"description": "A small green gnome ready for the next stop.",
"externalLinkUrl": "",
"externalLinkDescription": "",
"useGroupDefaultExternalLink": true,
"teamId": "optional-team-guid"
}
If teamId is supplied, the trackable becomes team-owned, team admins can manage it, and the activating member keeps control while they remain on that team. Without teamId, the trackable becomes personally owned.
For group-created unactivated items, activation is also the step where the new owner must choose the final item-specific title and description.
Detach and reattach groups
DELETE /api/trackables/{trackableId}/group removes the current group association.
POST /api/trackables/{trackableId}/group with { "trackableGroupId": "..." } associates a detached trackable with a new group.
A trackable can only belong to one group at a time. The server enforces the detach-first rule. Only the original activator can reattach a detached trackable, and the destination group must also be controlled by that user or an eligible team admin.
{
"trackableGroupId": "4bdffcab-bb51-4fd8-8c15-59f7b2d72c3f"
}
Trackable comments
GET /api/trackables/{trackableId}/comments
POST /api/trackables/{trackableId}/comments
Clients must be logged in to post comments. Unactivated trackables cannot be commented on.
{
"body": "Starting the route now."
}
Visibility and journey disclosure
Trackable journey pages may show mapped locations even when some underlying notes are private. In those cases, unauthorized viewers can receive the location point but not the protected note content.
Authorized viewers receive the note title, description, and note link directly from the preloaded journey payload and map pin popups.
Deletion and retention
Deleting one account does not automatically delete every trackable that account ever touched. Shared or team-owned trackables can remain while only the deleted user's removable personal activity is removed.
Review the Delete Data page and the account-delete API section for the current retention boundaries.