Geotrackable.com

Android app cher

Android Sync tabDaq site origin neH endpoint mojmoH. /api yIchelQo'.

https://Geotrackable.com

local account credentials /api/auth/login?useCookies=false&useSessionCookies=falseDaq yIngeH, ghIq bearer token Hevlu'bogh Authorization headerDaq yIngeH.

janglu' 'e' pIHlu'

bearer token ngeHpa' client HTTP 401 nob route Qanlu'bogh. browserDaq POST-only route poSmoHlu'DI' HTTP 405 nob, GET ngeHmo' browser.

offline sync cycle HochDaq wa'DIch push, cha'DIch pull.

API path Sovbe'lu'boghvaD HTTP 404 noblu'. path Sovlu'boghvaD verb muj lo'lu'chugh, motlh HTTP 405 noblu' 'ej chaq Allow header ngaS. delete-only /api/account pathDaq chIch GET endpoint tu'be'; vaj Qapqa'meH mIw ghajbogh 404 nob GET /api/account. account laDmeH /api/auth/manage/info yIlo'.

host yI'ol, yI'el, private routes Dapongpa' token yI'ol.

DaH account De' route framework identity APIvo' ghoS. account route pIm deletion ru'Ha'vaD neH tu'lu'.

Dotlh 'ol

routevam anonymous 'ej production API host SIchlaHlu' 'e' 'olmeH mIw nomqu'.

curl "https://Geotrackable.com/api/system/status"
{
  "status": "online",
  "utcNow": "2026-06-20T12:00:00Z",
  "androidBetaPageUrl": "https://Geotrackable.com/en-US/Account/Beta"
}

muvmeH mIw

bearer token tlhobpa', email, password, public profile user name je lo'taHvIS local account yIchenmoH. user namemeyDaq Deghmey mach, mI' Deghmey, underscore neH chaw'lu'.

curl -X POST "https://Geotrackable.com/api/auth/register" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "tester@example.com",
    "userName": "trail_tester",
    "password": "StrongP@ssw0rd!"
  }'

bearer token lo'taHvIS 'elmeH mIw

bearer token poQDI' script, app pagh API client, cookies chu'Ha'lu'taHvIS local account credentials yIlo'.

curl -X POST "https://Geotrackable.com/api/auth/login?useCookies=false&useSessionCookies=false" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "tester@example.com",
    "password": "StrongP@ssw0rd!"
  }'
{
  "tokenType": "Bearer",
  "accessToken": "eyJhbGciOi..."
}

DaH account profile je

GET /api/account profile endpoint tu'be'lu'. signed-in account metadatavaD identity manage-info endpoint yIlo'; public profile 'angmeH website profile pages yIlo'.

GET /api/account read route muchlu'bogh 'oHbe'.

GET /api/auth/manage/info signed-in identity De' nob.

DELETE /api/account DaH account ru'Ha' teq.

curl "https://Geotrackable.com/api/auth/manage/info" \
  -H "Authorization: Bearer <access token>"

Android pagh API-client rarghlu'ghach DanuDDI' routevam yIlo'choH.

mIw He
mIw">GET He">/api/system/status
mIw">POST He">/api/auth/register
mIw">POST He">/api/auth/login?useCookies=false&useSessionCookies=false
mIw">GET He">/api/auth/manage/info
mIw">POST He">/api/sync/push
mIw">POST He">/api/sync/pull
mIw">GET He">/api/notes/public/bounds
mIw">GET He">/api/notes/public/nearby
mIw">GET He">/api/categories/mine
mIw">GET He">/api/notes/mine
mIw">GET He">/api/trackables/public
mIw">POST He">/api/trackables/lookup
mIw">GET He">/api/trackables/active
mIw">DELETE He">/api/account

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

websiteDaq Locations Hol lo' Geotrackable; API route pongmey shared notes contracts bIngDaq lo'taH.

map veHmeyDaq public Daqmey

map viewport ghajta'DI' clientlIj 'ej areavetlhvaD public location notes leghlaHbogh neHDI', bounds yIlo'.

curl "https://Geotrackable.com/api/notes/public/bounds?minLatitude=41.78&minLongitude=-87.75&maxLatitude=41.96&maxLongitude=-87.54&contentLanguage=en-US"
[
  {
    "noteId": "4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3",
    "title": "Trailhead parking",
    "body": "Small public lot near the north entrance.",
    "contentLanguage": "en-US",
    "latitude": 41.8818,
    "longitude": -87.6231,
    "visibility": "Public",
    "updatedUtc": "2026-06-20T12:00:00Z"
  }
]

personal Daq yIchenmoH

private pagh public Daqmey chenmoHlaH signed-in caller. public DaqmeyvaD authenticated account poQ, anonymous local-only storage poQbe'.

curl -X POST "https://Geotrackable.com/api/notes/mine" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
    "title": "Cache hide approach",
    "body": "Use the east footpath after rain.",
    "contentLanguage": "en-US",
    "latitude": 41.8818,
    "longitude": -87.6231,
    "visibility": "Private",
    "commentPolicy": "Disabled"
  }'
curl -X POST "https://Geotrackable.com/api/categories/mine" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekend route checks",
    "contentLanguage": "en-US",
    "parentCategoryId": null
  }'

wa'DIch local choHmey yIpush, ghIq user current public area je server view yIpull.

sync route cha' bearer auth poQ. deviceDaq ratlhlaH anonymous private Daqmey, 'ach server sync API lajbe'.

ngeHmeH tlhobghach

curl -X POST "https://Geotrackable.com/api/sync/push" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "deviceId": "5dd06ca7-34a5-4f2e-812d-3f1ef3e48290",
    "notes": [
      {
        "noteId": "ef90c4ca-88a9-4a9b-b3a8-36e2649c5dcb",
        "ownerUserId": "a7cfd28f-c17f-4cf7-8913-47fa10fd0d1f",
        "categoryId": "ca90c4ca-88a9-4a9b-b3a8-36e2649c5dcb",
        "title": "Offline field stop",
        "body": "Saved while disconnected.",
        "contentLanguage": "en-US",
        "latitude": 41.8818,
        "longitude": -87.6231,
        "visibility": 0,
        "isDeleted": false,
        "updatedUtc": "2026-06-20T12:05:00Z",
        "clientMutationId": "android-offline-42",
        "teamId": null
      }
    ],
    "categories": [
      {
        "categoryId": "ca90c4ca-88a9-4a9b-b3a8-36e2649c5dcb",
        "ownerUserId": "a7cfd28f-c17f-4cf7-8913-47fa10fd0d1f",
        "name": "Offline field notes",
        "contentLanguage": "en-US",
        "teamId": null,
        "parentCategoryId": null,
        "sortOrder": 0,
        "isDeleted": false,
        "updatedUtc": "2026-06-20T12:04:00Z"
      }
    ]
  }'

category leghlaHbogh signed-in account pagh push rapDaq category chellu'bogh ngu'nIS note Hoch. offline bIH DachenmoHtaHvIS record cha'Daq categoryId rap yIpol.

HevmeH tlhobghach

curl -X POST "https://Geotrackable.com/api/sync/pull" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "lastSyncUtc": "2026-06-20T11:30:00Z",
    "publicArea": {
      "minLatitude": 41.78,
      "minLongitude": -87.75,
      "maxLatitude": 41.96,
      "maxLongitude": -87.54
    }
  }'
{
  "serverSyncUtc": "2026-06-20T12:06:00Z",
  "userNotes": [],
  "userCategories": [],
  "teamCategories": [],
  "publicNotes": [],
  "teamNotes": []
}

pull Daruchpa' push conflicts yIta'

conflicts collection ghajbogh HTTP 200 noblaH push lugh. entity Hoch sync mIw ngoD 'oH; transport QapHa'ghach 'oHbe'. entityId, entityType, Human meq, code choHbe'bogh, action naQ je ngaS conflict Hoch.

{
  "entityId": "ef90c4ca-88a9-4a9b-b3a8-36e2649c5dcb",
  "entityType": "Note",
  "reason": "Incoming note update is stale.",
  "code": "stale_update",
  "action": "Pull the current server copy, merge or discard the local edit, and then push a newer update."
}

entity lajbe'lu'bogh pegh yIngeHqa'taHQo'. stale_updatevaD pull je merge wuqghach je poQlu'; team_membership_requiredvaD membership chu'qa'lu'bogh poQlu'; online_team_management_required choH online team APIsDaq vIHmoH; accountvamvaD server copy Qap 'e' 'oS entity_ownership_conflict.

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

sensitive credentials bIH secret codes private QR payloads je. chenmoHlu'pu'DI' bIH nobbe' read routes motlh.

wIvlaHlu' secretCode property POST /api/trackablesDaq. system secret code le' chenmoHjaj Geotrackable DaneHDI', secretCode yIchelQo'; code polnISbogh ghajta'DI' physical item, custom value chaw'lu'bogh yIngeH.

public browse lookup je

curl "https://Geotrackable.com/api/trackables/public?contentLanguage=en-US"
curl -X POST "https://Geotrackable.com/api/trackables/lookup" \
  -c geotrackable.cookies \
  -H "Content-Type: application/json" \
  -d '{
    "code": "GT7F3K9"
  }'

browser-style active session chenmoHlaH Secret je QR lookup. pIq active-session callsvaD response cookie jar yIpol, credential DaQanbogh rur filevetlh yIQan, 'ej session poQbe'lu'choHDI' yIteq.

trackable yIchenmoH

tlhobghach chuplu'boghDaq secretCode tu'be'. secretCode yIchelQo'chugh, null 'oHchugh, chImchugh, pagh whitespace neH ghajchugh, code chenmoHjaj server 'e' Datlhob. value chImbe'lu'bogh ngeHlu'chugh, normalization availability checks je qaSpu'DI' custom codevetlh naQ tlhoblu'.

curl -X POST "https://Geotrackable.com/api/trackables" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Scout trail coin",
    "description": "Move this coin along family-friendly trails.",
    "visibility": "AlwaysVisibleToEveryone",
    "activateImmediately": true
  }'

secret code naQ yItlhob

custom identifier ghajta'DI' item neH secretCode yIngeH. normalized value lo'laHchugh, laj server 'ej HTTP 201 nob. pIm public code chenmoHlu'bogh; codevetlh wIvtaH Geotrackable.

curl -X POST "https://Geotrackable.com/api/trackables" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Existing event tag",
    "description": "Uses the identifier already printed on the tag.",
    "visibility": "VisibleOnceAccessed",
    "activateImmediately": true,
    "secretCode": "TAG42"
  }'

32 Deghmey juSnISbe' custom codes, 'ej public je secret trackable-code namespace naQDaq lo'laHnIS. GT, LN, TB, GK, pagh GC taghbogh codes system-issued pagh origin-site identifiersvaD pollu'; custom Geotrackable secret codes mojlaHbe'.

wa'logh neH pegh De' 'ang chenmoHghach jangghach

SIbI' secretCode scanUrl je cheghbogh yIpol. pIq chIch credentialsvetlh 'angqa'be' list, detail, lookup, comment, journey routes je.

HTTP/1.1 201 Created
{
  "trackableId": "13a2c0b1-582f-4a7b-92aa-16922f7bdb63",
  "heading": "Scout trail coin",
  "items": [
    {
      "trackableId": "13a2c0b1-582f-4a7b-92aa-16922f7bdb63",
      "name": "Scout trail coin",
      "publicCode": "GT-7F3K9Q",
      "secretCode": "GT8M2Q7V",
      "scanUrl": "https://geotrackable.com/trackable/<private-qr-token>",
      "qrPayload": "<private-qr-token>"
    }
  ]
}

secret access chu'

valid secret code pagh scan payload 'elDI' browser, nuq poSqa'moHlaH browservetlh 'e' 'ang active-session routes.

curl "https://Geotrackable.com/api/trackables/active" \
  -b geotrackable.cookies
curl -X POST "https://Geotrackable.com/api/trackables/active/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/message" \
  -b geotrackable.cookies \
  -H "Content-Type: application/json" \
  -d '{
    "statusMessage": "Live hunt in progress"
  }'

code tlhoblu'bogh ghajlu'ta'DI'

custom code latlh ghajlu'chugh, code trackable_secret_code_taken ghajbogh HTTP 409 chegh. trackable chenmoHbe' tlhobghachvam. value rap yInIDqa'taHQo': code chenmoHlu'bogh HevmeH secretCode yIchelQo', pagh custom code pIm chaw'lu'bogh yIwIv.

{
  "type": "/en-US/api-docs#errors-and-problem-details",
  "title": "Requested secret code is unavailable.",
  "status": 409,
  "detail": "That secret code is already in use by another Geotrackable identifier. Supplying a secret code is optional: omit it to receive a unique system-generated code, or choose a different code.",
  "instance": "/api/trackables",
  "code": "trackable_secret_code_taken",
  "field": "secretCode",
  "action": "Omit secretCode to receive a unique system-generated code, or submit a different allowed secretCode.",
  "requestId": "0HN7EXAMPLE:00000001",
  "documentation": "/en-US/api-docs#errors-and-problem-details"
}

prefix pollu'bogh Qapqa'meH mIw

problem jangghach action documentation link je ghajbogh nob custom values pollu'bogh pagh lughbe'bogh. reH QobHa' fallback: create requestvo' secretCode yIteq.

journey stop yIlog

full location note poQbe'lu'DI', direct journey stop 'oH route update tIS.

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/journey-stops" \
  -H "Content-Type: application/json" \
  -d '{
    "latitude": 41.8818,
    "longitude": -87.6231,
    "accessCode": "GT-SECRET-OR-SCAN-PAYLOAD"
  }'

trackableDaq comment yIghItlh

bearer identity lo'taHvIS comment ghItlhlaH signed-in callers. active secret-backed session ghajDI' clientvam pagh itemvam naQ accessCode ngeHDI', trackable chu'lu'boghDaq comment ghItlhlaH je anonymous callers.

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments" \
  -b geotrackable.cookies \
  -H "Content-Type: application/json" \
  -d '{
    "body": "Found near the overlook and moved west.",
    "accessCode": ""
  }'

tlha' Dochmey qech

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

ghom yIchenmoH

curl -X POST "https://Geotrackable.com/api/teams" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "trail-club",
    "title": "Trail Club",
    "description": "Weekend route and trackable group.",
    "joinPolicy": "RequestsAllowed",
    "pageVisibility": "Public",
    "defaultNoteVisibility": "Public",
    "contentLanguage": "en-US"
  }'

invite link yIchenmoH

curl -X POST "https://Geotrackable.com/api/teams/73edb511-cd8c-4888-8c45-3a04b3d6da11/invite-links" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "isSingleUse": false
  }'
curl -X POST "https://Geotrackable.com/api/teams/invite-links/trail-club/INVITE-CODE/join" \
  -H "Authorization: Bearer <access token>"

ghommey qech

page pagh content rarbogh visibility pab media support routes je.

nInmey

public-safe parent page tu'lu'DI', list read anonymous laH. upload delete routes je bearer auth poQ.

curl "https://Geotrackable.com/api/images/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"
curl -X POST "https://Geotrackable.com/api/images/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -F "files=@trail-coin.jpg"

external link 'ol

Daq, team, trackable pagh trackable groupDaq link Dapolpa' external link yI'ol.

curl -X POST "https://Geotrackable.com/api/external-links/verify" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/trail-guide"
  }'

content error reports je

public-page content SaHghachmeyvaD reports yIlo'; support nuDlaHbogh client-side diagnostics errors je yIlo'.

curl -X POST "https://Geotrackable.com/api/compliance/reports" \
  -H "Content-Type: application/json" \
  -d '{
    "pageType": "Trackable",
    "contentType": "Trackable",
    "pageTitle": "Scout trail coin",
    "pageUrl": "https://Geotrackable.com/trackable/GT7F3K9",
    "pageReference": "GT7F3K9",
    "contentLabel": "Trackable page",
    "contentReference": "13a2c0b1-582f-4a7b-92aa-16922f7bdb63",
    "contentPreview": "Move this coin along family-friendly trails.",
    "reportTitle": "Outdated public link",
    "reportExplanation": "The linked trail guide now points somewhere unexpected."
  }'

APIDaq account yIteq

APIDaq DaH account synced personal De' je ru'Ha' teqlaH authenticated clients. export steps pagh shared trackable retention rules DapoQDI' Delete Data page wa'DIch yIlaD.

curl -X DELETE "https://Geotrackable.com/api/account" \
  -H "Authorization: Bearer <access token>"
{
  "deletedAccount": true,
  "notesDeleted": 14,
  "categoriesDeleted": 6,
  "linkedProvidersDeleted": 2
}

De' yIQaw'

action veb lI' ngaS errors

code choHbe'bogh lo'taHvIS QapHa'ghach ngu' API problem jangghachmey, tlhobghachvam detail luQIj, 'ej 'anglaH pagh pablaH client action lunob. tlhobghach server diagnostics je rarnIS supportDI' requestId yIlo'.

Qagh payload je Qapqa'meH reference je yIlaD

yI'el

machine code yIlo', requestId yIpol, 'ej English ghItlh DapoQHa'moHpa' action yIpab.

application/problem+json je RFC rurbogh problem-details object je lo' API QapHa'ghachmey. poH veb title je detail ghItlh Human laDlaHbogh DublaHlu' pagh mughlaHlu'; program logicvaD value choHbe'bogh 'oH code'e'.

problem jangghach chen

Content-Type: application/problem+json
{
  "type": "/en-US/api-docs#errors-and-problem-details",
  "title": "Trackable access is required.",
  "status": 403,
  "detail": "This request needs access to this specific trackable.",
  "instance": "/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments",
  "code": "trackable_access_code_required",
  "action": "Sign in, keep this trackable active in this client, or provide its secret code or private QR access value.",
  "requestId": "0HN7EXAMPLE:00000002",
  "documentation": "/en-US/api-docs#errors-and-problem-details"
}

field Hoch Qu'

field names ngaS validation errors

errors object chel HTTP 400 validation QapHa'ghachmey. JSON property pagh tlhobghach area lughmoHnISbogh 'oH key Hoch'e'; rule law' bIvlaH field wa' vaj array 'oH value Hoch'e'.

{
  "type": "/en-US/api-docs#errors-and-problem-details",
  "title": "Request validation failed.",
  "status": 400,
  "detail": "One or more request fields are invalid. Correct every field listed in errors and submit the request again.",
  "instance": "/api/trackables",
  "code": "validation_failed",
  "action": "Correct every field listed in errors and submit the request again.",
  "requestId": "0HN7EXAMPLE:00000003",
  "documentation": "/en-US/api-docs#errors-and-problem-details",
  "errors": {
    "name": ["Name cannot be longer than 160 characters."],
    "secretCode": ["Secret code cannot be longer than 32 characters."]
  }
}

JSON Qagh je content type

JSON lughbe' 'oH request validation QapHa'ghach'e'. requestId yIpol, syntax yIlughmoH, 'ej Content-Type: application/json lo'taHvIS body yIngeHqa'. file-upload endpointsvaD multipart/form-data poQlu' 'ej route-specific field name ghajbogh files pagh file part poQlu'.

syntax lugh ghajlaH body, 'ach business rule lajbe'laH. field QaghmeyvaD errors yIlo'; program logicvaD code; contextvaD detail; mIw vebvaD action. server exception tlhol pagh stack trace lo'wI'pu'vaD yI'angQo'.

Dotlh nuq 'oS Qapqa'meH mIw nIDqa'meH qeS
400 Bad Request tlhobghach lajbe' JSON, query values, field constraints, pagh business rule. tu'lu'DI' errors yIlaD; tu'be'DI' code, detail, action je yIlaD. tlhobghach DangeHqa'pa' yIlughmoH. tlhobghach choHbe'lu'bogh yIngeHqa'Qo'.
401 Unauthorized bearer token lo'laH Hevbe' route Qanlu'bogh. email tu'lu' pagh tu'lu'be' 'e' 'angbe'taHvIS HTTP 401 lo' je login QapHa'ghachmey. token yISuq pagh yIchu'qa', Bearer scheme host je yI'ol, ghIq call DaHechbogh wa'logh yIruchqa'. authentication choHta'DI' neH yInIDqa'; nIDmey choHbe'lu'bogh lI'be'.
403 Forbidden caller Sovlu', 'ach ownership, team role, active trackable session, pagh secret-backed access poQlu'bogh ghajbe'. action yIpab: account lo'laH yIlo', access yItlhob, item yIchu'moH, pagh trackablevetlh naQ access yInob. access state choHpa' yInIDqa'Qo'.
404 Not Found route pagh resource Sambe'lu'. private resources tu'lu' 'e' SovlaHbe'nIS callerDI', chIch tu'be' rurlaH bIH. method, route, GUID, public code, current list state je yI'ol. client De' ngo' yIchu'qa'. mIw yIruchqa'taHQo'. identifier DalughmoHta'DI' pagh state Dachu'qa'ta'DI' neH yInIDqa'.
405 Method Not Allowed path tu'lu', 'ach HTTP verb muj; ghantoH, browser GET lo'taHvIS POST-only route poSmoHlu'. method 'angbogh documentationvam yIlo' 'ej noblu'DI' Allow response header yInuD. method lugh je request shape lugh je lo'taHvIS neH yInIDqa'.
409 Conflict tlhobghach lugh, 'ach current server state Qoch; chaq trackable secret code tlhoblu'bogh ghajlu'ta'. current state yIloadqa' pagh value Qoch yIchoH. trackable chenmoHlu'DI', code chenmoHmeH secretCode yIchelQo' pagh custom code latlh yIwIv. create value rap yInIDqa'Qo'; tlhobghach pagh state DachoHta'DI' neH yInIDqa'.
413 Content Too Large size lajlu'bogh juS request body pagh uploaded file set. image mI' pagh size yImachmoH; chaw'DI' workflow upload yIwav; metadata requests media je yIpImmoH. payload mach law' lo'taHvIS neH yInIDqa'.
415 Unsupported Media Type endpoint rapbe' body encoding. JSON endpointsvaD application/json yIlo'; image pagh GPX upload endpointsvaD multipart/form-data yIlo'. multipart boundaries chenmoHjaj HTTP library. Content-Type je body encoding je DalughmoHta'DI' neH yInIDqa'.
429 Too Many Requests request limit juS client pagh ngeHghachmey ghom ngeH nomqu'. tu'lu'DI' Retry-After yIpab, concurrency yImachmoH, public reads yIcache, 'ej duplicate requests yImuvmoH. Retry-After yIloS; tu'be'chugh, jitter ghajbogh exponential backoff je retry cap je yIlo'.
500 Internal Server Error QapHa'ghach pIHbe'lu'bogh QonoS Geotrackable. stack traces pagh internal secrets 'angbe' jangghach. tu'lu'DI' requestId ticketNumber je yIpol, ghIq poH, method, route template, status, code je nobtaHvIS support yIrI'. loSqa'ta'DI' safe reads yInIDqa'. commit state Sovbe'lu'DI', create pagh latlh non-idempotent write Daleghbe'taHvIS yIruchqa'Qo'.

chIch writes yInIDqa'

motlh GET tlhobghachmey nIDqa'lu'chugh QobHa'. jangghach Hevpa' client time outchugh, De' chenmoHlaHtaH POST. trackable chenmoHghach Daruchqa'pa', GET /api/trackables/mine yIchu'qa' 'ej result yIrapmoH, vaj duplicate physical items chenmoHbe' network timeout.

HTTP 429 pagh ru'bogh 500 qaSDI', jitter ghajbogh exponential backoff veHlu'bogh yIlo'. tlhobghach'e' choHnISlu' jatlhDI' action, yImev. 400, 403, 404, 405, 409, 413, pagh 415 automatic retry loop yImojmoHQo'.

credentials 'angbe'taHvIS diagnostics lI' yIpol

Authorization headers yIQonoSQo'; bearer pagh refresh tokens, mu'mey pegh, cookies, secretCode, accessCode, QR payloads, scan URLs pegh, pagh /trackable/{code} 'elmeH paths tlhol je yIQonoSQo'. telemetry, QapHa'ghach ja'meH De', jIH mIlloghmey, QaH chelbogh De' jevaD ngeHlu'pa' bIH yISo'.

diagnostic De' QobHa' ngaS requestId, ticketNumber, HTTP status, code choHbe'bogh, method, route template, client version, timestamp je. Daq ghItlh, coordinates naQ, rI' De', pagh trackable credential ngaSlaHchugh request body naQ yIcopyQo'.

POST /api/trackables -> 409
code=trackable_secret_code_taken
requestId=0HN7EXAMPLE:00000001
secretCode=[REDACTED]

Geotrackable API route muchlu'bogh

Geotrackable endpoint table QaptaHboghvo' chenmoHlu' tetlhvam, vaj host rarlaH ghItlh muchlu'bogh.

mIw He naw'
mIw">DELETE He">/api/account naw'">chaw' poQlu'
mIw">GET He">/api/auth/confirmEmail naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/auth/forgotPassword naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/auth/login naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/auth/manage/2fa naw'">chaw' poQlu'
mIw">GET He">/api/auth/manage/info naw'">chaw' poQlu'
mIw">POST He">/api/auth/manage/info naw'">chaw' poQlu'
mIw">POST He">/api/auth/refresh naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/auth/register naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/auth/resendConfirmationEmail naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/auth/resetPassword naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/categories/mine naw'">chaw' poQlu'
mIw">POST He">/api/categories/mine naw'">chaw' poQlu'
mIw">GET He">/api/categories/mine/tree naw'">chaw' poQlu'
mIw">GET He">/api/categories/mine/tree/children naw'">chaw' poQlu'
mIw">GET He">/api/categories/mine/tree/sections naw'">chaw' poQlu'
mIw">DELETE He">/api/categories/mine/{categoryId} naw'">chaw' poQlu'
mIw">POST He">/api/categories/mine/{categoryId}/move naw'">chaw' poQlu'
mIw">POST He">/api/compliance/errors naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/compliance/reports naw'">chaw' poQlu'
mIw">POST He">/api/compliance/reports naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/compliance/reports/mine naw'">chaw' poQlu'
mIw">GET He">/api/compliance/reports/{contentReportId} naw'">chaw' poQlu'
mIw">PUT He">/api/compliance/reports/{contentReportId} naw'">chaw' poQlu'
mIw">POST He">/api/external-links/verify naw'">chaw' poQlu'
mIw">GET He">/api/images/notes/{noteId} naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/images/notes/{noteId} naw'">chaw' poQlu'
mIw">POST He">/api/images/profiles naw'">chaw' poQlu'
mIw">GET He">/api/images/profiles/{userId} naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/images/teams/{teamId} naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/images/teams/{teamId} naw'">chaw' poQlu'
mIw">GET He">/api/images/trackable-groups/{trackableGroupId} naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/images/trackable-groups/{trackableGroupId} naw'">chaw' poQlu'
mIw">GET He">/api/images/trackables/{trackableId} naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/images/trackables/{trackableId} naw'">chaw' poQlu'
mIw">DELETE He">/api/images/{contentImageId} naw'">chaw' poQlu'
mIw">GET He">/api/images/{contentImageId}/{variant} naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/locations/mine/gpx naw'">chaw' poQlu'
mIw">POST He">/api/locations/mine/gpx naw'">chaw' poQlu'
mIw">GET He">/api/notes/mine naw'">chaw' poQlu'
mIw">POST He">/api/notes/mine naw'">chaw' poQlu'
mIw">GET He">/api/notes/mine/gpx naw'">chaw' poQlu'
mIw">POST He">/api/notes/mine/gpx naw'">chaw' poQlu'
mIw">DELETE He">/api/notes/mine/{noteId} naw'">chaw' poQlu'
mIw">POST He">/api/notes/mine/{noteId}/move naw'">chaw' poQlu'
mIw">GET He">/api/notes/public/bounds naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/notes/public/nearby naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/public/notes/{noteId} naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/public/notes/{noteId}/comments naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/public/notes/{noteId}/comments naw'">chaw' poQlu'
mIw">GET He">/api/public/notes/{noteId}/trackables naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/public/notes/{noteId}/trackables naw'">chaw' poQlu'
mIw">GET He">/api/public/profiles/{userName}/notes/nearby naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/public/teams/{teamName}/notes/nearby naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/sync/pull naw'">chaw' poQlu'
mIw">POST He">/api/sync/push naw'">chaw' poQlu'
mIw">GET He">/api/system/beta-android naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/system/coordinate-locality naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/system/ip-location naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/system/status naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/teams naw'">chaw' poQlu'
mIw">POST He">/api/teams naw'">chaw' poQlu'
mIw">POST He">/api/teams/invite-links/{teamSlug}/{inviteCode}/join naw'">chaw' poQlu'
mIw">DELETE He">/api/teams/{teamId} naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/categories naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/categories naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/categories/tree naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/categories/tree/children naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/categories/tree/sections naw'">chaw' poQlu'
mIw">DELETE He">/api/teams/{teamId}/categories/{categoryId} naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/categories/{categoryId}/move naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/invite-links naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/invite-links naw'">chaw' poQlu'
mIw">DELETE He">/api/teams/{teamId}/invite-links/{inviteLinkId} naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/locations/gpx naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/locations/gpx naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/invite naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/request naw'">chaw' poQlu'
mIw">DELETE He">/api/teams/{teamId}/memberships/{membershipId} naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/{membershipId}/accept naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/{membershipId}/approve naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/{membershipId}/deny naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/{membershipId}/promote-admin naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/memberships/{membershipId}/refuse naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/notes naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/notes naw'">chaw' poQlu'
mIw">GET He">/api/teams/{teamId}/notes/gpx naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/notes/gpx naw'">chaw' poQlu'
mIw">DELETE He">/api/teams/{teamId}/notes/{noteId} naw'">chaw' poQlu'
mIw">DELETE He">/api/teams/{teamId}/notes/{noteId}/delete naw'">chaw' poQlu'
mIw">POST He">/api/teams/{teamId}/notes/{noteId}/move naw'">chaw' poQlu'
mIw">PUT He">/api/teams/{teamId}/settings naw'">chaw' poQlu'
mIw">POST He">/api/trackables naw'">chaw' poQlu'
mIw">GET He">/api/trackables/active naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/trackables/active-indicator naw'">pegh pagh pong ghajbe'
mIw">DELETE He">/api/trackables/active/{trackableId} naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/trackables/active/{trackableId} naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/active/{trackableId}/deactivate naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/active/{trackableId}/message naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/groups naw'">chaw' poQlu'
mIw">DELETE He">/api/trackables/groups/{trackableGroupId}/watch naw'">chaw' poQlu'
mIw">POST He">/api/trackables/groups/{trackableGroupId}/watch naw'">chaw' poQlu'
mIw">POST He">/api/trackables/legacy-lookup naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/trackables/lookup naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/lookup naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/trackables/mine naw'">chaw' poQlu'
mIw">GET He">/api/trackables/public naw'">pegh pagh pong ghajbe'
mIw">GET He">/api/trackables/{trackableId} naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/{trackableId}/activate naw'">chaw' poQlu'
mIw">GET He">/api/trackables/{trackableId}/comments naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/{trackableId}/comments naw'">pegh pagh pong ghajbe'
mIw">DELETE He">/api/trackables/{trackableId}/comments/{commentId} naw'">chaw' poQlu'
mIw">PUT He">/api/trackables/{trackableId}/comments/{commentId} naw'">chaw' poQlu'
mIw">DELETE He">/api/trackables/{trackableId}/group naw'">chaw' poQlu'
mIw">POST He">/api/trackables/{trackableId}/group naw'">chaw' poQlu'
mIw">GET He">/api/trackables/{trackableId}/journey naw'">pegh pagh pong ghajbe'
mIw">POST He">/api/trackables/{trackableId}/journey-stops naw'">pegh pagh pong ghajbe'
mIw">DELETE He">/api/trackables/{trackableId}/journey-stops/{journeyStopId} naw'">chaw' poQlu'
mIw">DELETE He">/api/trackables/{trackableId}/watch naw'">chaw' poQlu'
mIw">POST He">/api/trackables/{trackableId}/watch naw'">chaw' poQlu'

DELETE /api/account

APIDaq DaH account synced personal De' je ru'Ha' teqlaH authenticated clients. export steps pagh shared trackable retention rules DapoQDI' Delete Data page wa'DIch yIlaD.

curl -X DELETE "https://Geotrackable.com/api/account" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns deletion counts after the signed-in account and eligible personal data were permanently removed. A successful response signs the current session out.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

401 requires a valid bearer token. 400 explains why deletion cannot complete. Account deletion is destructive: do not automatically retry after an unknown timeout; check sign-in state first.

GET /api/auth/confirmEmail

Complete email confirmation with the user ID and URL-encoded confirmation code from the confirmation link.

curl "https://Geotrackable.com/api/auth/confirmEmail?userId=13a2c0b1-582f-4a7b-92aa-16922f7bdb63&code=URL_ENCODED_CONFIRMATION_CODE"

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

POST /api/auth/forgotPassword

Start an email-based account recovery or confirmation workflow. The response deliberately does not reveal whether the email address exists.

curl -X POST "https://Geotrackable.com/api/auth/forgotPassword" \
  -H "Content-Type: application/json" \
  -d '{ "email": "api-user@example.com" }'

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

POST /api/auth/login

Exchange local account credentials, and a two-factor value when required, for bearer and refresh tokens. API clients must keep cookies disabled.

curl -X POST "https://Geotrackable.com/api/auth/login?useCookies=false&useSessionCookies=false" \
  -H "Content-Type: application/json" \
  -d '{ "email": "api-user@example.com", "password": "Use-a-strong-password-123!" }'

jangghach Qap

HTTP 200 returns tokenType, accessToken, expiration data, and the signed-in user summary. Store credentials in platform-secure storage and never log them.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 covers malformed JSON or missing fields. 401 authentication_failed deliberately does not reveal whether the email exists; verify credentials or use the password-reset flow before retrying. A 401 two_factor_required response keeps requiresTwoFactor true and tells the client to repeat login with either twoFactorCode or twoFactorRecoveryCode.

POST /api/auth/manage/2fa

Enable, disable, reset, or inspect two-factor authentication for the signed-in account. Authenticator and recovery values are sensitive credentials.

curl -X POST "https://Geotrackable.com/api/auth/manage/2fa" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "enable": true, "twoFactorCode": "123456", "resetSharedKey": false, "resetRecoveryCodes": false, "forgetMachine": false }'

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

GET /api/auth/manage/info

Read the signed-in account email and confirmation state, or update the email/password with the current password when required.

curl "https://Geotrackable.com/api/auth/manage/info" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

POST /api/auth/manage/info

Read the signed-in account email and confirmation state, or update the email/password with the current password when required.

curl -X POST "https://Geotrackable.com/api/auth/manage/info" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "newEmail": "new-api-user@example.com", "oldPassword": "Use-a-strong-password-123!" }'

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

POST /api/auth/refresh

Exchange a still-usable refresh token for a new access-token response without resending the account password.

curl -X POST "https://Geotrackable.com/api/auth/refresh" \
  -H "Content-Type: application/json" \
  -d '{ "refreshToken": "<refresh token from login>" }'

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

POST /api/auth/register

Create a local account with an email address, public user name, and strong password. Registration does not return a bearer token; sign in next.

curl -X POST "https://Geotrackable.com/api/auth/register" \
  -H "Content-Type: application/json" \
  -d '{ "email": "api-user@example.com", "userName": "api_trail_user", "password": "Use-a-strong-password-123!" }'

jangghach Qap

HTTP 200 means the local account was created. The response has no bearer token; call the login route next.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 validation_failed identifies malformed JSON or email, password, and userName field errors. Correct the listed errors; duplicate values require a different email or public user name.

POST /api/auth/resendConfirmationEmail

Start an email-based account recovery or confirmation workflow. The response deliberately does not reveal whether the email address exists.

curl -X POST "https://Geotrackable.com/api/auth/resendConfirmationEmail" \
  -H "Content-Type: application/json" \
  -d '{ "email": "api-user@example.com" }'

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

POST /api/auth/resetPassword

Complete password recovery with the exact reset code from email and a new strong password. Reset codes are credentials and must not be logged.

curl -X POST "https://Geotrackable.com/api/auth/resetPassword" \
  -H "Content-Type: application/json" \
  -d '{ "email": "api-user@example.com", "resetCode": "URL_ENCODED_RESET_CODE", "newPassword": "Use-a-new-strong-password-456!" }'

jangghach Qap

HTTP 200 means the identity operation completed. Read the returned identity payload when the operation provides one; password and confirmation operations can intentionally return an empty success body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes field-level identity validation guidance; 401 means the bearer token or credentials are unusable. Follow action and do not retry unchanged credentials in a loop.

GET /api/categories/mine

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/categories/mine" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the personal category list, management tree, sections, or requested children. Empty branches are successful.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/categories/mine

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/categories/mine" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Trail research", "contentLanguage": "en-US", "parentCategoryId": null }'

jangghach Qap

HTTP 200 returns the created or moved category, or acknowledges deletion after descendant rules are satisfied.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

GET /api/categories/mine/tree

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/categories/mine/tree" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the personal category list, management tree, sections, or requested children. Empty branches are successful.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

GET /api/categories/mine/tree/children

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/categories/mine/tree/children" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the personal category list, management tree, sections, or requested children. Empty branches are successful.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

GET /api/categories/mine/tree/sections

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/categories/mine/tree/sections" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the personal category list, management tree, sections, or requested children. Empty branches are successful.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

DELETE /api/categories/mine/{categoryId}

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X DELETE "https://Geotrackable.com/api/categories/mine/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the created or moved category, or acknowledges deletion after descendant rules are satisfied.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/categories/mine/{categoryId}/move

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/categories/mine/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/move" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "parentCategoryId": null }'

jangghach Qap

HTTP 200 returns the created or moved category, or acknowledges deletion after descendant rules are satisfied.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/compliance/errors

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/compliance/errors" \
  -H "Content-Type: application/json" \
  -d '{ "requestUrl": "/api/example", "httpMethod": "POST", "responseStatusCode": 500, "traceIdentifier": "0HN7EXAMPLE:00000004", "userExplanation": "The save failed after the map was updated." }'

jangghach Qap

HTTP 200 or 201 returns an error ticket receipt. HTTP 200 means the request was attached to an existing ticket; HTTP 201 means a new ticket was created.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains missing report context or invalid workflow state; 401 protects personal/admin lists; 403 requires the appropriate reporter or SuperAdmin role; 404 means preserve the ID but refresh the report list.

GET /api/compliance/reports

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/compliance/reports" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the report or report collection visible to the signed-in reporter or authorized administrator.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains missing report context or invalid workflow state; 401 protects personal/admin lists; 403 requires the appropriate reporter or SuperAdmin role; 404 means preserve the ID but refresh the report list.

POST /api/compliance/reports

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/compliance/reports" \
  -H "Content-Type: application/json" \
  -d '{ "pageType": "Trackable", "contentType": "Trackable", "pageTitle": "Scout trail coin", "pageUrl": "/trackable/GT-EXAMPLE", "reportTitle": "Outdated public link", "reportExplanation": "The destination is no longer related to this trackable." }'

jangghach Qap

HTTP 201 returns the content-report receipt and report identifier for later follow-up.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains missing report context or invalid workflow state; 401 protects personal/admin lists; 403 requires the appropriate reporter or SuperAdmin role; 404 means preserve the ID but refresh the report list.

GET /api/compliance/reports/mine

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/compliance/reports/mine" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the report or report collection visible to the signed-in reporter or authorized administrator.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains missing report context or invalid workflow state; 401 protects personal/admin lists; 403 requires the appropriate reporter or SuperAdmin role; 404 means preserve the ID but refresh the report list.

GET /api/compliance/reports/{contentReportId}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/compliance/reports/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the report or report collection visible to the signed-in reporter or authorized administrator.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains missing report context or invalid workflow state; 401 protects personal/admin lists; 403 requires the appropriate reporter or SuperAdmin role; 404 means preserve the ID but refresh the report list.

PUT /api/compliance/reports/{contentReportId}

page pagh content rarbogh visibility pab media support routes je.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X PUT "https://Geotrackable.com/api/compliance/reports/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the report or report collection visible to the signed-in reporter or authorized administrator.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains missing report context or invalid workflow state; 401 protects personal/admin lists; 403 requires the appropriate reporter or SuperAdmin role; 404 means preserve the ID but refresh the report list.

POST /api/external-links/verify

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/external-links/verify" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/resource" }'

jangghach Qap

HTTP 200 returns the normalized destination, verified page title, and safe metadata the editor can use before saving the link.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 includes detail, action, supportUrl, and upstreamStatusCode when available. Correct blocked, private-network, malformed, unreachable, or unsupported destinations before retrying verification.

GET /api/images/notes/{noteId}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/images/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the visible managed image metadata for that profile, note, team, trackable, or group; an empty array is valid.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

POST /api/images/notes/{noteId}

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/images/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -F "files=@example.jpg"

jangghach Qap

HTTP 200 returns managed image metadata and URLs after screening and JPEG variant processing. Use the returned URLs instead of assuming the original filename survives.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

POST /api/images/profiles

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/images/profiles" \
  -H "Authorization: Bearer <access token>" \
  -F "files=@example.jpg"

jangghach Qap

HTTP 200 returns managed image metadata and URLs after screening and JPEG variant processing. Use the returned URLs instead of assuming the original filename survives.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

GET /api/images/profiles/{userId}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/images/profiles/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the visible managed image metadata for that profile, note, team, trackable, or group; an empty array is valid.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

GET /api/images/teams/{teamId}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/images/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the visible managed image metadata for that profile, note, team, trackable, or group; an empty array is valid.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

POST /api/images/teams/{teamId}

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/images/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -F "files=@example.jpg"

jangghach Qap

HTTP 200 returns managed image metadata and URLs after screening and JPEG variant processing. Use the returned URLs instead of assuming the original filename survives.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

GET /api/images/trackable-groups/{trackableGroupId}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/images/trackable-groups/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the visible managed image metadata for that profile, note, team, trackable, or group; an empty array is valid.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

POST /api/images/trackable-groups/{trackableGroupId}

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/images/trackable-groups/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -F "files=@example.jpg"

jangghach Qap

HTTP 200 returns managed image metadata and URLs after screening and JPEG variant processing. Use the returned URLs instead of assuming the original filename survives.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

GET /api/images/trackables/{trackableId}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/images/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the visible managed image metadata for that profile, note, team, trackable, or group; an empty array is valid.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

POST /api/images/trackables/{trackableId}

page pagh content rarbogh visibility pab media support routes je.

curl -X POST "https://Geotrackable.com/api/images/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -F "files=@example.jpg"

jangghach Qap

HTTP 200 returns managed image metadata and URLs after screening and JPEG variant processing. Use the returned URLs instead of assuming the original filename survives.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

DELETE /api/images/{contentImageId}

page pagh content rarbogh visibility pab media support routes je.

curl -X DELETE "https://Geotrackable.com/api/images/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 204 confirms the image and its managed variants were deleted; there is no response body.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

GET /api/images/{contentImageId}/{variant}

page pagh content rarbogh visibility pab media support routes je.

curl "https://Geotrackable.com/api/images/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/thumbnail"

jangghach Qap

HTTP 200 streams the requested visible JPEG variant with an image content type.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 image_variant_invalid lists the supported download variants and other 400 responses explain screening constraints; 401/403 require a valid owner or team-admin context; 404 means the content is missing or not visible; 500 image_variant_unavailable means metadata exists but the stored variant could not be served. 413 requires fewer or smaller files; 415 requires multipart/form-data for uploads.

GET /api/locations/mine/gpx

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/locations/mine/gpx" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 downloads GPX containing the eligible mapped waypoints in this scope.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/locations/mine/gpx

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/locations/mine/gpx" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@waypoints.gpx"

jangghach Qap

HTTP 200 returns import counts and item-level results after the GPX waypoint file is processed.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

GET /api/notes/mine

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/notes/mine" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/notes/mine

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/notes/mine" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Trailhead", "body": "Parking and route notes.", "contentLanguage": "en-US", "latitude": 41.8818, "longitude": -87.6231, "visibility": "Private" }'

jangghach Qap

HTTP 200 returns the saved note, comment, attachment, move result, or deletion acknowledgement for the requested scope.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

GET /api/notes/mine/gpx

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/notes/mine/gpx" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 downloads GPX containing the eligible mapped waypoints in this scope.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/notes/mine/gpx

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/notes/mine/gpx" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@waypoints.gpx"

jangghach Qap

HTTP 200 returns import counts and item-level results after the GPX waypoint file is processed.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

DELETE /api/notes/mine/{noteId}

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X DELETE "https://Geotrackable.com/api/notes/mine/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the saved note, comment, attachment, move result, or deletion acknowledgement for the requested scope.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

POST /api/notes/mine/{noteId}/move

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/notes/mine/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/move" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the saved note, comment, attachment, move result, or deletion acknowledgement for the requested scope.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies field, hierarchy, bounds, GPX, or move/delete rules; 401 requires a token; 403 requires ownership; 404 means refresh personal workspace state. Uploads can also return 413 or 415.

GET /api/notes/public/bounds

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/notes/public/bounds?minLatitude=41.78&minLongitude=-87.75&maxLatitude=41.96&maxLongitude=-87.54&contentLanguage=en-US"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

GET /api/notes/public/nearby

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/notes/public/nearby?latitude=41.8818&longitude=-87.6231&radiusKm=8&contentLanguage=en-US"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

GET /api/public/notes/{noteId}

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/public/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

GET /api/public/notes/{noteId}/comments

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/public/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments"

jangghach Qap

HTTP 200 returns the visible comment panel, policy, and current comments. An empty comment list is a successful result.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

POST /api/public/notes/{noteId}/comments

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/public/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Found near the overlook.", "accessCode": "" }'

jangghach Qap

HTTP 200 returns the saved comment state. Anonymous writes require this client's active session or an accessCode for this exact activated trackable.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

GET /api/public/notes/{noteId}/trackables

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/public/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/trackables"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

POST /api/public/notes/{noteId}/trackables

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl -X POST "https://Geotrackable.com/api/public/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/trackables" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "trackableSecretCodes": "TAG42", "selectedActiveTrackableIds": [] }'

jangghach Qap

HTTP 200 returns the saved note, comment, attachment, move result, or deletion acknowledgement for the requested scope.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

GET /api/public/profiles/{userName}/notes/nearby

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/public/profiles/trail-guide/notes/nearby?latitude=41.8818&longitude=-87.6231&radiusKm=8&contentLanguage=en-US"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

GET /api/public/teams/{teamName}/notes/nearby

public map laDghach anonymous; personal Daq category ghItlhghach je bearer auth poQ.

curl "https://Geotrackable.com/api/public/teams/trail-club/notes/nearby?latitude=41.8818&longitude=-87.6231&radiusKm=8&contentLanguage=en-US"

jangghach Qap

HTTP 200 returns the visible note, comment, attachment, or map result. Empty collections are successful; a missing single resource returns 404.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies incomplete bounds, invalid coordinate ranges, or invalid comment/attachment input; 403 protects restricted writes; 404 can hide a private or missing page. Correct the query as directed by errors and action.

POST /api/sync/pull

wa'DIch local choHmey yIpush, ghIq user current public area je server view yIpull.

curl -X POST "https://Geotrackable.com/api/sync/pull" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "lastSyncUtc": "2026-06-20T11:30:00Z", "publicArea": { "minLatitude": 41.78, "minLongitude": -87.75, "maxLatitude": 41.96, "maxLongitude": -87.54 } }'

jangghach Qap

HTTP 200 returns the current personal, public, and team synchronization view. Call this after push in each offline cycle.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies malformed sync envelopes or a request rejected before processing; 401 requires a new bearer token. Per-entity reconciliation problems return HTTP 200 inside conflicts with code and action. Never retry push blindly after an unknown timeout.

POST /api/sync/push

wa'DIch local choHmey yIpush, ghIq user current public area je server view yIpull.

curl -X POST "https://Geotrackable.com/api/sync/push" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "deviceId": "5dd06ca7-34a5-4f2e-812d-3f1ef3e48290", "notes": [], "categories": [] }'

jangghach Qap

HTTP 200 acknowledges accepted client changes and reports synchronization results. Preserve client IDs so the following pull can reconcile the same records.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies malformed sync envelopes or a request rejected before processing; 401 requires a new bearer token. Per-entity reconciliation problems return HTTP 200 inside conflicts with code and action. Never retry push blindly after an unknown timeout.

GET /api/system/beta-android

routevam anonymous 'ej production API host SIchlaHlu' 'e' 'olmeH mIw nomqu'.

curl "https://Geotrackable.com/api/system/beta-android"

jangghach Qap

HTTP 200 returns current Android beta release metadata and download guidance when a beta package is published.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies missing or malformed query binding; 500 includes requestId for support. Optional Android beta data returns HTTP 200 with available:false. Coordinate range and location-provider failures return HTTP 200 with resolved:false plus failureMessage, action, and retryable.

GET /api/system/coordinate-locality

routevam anonymous 'ej production API host SIchlaHlu' 'e' 'olmeH mIw nomqu'.

curl "https://Geotrackable.com/api/system/coordinate-locality?latitude=41.8818&longitude=-87.6231"

jangghach Qap

HTTP 200 returns the best available locality facts. A successful response can contain partial or unavailable location fields when resolution is intentionally limited.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies missing or malformed query binding; 500 includes requestId for support. Optional Android beta data returns HTTP 200 with available:false. Coordinate range and location-provider failures return HTTP 200 with resolved:false plus failureMessage, action, and retryable.

GET /api/system/ip-location

routevam anonymous 'ej production API host SIchlaHlu' 'e' 'olmeH mIw nomqu'.

curl "https://Geotrackable.com/api/system/ip-location"

jangghach Qap

HTTP 200 returns the best available locality facts. A successful response can contain partial or unavailable location fields when resolution is intentionally limited.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 identifies missing or malformed query binding; 500 includes requestId for support. Optional Android beta data returns HTTP 200 with available:false. Coordinate range and location-provider failures return HTTP 200 with resolved:false plus failureMessage, action, and retryable.

GET /api/system/status

routevam anonymous 'ej production API host SIchlaHlu' 'e' 'olmeH mIw nomqu'.

curl "https://Geotrackable.com/api/system/status"

jangghach Qap

HTTP 200 returns the service status, server UTC time, and Android beta-page URL. This confirms reachability, not authenticated access.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

A network, DNS, TLS, or 500 failure means the host check did not complete. Preserve requestId when returned and use bounded backoff; status does not return 401.

GET /api/teams

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Trail Club", "title": "Trail Club", "description": "Shared field work.", "joinPolicy": "InviteOnly", "pageVisibility": "Public", "defaultNoteVisibility": "Public", "contentLanguage": "en-US" }'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/invite-links/{teamSlug}/{inviteCode}/join

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/invite-links/trail-club/INVITE-CODE/join" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

DELETE /api/teams/{teamId}

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X DELETE "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/categories

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/categories

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Team trail research", "contentLanguage": "en-US", "parentCategoryId": null }'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/categories/tree

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories/tree" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/categories/tree/children

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories/tree/children" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/categories/tree/sections

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories/tree/sections" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

DELETE /api/teams/{teamId}/categories/{categoryId}

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X DELETE "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/categories/{categoryId}/move

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/categories/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/move" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "parentCategoryId": null }'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/invite-links

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/invite-links" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/invite-links

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/invite-links" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "isSingleUse": true }'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

DELETE /api/teams/{teamId}/invite-links/{inviteLinkId}

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X DELETE "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/invite-links/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/locations/gpx

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/locations/gpx" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 downloads GPX for mapped team waypoints visible to the member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/locations/gpx

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/locations/gpx" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@waypoints.gpx"

jangghach Qap

HTTP 200 returns team GPX import counts and item-level results.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/invite

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/invite" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/request

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/request" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

DELETE /api/teams/{teamId}/memberships/{membershipId}

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X DELETE "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/{membershipId}/accept

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/accept" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/{membershipId}/approve

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/approve" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/{membershipId}/deny

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/deny" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/{membershipId}/promote-admin

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/promote-admin" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/memberships/{membershipId}/refuse

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/memberships/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/refuse" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/notes

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the team, workspace, membership, category, note, or invite-link data visible to the signed-in member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/notes

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Team trailhead", "body": "Shared route notes.", "contentLanguage": "en-US", "latitude": 41.8818, "longitude": -87.6231, "visibility": "Public" }'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

GET /api/teams/{teamId}/notes/gpx

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes/gpx" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 downloads GPX for mapped team waypoints visible to the member.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/notes/gpx

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes/gpx" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@waypoints.gpx"

jangghach Qap

HTTP 200 returns team GPX import counts and item-level results.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

DELETE /api/teams/{teamId}/notes/{noteId}

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X DELETE "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

DELETE /api/teams/{teamId}/notes/{noteId}/delete

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

curl -X DELETE "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/delete" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/teams/{teamId}/notes/{noteId}/move

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/move" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

PUT /api/teams/{teamId}/settings

shared Daqmey, categorymey, invite links, membership wuqghachmey, team-owned trackable scope je vu' Team APIs.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X PUT "https://Geotrackable.com/api/teams/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/settings" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting team state or acknowledges the membership, workspace, invite, settings, or deletion operation.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains membership, invite, hierarchy, GPX, move, or deletion rules; 401 requires login; 403 requires the stated member/admin role; 404 means refresh team state before submitting another change.

POST /api/trackables

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Scout trail coin", "description": "Move this coin along family-friendly trails.", "visibility": "AlwaysVisibleToEveryone", "activateImmediately": true }'

jangghach Qap

HTTP 201 returns the one-time reveal. Omit secretCode for a generated GT code; an available allowed custom value is honored. Save secretCode and scanUrl now because read routes do not reveal them later.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 validation_failed identifies invalid fields; 400 trackable_secret_code_reserved explains GT, LN, TB, GK, or GC prefixes; 409 trackable_secret_code_taken means omit secretCode for generation or choose another value; 401 requires login.

GET /api/trackables/active

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/active"

jangghach Qap

HTTP 200 returns the active secret-backed trackables remembered by this client. An empty array is a successful result, not an authentication failure.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

404 means this client no longer has the requested active trackable session; revisit the private code or scan route. 400 covers invalid status text. This session uses cookies, so preserve the cookie jar across calls.

GET /api/trackables/active-indicator

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/active-indicator"

jangghach Qap

HTTP 200 returns the trackable data visible in the caller's public, signed-in, or active-session access context.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

404 means this client no longer has the requested active trackable session; revisit the private code or scan route. 400 covers invalid status text. This session uses cookies, so preserve the cookie jar across calls.

DELETE /api/trackables/active/{trackableId}

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X DELETE "https://Geotrackable.com/api/trackables/active/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 ends this client's remembered secret-backed session for the item. It does not delete or deactivate the trackable.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

404 means this client no longer has the requested active trackable session; revisit the private code or scan route. 400 covers invalid status text. This session uses cookies, so preserve the cookie jar across calls.

GET /api/trackables/active/{trackableId}

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/active/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the current active landing state or updated status message for the trackable while this client still has its secret-backed session.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

404 means this client no longer has the requested active trackable session; revisit the private code or scan route. 400 covers invalid status text. This session uses cookies, so preserve the cookie jar across calls.

POST /api/trackables/active/{trackableId}/deactivate

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/trackables/active/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/deactivate" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the current active landing state or updated status message for the trackable while this client still has its secret-backed session.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

404 means this client no longer has the requested active trackable session; revisit the private code or scan route. 400 covers invalid status text. This session uses cookies, so preserve the cookie jar across calls.

POST /api/trackables/active/{trackableId}/message

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/active/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/message" \
  -H "Content-Type: application/json" \
  -d '{ "statusMessage": "Live hunt in progress" }'

jangghach Qap

HTTP 200 returns the current active landing state or updated status message for the trackable while this client still has its secret-backed session.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

404 means this client no longer has the requested active trackable session; revisit the private code or scan route. 400 covers invalid status text. This session uses cookies, so preserve the cookie jar across calls.

POST /api/trackables/groups

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/groups" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Trail event set", "description": "Event inventory", "trackableCount": 12, "visibility": "AlwaysVisibleToEveryone", "activateImmediately": false, "watchGroupActivityWhenCreated": true }'

jangghach Qap

HTTP 201 returns the new group plus the one-time public, secret, and scan credentials for every generated member. Persist the reveal before leaving the response.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 explains invalid defaults, count, visibility, category, or team rules; 401 requires login; 403 means the caller cannot create in that team. Correct the request before retrying the batch.

DELETE /api/trackables/groups/{trackableGroupId}/watch

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X DELETE "https://Geotrackable.com/api/trackables/groups/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/watch" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting trackable or group state after the signed-in account's watch preference changes. Repeating the desired final state should not create duplicate watches.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

POST /api/trackables/groups/{trackableGroupId}/watch

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/trackables/groups/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/watch" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting trackable or group state after the signed-in account's watch preference changes. Repeating the desired final state should not create duplicate watches.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

POST /api/trackables/legacy-lookup

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/trackables/legacy-lookup" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting trackable state after the requested ownership, grouping, or monitoring operation completes.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

GET /api/trackables/lookup

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/lookup?code=GT-EXAMPLE"

jangghach Qap

HTTP 200 returns found, the resolved trackable ID, match type, and redirect guidance. An ordinary mistyped or unknown code is also HTTP 200 with found false so lookup UI can remain in place.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

An unknown or mistyped code is normally HTTP 200 with found false, not problem details. 400 is reserved for malformed input. Never log the submitted secret or QR value while diagnosing lookup.

POST /api/trackables/lookup

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/lookup" \
  -H "Content-Type: application/json" \
  -d '{ "code": "GT-EXAMPLE" }'

jangghach Qap

HTTP 200 returns found, the resolved trackable ID, match type, and redirect guidance. An ordinary mistyped or unknown code is also HTTP 200 with found false so lookup UI can remain in place.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

An unknown or mistyped code is normally HTTP 200 with found false, not problem details. 400 is reserved for malformed input. Never log the submitted secret or QR value while diagnosing lookup.

GET /api/trackables/mine

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/mine" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the trackable data visible in the caller's public, signed-in, or active-session access context.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

GET /api/trackables/public

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/public?contentLanguage=en-US"

jangghach Qap

HTTP 200 returns the trackable data visible in the caller's public, signed-in, or active-session access context.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

GET /api/trackables/{trackableId}

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63"

jangghach Qap

HTTP 200 returns the trackable data visible in the caller's public, signed-in, or active-session access context.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

POST /api/trackables/{trackableId}/activate

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/activate" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Activated trail coin", "description": "Ready to travel", "teamId": null }'

jangghach Qap

HTTP 200 returns the activated trackable details after personal or team ownership and item-level metadata are established.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

GET /api/trackables/{trackableId}/comments

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments"

jangghach Qap

HTTP 200 returns the visible comment panel, policy, and current comments. An empty comment list is a successful result.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

POST /api/trackables/{trackableId}/comments

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Found near the overlook.", "accessCode": "" }'

jangghach Qap

HTTP 200 returns the saved comment state. Anonymous writes require this client's active session or an accessCode for this exact activated trackable.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

DELETE /api/trackables/{trackableId}/comments/{commentId}

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X DELETE "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the saved comment state. Anonymous writes require this client's active session or an accessCode for this exact activated trackable.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

PUT /api/trackables/{trackableId}/comments/{commentId}

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X PUT "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/comments/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Updated field note." }'

jangghach Qap

HTTP 200 returns the saved comment state. Anonymous writes require this client's active session or an accessCode for this exact activated trackable.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

DELETE /api/trackables/{trackableId}/group

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X DELETE "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/group" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting trackable state after the requested ownership, grouping, or monitoring operation completes.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

POST /api/trackables/{trackableId}/group

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/group" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "trackableGroupId": "13a2c0b1-582f-4a7b-92aa-16922f7bdb63" }'

jangghach Qap

HTTP 200 returns the resulting trackable state after the requested ownership, grouping, or monitoring operation completes.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

GET /api/trackables/{trackableId}/journey

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/journey"

jangghach Qap

HTTP 200 returns the visible journey points in route order. An activated trackable with no reported stops returns an empty collection.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

POST /api/trackables/{trackableId}/journey-stops

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/journey-stops" \
  -H "Content-Type: application/json" \
  -d '{ "latitude": 41.8818, "longitude": -87.6231, "accessCode": "" }'

jangghach Qap

HTTP 200 returns the saved direct journey stop. The latitude and longitude become an immutable route-history point for the activated trackable.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

DELETE /api/trackables/{trackableId}/journey-stops/{journeyStopId}

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X DELETE "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/journey-stops/13a2c0b1-582f-4a7b-92aa-16922f7bdb63" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 confirms the authorized direct journey stop was removed. Refresh the journey before offering another action on that stop.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 trackable_activation_required means an eligible owner must activate first; 403 trackable_access_code_required or trackable_access_code_invalid requires this exact item's session or credential; 404 means refresh stale IDs.

DELETE /api/trackables/{trackableId}/watch

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

curl -X DELETE "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/watch" \
  -H "Authorization: Bearer <access token>"

jangghach Qap

HTTP 200 returns the resulting trackable or group state after the signed-in account's watch preference changes. Repeating the desired final state should not create duplicate watches.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

POST /api/trackables/{trackableId}/watch

HochvaD leghmeH mIw, peghbogh ghajghach, qawlu'bogh pegh naw', QInmey, leng mevmeH Daqmey je ngaS trackable Hemey.

# Request-body placeholder: replace {} with the fields required by this route before sending.
curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/watch" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{}'

jangghach Qap

HTTP 200 returns the resulting trackable or group state after the signed-in account's watch preference changes. Repeating the desired final state should not create duplicate watches.

QapHa'ghachmey motlh je Qapqa'meH mIwmey

400 reports a trackable business rule; 401 applies to bearer-only management; 403 supplies the ownership, team-role, grouping, or access action; 404 means refresh the current trackable or group state.

QaH