HTTP na API

LocationNotes API dokumentasyon

Gamitin ang page na ito kapag kailangan mo ang totoong mga ruta ng HTTP, mga parameter ng query, mga panuntunan sa pagpapatotoo, at mga halimbawa ng copy-paste sa likod ng website at Android app. Ang pampublikong site, na-authenticate na mga daloy ng website, at Android client ay nakikipag-usap sa parehong API surface sa parehong domain.

Kailangan ang modelo ng produkto sa likod ng mga endpoint? Ano ang isang User?, Ano ang isang Koponan?, Ano ang isang Tala?, at Ano ang isang Trackable?, at Ano ang External Link?, at Ano ang isang Imahe? at Ano ang Kahilingan sa Suporta? ipaliwanag ang mga bagay na pinapatakbo ng mga rutang ito. Para sa sunud-sunod na mga nasusubaybayang sequence, gamitin ang napatotohanan na nasusubaybayan ang daloy ng API, hindi kilalang masusubaybayang daloy ng API, at nasusubaybayang sanggunian ng error mga pahina.

Base URL at mga kombensiyon

Batayang URL

Ipinapalagay ng lahat ng mga halimbawa sa page na ito ang kasalukuyang production host:

https://locationnotes.com

Pormat

Ang mga kahilingan at tugon ay gumagamit ng JSON. Ang mga GUID ay ang mga pangunahing identifier sa mga tala, kategorya, team, at device.

Awtorisasyon

Ang mga pribado, pag-sync, at mga endpoint ng koponan ay nangangailangan ng isang Authorization: Bearer <access token> header maliban kung ang ruta ay minarkahan ng publiko sa ibaba.

Wika

Maaaring pumasa ang pampubliko at mga pagbabasa ng pamamahala contentLanguage=en-US o isa pang sinusuportahang wika ng nilalaman upang i-filter ang ibinalik na nilalaman ng tala/kategorya.

Authentication at mga token ng maydala

Nakadokumento sa Pagpapatunay pahina. Magrehistro muna kapag ang tumatawag ay wala pang LocationNotes account. Dapat gamitin ng mga kliyenteng API na may dalang token ang pagkakakilanlan na API na ruta sa pag-log in na naka-off ang cookies, na parehong pattern na ginagamit ng Android app.

POST /api/auth/register Hindi nakikilala

Katawan ng kahilingan sa pagpaparehistro

{
  "email": "tester@example.com",
  "password": "StrongP@ssw0rd!"
}

Magrehistro ng pag-uugali

Ang isang matagumpay na tawag sa pagpaparehistro ay lumilikha ng account ngunit hindi pinapalitan ang pag-login. Susunod na tawagan ang ruta ng pag-login ng maydala kapag kailangan ng kliyente ng access token para sa pribado, pag-sync, koponan, o pamahalaan ang mga ruta.

POST /api/auth/login?useCookies=false&useSessionCookies=false Hindi nakikilala

Humiling ng katawan

{
  "email": "tester@example.com",
  "password": "StrongP@ssw0rd!"
}

Sipi ng tugon

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

Inililista din ng kumpletong imbentaryo ng ruta sa ibaba ang kasalukuyang mga ruta ng pagkakakilanlan na pinamamahalaan ng framework sa ilalim ng /api/auth. Kung kailangan mo ang buong interactive na daloy ng website, mga callback ng provider, mga page sa seguridad ng account, o pag-uugali sa pag-link ng provider, gamitin ang Pahina ng pagpapatunay.

Mga pampublikong tala sa mga hangganan ng mapa

Gamitin ang endpoint na ito para sa mga pampublikong window ng mapa at mga karanasan sa pagba-browse ayon sa lugar. Ito ang rutang ginagamit ng mapa ng homepage.

GET /api/notes/public/bounds Hindi nakikilala
  • Kinakailangang query string: minLatitude, minLongitude, maxLatitude, maxLongitude
  • Opsyonal na string ng query: contentLanguage
  • Ang mga tugon ay nililimitahan ng limitasyon sa pagkakalantad ng pampublikong-data ng site, na kasalukuyang 500 bilang default, at inayos muna ng kamakailang aktibidad.

Kasama sa mga pampublikong babasahin na ito ang mga normal na Pampublikong tala at tala gamit ang VisibleOnceAssociatedTrackableAccessed lamang habang wala pa silang nauugnay na trackable. Kapag na-attach na ang isang trackable, mawawala ang tala sa anonymous na pagtuklas ng pampublikong mapa hanggang sa ma-unlock ng viewer ang isa sa mga nauugnay na trackable sa isang page-level na ruta.

curl "https://locationnotes.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",
    "ownerUserId": "a7cfd28f-c17f-4cf7-8913-47fa10fd0d1f",
    "categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
    "title": "Dock gate closed",
    "body": "Security redirected vehicles to the south entrance.",
    "contentLanguage": "en-US",
    "latitude": 41.8818,
    "longitude": -87.6231,
    "visibility": "Public",
    "isDeleted": false,
    "updatedUtc": "2026-03-13T20:10:00Z",
    "clientMutationId": "web-demo-public-1",
    "teamId": null
  }
]

Mga pampublikong tala malapit sa isang punto

Gamitin ang endpoint na ito kapag alam na ng kliyente ang isang sentrong punto at gusto ng isang resulta na limitado sa distansya sa halip na isang parihaba na window ng mapa.

GET /api/notes/public/nearby Hindi nakikilala
  • Kinakailangang query string: latitude, longitude
  • Opsyonal na string ng query: radiusKm (paunang halaga 5), contentLanguage
  • Ang mga kalapit na resulta ay nililimitahan ng limitasyon sa pagkakalantad ng pampublikong-data ng site, na kasalukuyang 500 bilang default.

Nalalapat dito ang parehong panuntunan sa visibility bilang endpoint ng mga hangganan: Karaniwang kasama ang mga pampublikong tala, at ang VisibleOnceAssociatedTrackableAccessed na mga tala ay kasama lamang hanggang sa makuha nila ang kanilang unang nauugnay na masusubaybayan.

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

Mga stream ng tala ng pampublikong profile at page ng team

Ang mga rutang ito pabalik sa naka-publish na mapa at note strip sa pampublikong profile at mga pahina ng pampublikong koponan. Ginagamit nila ang parehong mga panuntunan sa pag-access ng tala gaya ng mismong page at tinatanggap nila ang alinman sa malapit na center point o buong hangganan ng mapa.

GET /api/public/profiles/{userName}/notes/nearby Anonymous o Tagadala
GET /api/public/teams/{teamName}/notes/nearby Anonymous o Tagadala

Kinakailangang query string: latitude, longitude o buong mapa na may hangganan minLatitude, minLongitude, maxLatitude, maxLongitude.

Opsyonal na string ng query: radiusKm (paunang halaga 5), contentLanguage, includeAllLanguages

Karaniwang ipinapadala ng website ang kasalukuyang wika ng ruta bilang contentLanguage kaya ang /en-US at /tlh na mga pampublikong pahina ay hindi naghahalo ng mga authored note na wika sa parehong mapa o strip bilang default.

Itakda lamang ang includeAllLanguages=true kapag ang kliyente ay sadyang gumagawa ng multilinggwal na browse surface sa halip na i-mirror ang pahina ng website.

curl "https://locationnotes.com/api/public/profiles/michael-kappel/notes/nearby?minLatitude=41.87&minLongitude=-87.64&maxLatitude=41.89&maxLongitude=-87.62&contentLanguage=en-US"

Offline na ikot ng pag-sync

Dapat munang itulak ng mga kliyente sa pag-sync ang lokal na maruming data, pagkatapos ay hilahin ang mga pagbabago sa server para sa user, mga aktibong team, at pampublikong tala sa kasalukuyang lugar. Ang parehong mga ruta ng pag-sync ay nangangailangan ng pagpapatunay ng maydala.

POST /api/sync/push Tagadala
{
  "deviceId": "5dd06ca7-34a5-4f2e-812d-3f1ef3e48290",
  "notes": [
    {
      "noteId": "ef90c4ca-88a9-4a9b-b3a8-36e2649c5dcb",
      "ownerUserId": "a7cfd28f-c17f-4cf7-8913-47fa10fd0d1f",
      "categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
      "title": "Offline inspection",
      "body": "Saved while disconnected.",
      "contentLanguage": "en-US",
      "latitude": null,
      "longitude": null,
      "visibility": "Private",
      "externalLinkUrl": "https://example.com/offline-inspection",
      "externalLinkDescription": "",
      "applyExternalLinkChanges": true,
      "isDeleted": false,
      "updatedUtc": "2026-03-13T20:12:00Z",
      "clientMutationId": "android-offline-42",
      "teamId": null
    }
  ],
  "categories": []
}
{
  "appliedNoteIds": [
    "ef90c4ca-88a9-4a9b-b3a8-36e2649c5dcb"
  ],
  "appliedCategoryIds": [],
  "conflicts": []
}
POST /api/sync/pull Tagadala
{
  "lastSyncUtc": "2026-03-13T19:45:00Z",
  "publicArea": {
    "minLatitude": 41.78,
    "minLongitude": -87.75,
    "maxLatitude": 41.96,
    "maxLongitude": -87.54
  }
}
{
  "serverSyncUtc": "2026-03-13T20:13:02Z",
  "userNotes": [],
  "userCategories": [],
  "teamCategories": [],
  "publicNotes": [],
  "teamNotes": []
}

Tinatanggihan ng mga endpoint ng pag-sync ang mga hindi kilalang kahilingan. Kung bina-block ng server ang isang mas lumang Android beta build, tingnan GET /api/system/status para sa minimum na katugmang bersyon at beta-page na URL.

Mga personal na tala at kategorya

Ang mga rutang ito pabalik sa naka-sign-in na workspace ng website at estado ng personal na pag-sync ng Android. Lahat ay nangangailangan ng pagpapatunay ng maydala.

Basahin ang mga personal na tala

GET /api/notes/mine Tagadala

Opsyonal na string ng query: contentLanguage at buong mapa na may hangganan minLatitude, minLongitude, maxLatitude, maxLongitude.

Kasama na ngayon ang mga nabasang payload ng tala lastActivityUtc upang maipakita ng mga kliyente ang pinakabagong aktibidad nang hiwalay mula sa pagtitiyaga/pag-update ng mga timestamp.

Gumawa ng tala

POST /api/notes/mine Tagadala
{
  "categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
  "title": "Category-only feedback",
  "body": "This note stays off the map on purpose.",
  "contentLanguage": "en-US",
  "externalLinkUrl": "https://example.com/field-guide",
  "externalLinkDescription": "",
  "latitude": null,
  "longitude": null,
  "visibility": "VisibleOnceAssociatedTrackableAccessed",
  "commentPolicy": "LoggedInUsers"
}

tumatanggap ang visibility ng Pribado, Pampubliko, at VisibleOnceAssociatedTrackableAccessed. Ang nauugnay na trackable na mode ay kumikilos tulad ng Pampubliko hanggang sa ang tala ay may isa o higit pang nauugnay na trackable. Pagkatapos noon, kailangan ng pampublikong pagtuklas at pag-access sa page ng tala na na-unlock na ng manonood ang isa sa mga nauugnay na trackable na iyon.

  • Wala pang nauugnay na trackable: ang tala ay kumikilos tulad ng isang pampublikong tala.
  • Pagkatapos ng unang pag-uugnay: ang tala ay mawawala sa anonymous na pampublikong pagtuklas at normal na pampublikong pag-access sa pahina ng tala.
  • Naka-unlock na viewer: ang isang taong nag-unlock na ng isang nauugnay na trackable ay maaaring magbukas ng page ng tala at gamitin ang mga nakakonektang pampublikong tala-page na ruta ng API.
  • May-ari o awtorisadong miyembro ng koponan: pinapanatili ang normal na pag-access sa tala at mga karapatan sa pamamahala.

Tandaan ang mga nabasa at aksyon sa pahina

GET /api/public/notes/{noteId} Anonymous o Tagadala
GET /api/public/notes/{noteId}/comments Anonymous o Tagadala
POST /api/public/notes/{noteId}/comments Tagadala
GET /api/public/notes/{noteId}/trackables Anonymous o Tagadala
POST /api/public/notes/{noteId}/trackables Tagadala
{
  "body": "I found it too."
}
{
  "trackableSecretCodes": "LN4C8R2Z",
  "selectedActiveTrackableIds": [
    "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31"
  ],
  "activeTrackableAttachMode": "Self"
}

Ang mga ruta ng tala-page na ito ay gumagalang sa mga panuntunan sa pag-access ng tala, kabilang ang mga pribadong tala at tala na may gate ng nauugnay na nasusubaybayang access. Kung mabubuksan ng tumatawag ang pahina ng tala, maaaring magbalik ang API ng mga komento at nakikitang trackable para sa talang iyon. Ang pag-attach ng mga trackable ay nangangailangan ng may-ari ng tala o isang admin ng team.

  • Bago umiral ang unang nauugnay na trackable, ang mga rutang ito ay kumikilos tulad ng mga karaniwang ruta ng pampublikong tala-page.
  • Pagkatapos magkaroon ng kahit isang asosasyon, ang mga tumatawag na walang access sa isang nauugnay na trackable ay dapat umasa ng 404 mula sa mga pampublikong ruta ng page ng tala kahit na umiiral pa rin ang tala.
  • Ang parehong tala ay maaari pa ring magbalik ng 200 para sa may-ari, awtorisadong miyembro ng team, o mga manonood na nag-unlock na ng isang nauugnay na masusubaybayan.

Basahin ang mga kategorya

GET /api/categories/mine Tagadala
GET /api/categories/mine/tree Tagadala

Mga katulong sa puno ng workspace

GET /api/categories/mine/tree/sections Tagadala
GET /api/categories/mine/tree/children?parentCategoryId={categoryId} Tagadala

Gamitin ang mas magaan na mga ruta ng katulong para sa mga nakakatamad na tagapili ng kategorya at mga sidebar tree. pinapangkat ng puno/mga seksyon ang mga kategorya ng ugat ayon sa nilalamanLanguage. tree/children ay nagbabalik ng mga direktang child node para sa isang magulang at kasama ang childCategoryCount upang makapagpasya ang kliyente kung magpapakita ng pinalawak na affordance bago i-load ang mga apo.

[
  {
    "contentLanguage": "en-US",
    "rootCategories": [
      {
        "categoryId": "68cb4c9b-d9bd-4bde-8c6a-a03a4c70b283",
        "name": "Field Reports",
        "contentLanguage": "en-US",
        "parentCategoryId": null,
        "childCategoryCount": 2
      }
    ]
  }
]
[
  {
    "categoryId": "c4b2e65f-5cf2-4ab6-8577-a89dfb51407f",
    "name": "Dock checks",
    "contentLanguage": "en-US",
    "parentCategoryId": "68cb4c9b-d9bd-4bde-8c6a-a03a4c70b283",
    "childCategoryCount": 0
  }
]

Lumikha o maglipat ng mga kategorya

POST /api/categories/mine Tagadala
POST /api/categories/mine/{categoryId}/move Tagadala
{
  "name": "Field Reports",
  "contentLanguage": "en-US",
  "parentCategoryId": null
}

Personal na GPX waypoint handoff

GET /api/notes/mine/gpx Tagadala

GET /api/notes/mine/gpx exports lang nakamapang personal na mga tala na may mga naka-save na coordinate bilang GPX 1.1 waypoint.

POST /api/notes/mine/gpx Tagadala

Tumatanggap ang POST /api/notes/mine/gpx ng multipart form data na may file, visibility, at opsyonal na contentLanguage. Ang pag-import ay nagbabasa lamang ng mga entry sa waypoint, gumagawa ng mga normal na naka-map na tala, at hindi kailanman nag-o-overwrite sa isang umiiral nang tala.

Ang mga duplicate na pagsusuri ay mananatili sa loob ng napiling personal na saklaw. Ang katugmang pamagat at mga coordinate na may parehong teksto ng tala ay iniuulat bilang mga duplicate. Ang katugmang pamagat at mga coordinate na may iba't ibang teksto ng tala ay nilalaktawan upang maiwasan ang pag-overwrite.

curl "https://locationnotes.com/api/notes/mine/gpx" \
  -H "Authorization: Bearer <access token>"
curl -X POST "https://locationnotes.com/api/notes/mine/gpx" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@waypoints.gpx;type=application/gpx+xml" \
  -F "visibility=Private" \
  -F "contentLanguage=en-US"

Ano ang Import at Export? sumasaklaw sa kung paano naiiba ang GPX waypoint exchange mula sa buong JSON at portable ZIP na pag-export ng account.

Mga endpoint ng koponan

Sinasaklaw ng mga ruta ng koponan ang membership, mga imbitasyon, mga setting, mga tala ng koponan, at mga kategorya ng koponan. Lahat ay nangangailangan ng pagpapatunay ng maydala at ipinapatupad ng server ang mga pahintulot ng admin/miyembro sa bawat ruta.

Mga karaniwang babasahin

  • GET /api/teams
  • GET /api/teams/{teamId}/notes
  • GET /api/teams/{teamId}/categories
  • GET /api/teams/{teamId}/categories/tree
  • GET /api/teams/{teamId}/invite-links

Kasama sa mga modelo ng pagbabasa ng team at team-note lastActivityUtc. Mas pinipili ng public trimming ang pinakakamakailang aktibong talaan muna.

Mga katulong sa puno ng kategorya ng pangkat

GET /api/teams/{teamId}/categories/tree/sections Tagadala
GET /api/teams/{teamId}/categories/tree/children?parentCategoryId={categoryId} Tagadala

Ang mga rutang ito ay gumagamit ng parehong seksyon at mga child-node na hugis bilang mga personal workspace tree helper, ngunit ang data ay nananatili sa loob ng napiling saklaw ng team at nangangailangan pa rin ng aktibong miyembro ng team.

Gamitin DELETE /api/teams/{teamId}/notes/{noteId} kapag ang tala ay dapat umalis sa workspace ng koponan ngunit patuloy na umiiral para sa may-ari, at gamitin DELETE /api/teams/{teamId}/notes/{noteId}/delete kapag ang tala ng koponan mismo ay dapat na permanenteng tanggalin.

Lumikha ng isang koponan

{
  "name": "Beta Testers",
  "title": "Beta Testers",
  "description": "Public beta release gate for Android validation.",
  "externalLinkUrl": "https://example.com/beta-program",
  "externalLinkDescription": "",
  "joinPolicy": "RequestsAllowed",
  "pageVisibility": "Public",
  "defaultNoteVisibility": "Public",
  "contentLanguage": "en-US"
}

Gumawa ng tala ng koponan

POST /api/teams/{teamId}/notes Tagadala
{
  "categoryId": "68cb4c9b-d9bd-4bde-8c6a-a03a4c70b283",
  "title": "Shared dock inspection",
  "body": "Visible to the team until we publish it.",
  "contentLanguage": "en-US",
  "externalLinkUrl": "https://example.com/shared-briefing",
  "externalLinkDescription": "",
  "latitude": 41.8818,
  "longitude": -87.6231,
  "visibility": "Private",
  "commentPolicy": "TeamMembers"
}

Handoff ng waypoint ng Team GPX

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

GET /api/teams/{teamId}/notes/gpx at POST /api/teams/{teamId}/notes/gpx ilapat ang parehong mga panuntunan ng GPX sa loob ng napiling saklaw ng team. Ang mga duplicate at overwrite na mga tseke ay naghahambing lamang sa mga tala ng pangkat na iyon.

curl "https://locationnotes.com/api/teams/{teamId}/notes/gpx" \
  -H "Authorization: Bearer <access token>"
curl -X POST "https://locationnotes.com/api/teams/{teamId}/notes/gpx" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@team-waypoints.gpx;type=application/gpx+xml" \
  -F "visibility=Public" \
  -F "contentLanguage=en-US"

Membership at mag-imbita ng mga operasyon

  • POST /api/teams/{teamId}/memberships/request
  • POST /api/teams/{teamId}/memberships/invite
  • POST /api/teams/{teamId}/memberships/{membershipId}/accept
  • POST /api/teams/{teamId}/memberships/{membershipId}/refuse
  • POST /api/teams/{teamId}/memberships/{membershipId}/approve
  • POST /api/teams/{teamId}/memberships/{membershipId}/deny
  • POST /api/teams/{teamId}/memberships/{membershipId}/promote-admin
  • DELETE /api/teams/{teamId}/memberships/{membershipId}
  • POST /api/teams/invite-links/{teamSlug}/{inviteCode}/join
{
  "isSingleUse": false
}
{
  "inviteLinkId": "9a4726dc-4fb1-4c16-b7b3-5d48ea68fdce",
  "teamId": "0f4ddf5d-f3dc-4417-b96d-8e212d24235e",
  "teamName": "Invite Team",
  "teamSlug": "invite-team",
  "code": "8K4V9T",
  "createdByDisplayName": "invite-admin",
  "createdByCurrentUser": true,
  "inviterIsCurrentlyAdmin": true,
  "isSingleUse": false,
  "createdUtc": "2026-03-18T21:15:00Z"
}
{
  "teamSlug": "invite-team",
  "membershipStatus": "RequestingMembership"
}

Mga nasusubaybayang endpoint

Sinusuportahan ng mga trackable ang pagba-browse sa public-code, lihim na code o pag-scan-only na QR na pag-access, isang beses na lihim na pagbubunyag sa panahon ng paggawa, mga aktibong session sa gilid ng browser, komento, at mga workflow ng nakagrupong imbentaryo. Ibinabalik lamang ang mga lihim na maiikling code at scan-only na QR URL mula sa paggawa ng mga endpoint sa ibaba. Hindi na sila ibinalik muli mula sa mga rutang binasa, paghahanap, komento, o detalye.

Mahahalagang masusubaybayang panuntunan:
  • Ang mga pampublikong code ay maiikling pampublikong token na nananatiling natatangi sa buong mundo sa lahat ng trackable.
  • Ang mga pampublikong code at maiikling lihim na code ay walang banggaan laban sa isa't isa, kaya ang isang maikling code ay hindi maaaring mangahulugan ng parehong bagay.
  • Ang mga maiikling sikretong code at mga scan-only na QR URL ay mga kredensyal sa pag-access na nakabatay sa pagmamay-ari.
  • Isipin ang mga trackable at trackable na grupo bilang Nakikita Kapag Na-access o Laging Nakikita ng Lahat. Maaaring i-save ang naka-sign-in na lihim na pag-access sa account para sa mga device sa ibang pagkakataon.
  • Ang mga form sa pag-attach ng tala sa website ay tumatanggap ng isang trackable code sa isang pagkakataon at naka-attach lamang mula sa isang umiiral na maikling tugmang lihim na code.
  • Kung ang isang panlabas na code ay hindi pa nakarehistro, gawin muna ang trackable. Ang manu-manong tala-attachment na entry ay hindi awtomatikong nagrerehistro ng mga bagong third-party na code.
  • Ang pag-activate ay hinuhulaan mula sa OwnerUserId; walang hiwalay na persisted activation flag.
  • Ang mga hindi na-activate na trackable ay hindi maaaring ilakip sa mga tala at hindi maaaring tumanggap ng mga komento.
  • Ang isang trackable ay maaaring kabilang sa isang grupo lamang sa isang pagkakataon, at ang pagpapalit ng mga grupo ay nangangailangan ng pag-alis muna, pagkatapos ay muling ilakip.

Mga format at halimbawa ng pagkakakilanlan

Pormat Halimbawa Panuntunan sa paghahanap
Pampublikong code na token LN-7K4V9T Pambihirang natatanging maikling pampublikong token. Ligtas para sa pampublikong paghahanap at pampublikong mga link.
Ruta ng pampublikong pagpasok GET /trackable/LN-7K4V9T Maikling pampublikong bahagi URL. Ang parehong base na ruta ay ginagamit para sa mga pampublikong code, maiikling sikretong code, at mahabang scan-only na mga QR na token.
Na-localize ang pampublikong masusubaybayang pahina GET /en-US/trackables/LN-7K4V9T Naabot ng pampublikong page na na-render na partikular sa wika pagkatapos malutas ng URL ang code.
Lihim na ruta ng pagpasok GET /trackable/LN4C8R2Z Maikling entry na nakabatay sa pagmamay-ari na URL para sa isang taong may hawak ng item. Gumagamit ito ng parehong <code>/trackable/{code}</code> base na ruta gaya ng pampubliko at mahabang scan form.
Maikling sikretong code ng system LN4C8R2Z Natatangi sa buong mundo sa lahat ng trackable at natatangi din laban sa mga pampublikong code. Inilaan para sa manu-manong pagpasok na nakabatay sa pagmamay-ari.
Kahaliling prefix ng system GT8M2Q7V Parehong nabuong short-secret pattern sa mga sister deployment na gumagamit ng <code>GT</code> prefix.
Dalhin-iyong-sariling sikretong code ITEM42X Advanced na panlabas na identifier. Dapat manatiling natatangi sa lahat ng trackable at hindi dapat magsimula sa <code>LN</code> o <code>GT</code>.
Pribadong ruta ng pag-scan https://locationnotes.com/trackable/AB4D5QW2...<100 chars total>... Natatangi sa lahat ng trackable at nilayon na magmula sa QR scanning sa halip na manu-manong pagpasok.

Ang mga nabuong public-code na token at nabuong mga short-secret na katawan ay gumagamit ng parehong pamilya ng character na lumalaban sa buhangin. Itinuturing ng na-type na lookup ang O bilang 0, I o L bilang 1, S tulad ng 5, at U tulad ng V. Para sa mga short-secret code ng system, nalalapat ang normalisasyong iyon sa nabuong katawan pagkatapos ng literal na prefix. Ginagamit ng mga pampublikong code ang parehong naka-configure na prefix na may gitling bago ang nabuong katawan, kaya nakikitang naiiba ang mga ito sa mga maiikling sikretong code.

Listahan at mga detalyeng binabasa

Ang mga pampublikong listahan na nabasa ay nililimitahan ng limitasyon sa pagkakalantad ng pampublikong data ng site, na kasalukuyang 500 bilang default.

Kasama sa mga trackable at trackable-group read model ang lastActivityUtc upang ang mga dashboard at API na kliyente ay maaaring magpakita ng kamakailang aktibidad nang tahasan.

  • GET /api/trackables/public
  • GET /api/trackables/mine
  • GET /api/trackables/{trackableId}
  • POST /api/trackables/{trackableId}/watch
  • DELETE /api/trackables/{trackableId}/watch
  • GET /api/trackables/{trackableId}/journey
  • POST /api/trackables/{trackableId}/journey-stops
  • DELETE /api/trackables/{trackableId}/journey-stops/{journeyStopId}

GET /api/trackables/public at ang mga pampublikong trackable browse page ng website ay mananatiling multilinggwal upang ang pampublikong paglalakbay at data ng logistik ay hindi nakatago sa pamamagitan ng wika ng ruta.

Ilipat ang wika ng website kapag gusto mong i-localize ang chrome sa parehong pampublikong nasusubaybayang data.

Lumikha ng isang masusubaybayan

POST /api/trackables Tagadala
{
  "name": "Promo coin",
  "description": "Launch event inventory item",
  "externalLinkUrl": "https://example.com/promo-coin",
  "externalLinkDescription": "",
  "teamId": null,
  "visibility": "AlwaysVisibleToEveryone",
  "activateImmediately": false,
  "secretCode": ""
}
{
  "trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
  "heading": "Unactivated Trackable",
  "description": "Please activate this trackable item",
  "items": [
    {
      "trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
      "name": "Unactivated Trackable",
      "publicCode": "LN-7K4V9T",
      "secretCode": "LN4C8R2Z",
      "scanUrl": "https://locationnotes.com/trackable/ABCD...<100 characters total>...",
      "qrPayload": "ABCD...<100 characters total>..."
    }
  ]
}

Dalhin ang sarili mong sikretong code

{
  "name": "Marketing token",
  "description": "Bring-your-own identifier",
  "teamId": null,
  "visibility": "VisibleOnceAccessed",
  "activateImmediately": true,
  "secretCode": "TAG42"
}

Tumatanggap ang server ng mga lihim na code na ibinigay ng tumatawag na hindi nagsisimula sa LN, GT, o GC at hindi tumutugma sa anumang umiiral na lihim o pampublikong code. Ang ibinalik na pampublikong code ay binuo pa rin ng system.

Gumawa ng grupo

POST /api/trackables/groups Tagadala
{
  "name": "Gnomes in this hunt",
  "description": "Seasonal hunt inventory",
  "defaultTrackableTitle": "",
  "defaultTrackableDescription": "",
  "defaultExternalLinkUrl": "https://example.com/hunt-rules",
  "defaultExternalLinkDescription": "",
  "trackableCount": 12,
  "teamId": null,
  "visibility": "AlwaysVisibleToEveryone",
  "activateImmediately": false,
  "watchGroupActivityWhenCreated": true
}

Limitado ang mga grupo sa 100 trackable. Ang mga hindi na-activate na item ay bumabalik sa mga default ng grupo hanggang sa pag-activate. Kapag na-activate na, dapat nilang gamitin ang kanilang sariling pamagat at paglalarawan.

Ang paggawa ng trackable-group ay maaari ding tumanggap ng watchGroupActivityWhenCreated kapag ang isang hindi na-activate na batch ay dapat magsimula sa listahan ng panonood ng gumawa.

Lookup at aktibong session

  • POST /api/trackables/lookup tumutugma sa isang pampublikong code na token o maikling sikretong code pagkatapos na gawing normal ang mga karaniwang palitan na may bahid na character na nakalista sa itaas.
  • GET /trackable/{code} ay ang maikling ruta ng pagpasok sa website na ipinapakita sa mga user at mga kliyente ng API. Tumatanggap ito ng pampublikong code, isang maikling sikretong code, o ang mahabang QR token at pagkatapos ay ruta sa tamang daloy.
  • GET /api/trackables/active naglilista ng kasalukuyang aktibong secret-code session ng kliyente kapag mayroon.
  • GET /api/trackables/active/{trackableId} ibinabalik ang aktibong landing payload, kabilang ang mga kinakailangan sa pag-activate at mga nakagrupong item kapag available.
  • POST /api/trackables/active/{trackableId}/message ina-update ang naaalalang teksto ng katayuan.
  • DELETE /api/trackables/active/{trackableId} tinatapos ang naaalalang secret-code session sa client na iyon.

Ang mga lihim na paghahanap ng code at pag-scan-only sa QR na mga pagbisita ay lumikha ng isang aktibong session ng kliyente sa halip na ibalik ang lihim na halaga. Ang aktibong session na iyon ang nagbibigay-daan sa mga daloy ng tala sa ibang pagkakataon na ilakip ang nasusubaybayan nang hindi muling ipinapasok ang code.

Kapag na-authenticate ang tumatawag, ang kaparehong Visible Once Accessed lookup ay nagli-link din sa nasusubaybayan sa account na iyon upang ang mga naka-sign in na device sa ibang pagkakataon ay maaaring muling buksan ang trackable, pahina ng pangkat nito, at normal na mga follow-up na ruta nang hindi muling ipinapasok ang lihim.

Ang website ay sadyang gumagamit ng parehong direktang entry base na ruta para sa lahat ng tatlong form: /trackable/{publicCode}, /trackable/{secretCode}, at /trackable/{qrToken}.

Ang naka-localize na ruta ng /{lang}/trackable/{code} ay ang na-render na solong-item na landing pagkatapos ng awtomatikong pagpili ng wika, ngunit hindi pa rin ito dapat ipakita bilang naibabahagi o naka-print na URL.

Pagkatapos malutas ang isang pampublikong-code lookup, ang nai-render na pampublikong pahina ay makikita sa /{lang}/trackable/{publicCode}.

Ang ibinahaging ruta ng pagpasok ay mananatiling wasto kahit na magbago ang mga naka-configure na haba ng short-code sa ibang pagkakataon, dahil niresolba ng server ang halaga ng code sa halip na depende sa mga variation ng path ng website na na-hardcode.

Sinasadyang hindi bahagi ng pampublikong URL na sistema ang mga rutang nasusubaybayan ng website na nasasakupan ng may-ari.

Nalalapat din ang pagkakaibang iyon sa mga pahina ng tala: ang isang pampublikong code ay para sa pagbubukas ng pampublikong pahina na nasusubaybayan, habang ang attachment ng tala ay umaasa ng isang umiiral nang maikling sikretong code o isang aktibong session ng browser.

GET /api/trackables/lookup?code=LN4C8R2Z
{
  "found": true,
  "trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
  "isPublicCodeMatch": false,
  "usesSecretAccess": true,
  "redirectUrl": "/en-US/trackables/active/f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31"
}
GET /trackable/LN-7K4V9T
GET /en-US/trackables/LN-7K4V9T
GET /trackable/ABCD...<100 characters total>...

I-activate sa sarili o team

POST /api/trackables/{trackableId}/activate Tagadala
{
  "name": "",
  "description": "",
  "useGroupDefaultTitle": true,
  "useGroupDefaultDescription": true,
  "externalLinkUrl": "",
  "externalLinkDescription": "",
  "useGroupDefaultExternalLink": true,
  "teamId": "optional-team-guid"
}

Kung ibibigay ang teamId, magiging pagmamay-ari ng team ang trackable, mapapamahalaan ito ng mga admin ng team, at patuloy na makontrol ng nag-a-activate na miyembro habang nananatili sila sa team na iyon. Kung walang teamId, magiging personal na pagmamay-ari ang trackable.

Kapag na-activate ang isang nakapangkat na item, maaaring mag-save ang may-ari ng isang tahasang pamagat at paglalarawan ng item o sadyang kopyahin ang kasalukuyang default na pamagat at paglalarawan ng pangkat sa item.

Tanggalin at muling ikabit ang mga pangkat

  • DELETE /api/trackables/{trackableId}/group inaalis ang kasalukuyang samahan ng grupo.
  • POST /api/trackables/{trackableId}/group kasama { "trackableGroupId": "..." } iniuugnay ang isang hiwalay na nasusubaybayan sa isang bagong pangkat.
  • POST /api/trackables/groups/{trackableGroupId}/watch nagsisimulang subaybayan ang mga nakikitang miyembro ng grupo. Ang mga kasalukuyang member-item na relo mula sa parehong pangkat na iyon ay maaari pa ring bumagsak sa pangkat na relo, at ang overlap ng may-ari o relo ay na-deduplicate bawat user.
  • DELETE /api/trackables/groups/{trackableGroupId}/watch huminto sa pagsubaybay sa grupo.

Ang isang trackable ay maaari lamang mapabilang sa isang grupo sa bawat pagkakataon. Ipinapatupad ng server ang panuntunang detach-first. Ang orihinal na activator lang ang makakapag-attach muli ng isang hiwalay na trackable, at ang patutunguhang pangkat ay dapat ding kontrolin ng user na iyon o ng isang karapat-dapat na admin ng team.

{
  "trackableGroupId": "4bdffcab-bb51-4fd8-8c15-59f7b2d72c3f"
}

Mga nasusubaybayang komento

  • GET /api/trackables/{trackableId}/comments
  • POST /api/trackables/{trackableId}/comments
  • PUT /api/trackables/{trackableId}/comments/{commentId}
  • DELETE /api/trackables/{trackableId}/comments/{commentId}

Ang mga hindi na-activate na trackable ay hindi makakatanggap ng mga komento o mga paghinto sa paglalakbay.

Maaaring direktang mag-post ng mga komento ang mga napatotohanang user. Ang mga anonymous na tumatawag ay maaari ding mag-post, ngunit ang bawat anonymous na pagsusulat ay dapat magmula sa aktibong trackable session ng browser na iyon o muling ipadala ang eksaktong maikling secret code o pribadong QR token para sa partikular na trackable na iyon.

Tanging ang naka-sign-in na may-akda ng komento ang maaaring mag-edit ng kanilang sariling komento. Ang mga masusubaybayang may-ari at kasalukuyang admin ng team ay maaaring magtanggal ng mga komento o mga paghinto ng paglalakbay, ngunit hindi pa rin nila maisusulat na muli ang mga salita ng ibang tao.

{
  "body": "Starting the route now.",
  "accessCode": "LN4C8R2Z"
}

Direktang paghinto ng paglalakbay

Ang journey feed ay isa na ngayong hindi nababagong kasaysayan ng paghinto. Pinipigilan ng note-backed na snapshot ang lokasyon kapag naka-attach ang tala, at maaaring i-save ang mga direktang ulat sa mapa nang hindi muna gumagawa ng tala.

Kung lumilipat sa ibang coordinate ang isang naka-link na tala sa ibang pagkakataon, pinapanatili pa rin ng trackable na paglalakbay ang orihinal na snapped stop upang hindi tahimik na muling isulat ang kasaysayan ng logistik sa sarili nito.

Sinusunod ng mga anonymous na direktang ulat ang parehong panuntunan gaya ng mga anonymous na komento: dapat gamitin ng tumatawag ang aktibong trackable session ng browser na iyon o muling ipadala ang maikling secret code o pribadong QR token sa kahilingan sa pagsulat.

{
  "latitude": 41.8819,
  "longitude": -87.6278,
  "accessCode": "LN4C8R2Z"
}

GET /api/trackables/{trackableId}/journey nagbabalik ng label-first place facts. Ang bawat punto ay nagdadala ng coordinateId, locationLabel, at currentNotesAtCoordinate upang maipakita ng mga kliyente ang kasalukuyang nakikitang tala sa coordinate na iyon nang hindi tinatrato ang stop na parang nagmamay-ari ito ng isang naka-save na tala.

Hindi na hinahati ng mga tugon sa paglalakbay ang kontrata sa labas sa lungsod, estadoOLalawigan, at bansa. Basahin na lang ang locationLabel kasama ang mga coordinate.

[
  {
    "journeyStopId": "8a274ad6-5dd4-45c4-969a-c13cc1b8d92c",
    "coordinateId": "565c42dd-2e12-49b4-a16b-c89ff4502b8e",
    "latitude": 41.8819,
    "longitude": -87.6278,
    "associatedUtc": "2026-04-05T18:30:00Z",
    "isLocationOnly": false,
    "isAnonymous": false,
    "canDelete": false,
    "canConvertToNote": false,
    "locationLabel": "Chicago, Illinois, United States",
    "creatorDisplayText": "Jordan",
    "creatorProfileUserName": "jordan",
    "currentNotesAtCoordinate": [
      {
        "noteId": "4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3",
        "title": "Lobby drop",
        "contentLanguage": "en-US",
        "thumbnailUrl": "/api/images/notes/4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3/thumbnail"
      }
    ]
  }
]

Visibility at pagsisiwalat ng paglalakbay

Maaaring magpakita ang mga nasusubaybayang pahina ng paglalakbay ng mga nakamapang lokasyon kahit na pribado ang ilang pinagbabatayan na tala. Sa mga sitwasyong iyon, matatanggap ng mga hindi awtorisadong manonood ang punto ng lokasyon ngunit hindi ang protektadong nilalaman ng tala.

Ang mga awtorisadong manonood ay tumatanggap ng pamagat ng tala, paglalarawan, at link ng tala nang direkta mula sa na-preload na payload ng paglalakbay at mga popup ng pin ng mapa.

Pagtanggal at pagpapanatili

Ang pagtanggal ng isang account ay hindi awtomatikong nagtatanggal ng bawat trackable na account na hinawakan kailanman. Maaaring manatili ang mga trackable na ibinahagi o pagmamay-ari ng team habang ang naaalis lang na personal na aktibidad ng natanggal na user ang inaalis.

Suriin ang pahina ng Tanggalin ang Data at ang seksyong API na tanggalin ang account para sa kasalukuyang mga hangganan ng pagpapanatili.

Mga nasusubaybayang gabay sa daloy

Ang nasusubaybayang API ay parehong may ganap na naka-sign-in na workflow ng pagmamay-ari at isang mas magaan na anonymous na sikretong-backed na daloy ng pag-uulat. Gamitin ang mga nakalaang pahina sa ibaba kapag kailangan mo ng ordered call sequence, decision point, at copy-paste na mga halimbawa sa halip na isang catalog ng ruta.

Napatunayang daloy

Mula sa paghahanap ng nahanap na item sa pamamagitan ng lihim na pag-access sa browser, pag-sign in, pag-activate, pag-link ng tala, direktang pag-log sa paglalakbay, pag-moderate, at mga pagsasaalang-alang sa pag-export/pagtanggal.

Buksan ang authenticated trackable na gabay sa daloy ng API

Anonymous na daloy

Para sa mga tumatawag na hindi magsa-sign in ngunit may eksaktong sikretong code o pribadong QR token at kailangang mag-post ng direktang ulat sa lokasyon o magkomento nang ligtas.

Buksan ang anonymous na trackable na gabay sa daloy ng API

Error sa paghahanap

Kasama na ngayon sa mga nasusubaybayang tugon sa mga detalye ng problema ang isang stable na field ng code na nababasa ng machine. Gamitin ang pahina ng sangguniang error upang imapa ang mga pagkabigo sa mga malamang na sanhi at pag-aayos.

Buksan ang nasusubaybayang API error reference

Mga endpoint ng larawan

Palaging sumusunod ang visibility ng larawan sa pangunahing item. Kung mabubuksan ng tumatawag ang nakakonektang profile, tala, team, trackable, o trackable-group page, mabubuksan din ng tumatawag ang mga larawan nito. Kung ang pangunahing item ay hindi naa-access, ang listahan ng larawan ay nagbabasa na hindi ibinalik ang mga item at ang direktang pag-download ng imahe ay nagbabalik ng 404.

Dapat ding tandaan ng mga kliyente na ang mga pag-upload ay sini-screen bago i-save, ang mga orihinal ay hindi pinapanatili, at ang server ay nag-iimbak lamang ng mga resize na JPEG na variant. Parehong ginagamit ng website at Android app ang parehong mga kontrata at ruta ng file ng API na ito.

Maglista ng mga larawan ayon sa magulang

GET /api/images/profiles/{userId} Anonymous o Tagadala
GET /api/images/notes/{noteId} Anonymous o Tagadala
GET /api/images/teams/{teamId} Anonymous o Tagadala
GET /api/images/trackables/{trackableId} Anonymous o Tagadala
GET /api/images/trackable-groups/{trackableGroupId} Anonymous o Tagadala

Gamitin ang mga babasahin na ito upang punan ang mga gallery. Kasama sa bawat item ang GUID ng larawan, mga orihinal na dimensyon, at ang mga kaugnay na URL para sa thumbnail, maliit, katamtaman, at malalaking nakaimbak na mga kopya.

inilalarawan ng originalWidth at originalHeight ang na-upload na pinagmulang larawan para sa sanggunian. Ang aktwal na nada-download na mga file ay ang mga naka-resize na variant pa rin na naka-link ng thumbnailUrl, smallUrl, mediumUrl, at largeUrl.

curl "https://locationnotes.com/api/images/notes/4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3"
[
  {
    "contentImageId": "f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1",
    "targetType": 1,
    "noteId": "4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3",
    "originalWidth": 1600,
    "originalHeight": 1200,
    "createdUtc": "2026-03-18T21:15:00Z",
    "thumbnailUrl": "/Images/Thumbnail/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-64.jpg",
    "smallUrl": "/Images/Small/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-306.jpg",
    "mediumUrl": "/Images/Medium/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-612.jpg",
    "largeUrl": "/Images/Large/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-1024.jpg"
  }
]

I-download ang mga nakaimbak na byte

GET /api/images/{contentImageId}/{variant} Anonymous o Tagadala

Ang mga wastong value ng variant ay thumbnail, maliit, katamtaman, at malaki. Ang mga tugon ay nagbabalik ng larawan/jpeg.

Ang mga URL ng file ng website sa ilalim ng /Images/{Variant}/{guid}-{size}.jpg ay nagpapatupad ng parehong panuntunan sa pagiging visible ng magulang bago ihatid ang mga byte ng larawan, kaya ang mga direktang link ng larawan ay protektado pa rin ng mga pahintulot ng konektadong profile, tala, koponan, nasusubaybayan, o nasusubaybayan-grupo.

curl -L "https://locationnotes.com/api/images/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1/large" --output note-large.jpg

Mag-upload ng mga larawan

POST /api/images/profiles Tagadala
POST /api/images/notes/{noteId} Tagadala
POST /api/images/teams/{teamId} Tagadala
POST /api/images/trackables/{trackableId} Tagadala
POST /api/images/trackable-groups/{trackableGroupId} Tagadala

Magpadala ng isang multipart file field na pinangalanang file. Dapat ay mayroon nang pahintulot sa pamamahala ng magulang ang tumatawag para sa target, na nangangahulugang access ng admin ng koponan para sa mga page ng koponan at ang normal na pahintulot sa pag-edit/pamamahala para sa iba pang mga uri ng magulang. Ang mga pag-upload ay sini-screen bago i-save, pagkatapos ay iniimbak bilang mga binagong JPEG na kopya lamang.

curl -X POST "https://locationnotes.com/api/images/trackables/721f5205-ed2c-43e8-8ecd-1502d5bb7b56" \
  -H "Authorization: Bearer <access token>" \
  -F "file=@tracker.jpg"
{
  "image": {
    "contentImageId": "f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1",
    "targetType": 3,
    "trackableId": "721f5205-ed2c-43e8-8ecd-1502d5bb7b56",
    "originalWidth": 1600,
    "originalHeight": 1200,
    "createdUtc": "2026-03-18T21:15:00Z",
    "thumbnailUrl": "/Images/Thumbnail/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-64.jpg",
    "smallUrl": "/Images/Small/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-306.jpg",
    "mediumUrl": "/Images/Medium/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-612.jpg",
    "largeUrl": "/Images/Large/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-1024.jpg"
  }
}

Tanggalin ang mga larawan

DELETE /api/images/{contentImageId} Tagadala

Ang pagtanggal ay nangangailangan ng parehong pahintulot sa pamamahala ng magulang na kinakailangan sa pag-upload. Kapag nagtagumpay ang isang pagtanggal, ang row ng content-image at lahat ng naka-store na variant ay aalisin nang magkasama.

Dapat ipadala ng mga kliyente ng API ang HTTP DELETE verb dito. Ang pagbubukas ng URL na ito nang direkta sa isang browser address bar ay nagpapadala ng GET sa halip, na nagbabalik ng 405 Method Not Allowed dahil ang rutang ito ay hindi isang download page.

Ginagamit ng mga button sa pagtanggal ng website ang naka-localize na ruta ng form ng website sa /{culture}/images/{contentImageId}/delete kaya ang mga browser gallery ay nagtatanggal ng proteksyon laban sa pamemeke.

curl -X DELETE "https://locationnotes.com/api/images/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1" \
  -H "Authorization: Bearer <access token>"

Ano ang isang Imahe? ipinapaliwanag ang visibility, moderation, pag-uulat, pagbabago ng laki, pag-export, at mga panuntunan sa pagtanggal sa likod ng mga rutang ito.

Pag-uulat ng pagsunod

Gamitin ang mga rutang ito para sa mga ulat ng hindi naaangkop na nilalaman, mga sinusubaybayang error sa system, at parehong mga talaan ng tiket ng suporta na sumusuporta sa daloy ng kahilingan sa suporta sa website. Maaaring magsumite ng mga ulat ang mga hindi kilalang tumatawag, ngunit ang mga naka-sign-in na reporter lang ang makakasubaybay sa mga update sa status at mga resolusyon ng super-admin sa pamamagitan ng API.

Magsumite ng ulat

POST /api/compliance/reports Anonymous o Tagadala

Kung ang tumatawag ay na-authenticate sa pamamagitan ng cookie ng website o may dalang token, ang ginawang ulat ay naka-attach sa account na iyon upang lumabas ito sa ilalim ng GET /api/compliance/reports/mine.

{
  "pageType": 2,
  "contentType": 5,
  "pageTitle": "Reported note title",
  "pageUrl": "/en-US/Note/2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a#note-page-title",
  "pageReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a",
  "contentLabel": "Note Page title and content",
  "contentReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a:page-content",
  "contentPreview": "Title: Reported note title\n\nContent: Reported note body",
  "reportTitle": "Needs review",
  "reportExplanation": "This title is not appropriate for a public note."
}

Subaybayan ang isang API ticket o mag-ulat ng error sa app

POST /api/compliance/errors Anonymous o Tagadala

Kung nabigo na ang isang API na ruta na may hindi inaasahang 500 at nagbalik ng ticketNumber sa mga detalye ng problema JSON, i-post ang ticket na iyon dito sa halip na gumawa ng pangalawang error log row. Isama ang UserExplanation at itakda ang trackInSupportTickets kapag gusto ng tumatawag ng super-admin na follow-up.

{
  "ticketNumber": "ERR-1M7Q4D9K2X5R8V6N",
  "userExplanation": "Android app hit this right after I tapped refresh twice.",
  "trackInSupportTickets": true,
  "clientContext": {
    "platform": "Android",
    "screen": "My Journeys",
    "appVersion": "1.0.0-beta.20260318.1"
  }
}

Kapag nangyari ang kabiguan sa loob lang ng Android app at wala pang server ticket, gumawa ng bagong error ticket na may marker na naglalarawan kung nasaan ang app.

{
  "pageMarkerType": "Android screen",
  "pageMarker": "My Journeys",
  "requestCulture": "en-US",
  "requestUrl": "https://locationnotes.com/api/trackables/active/721f5205-ed2c-43e8-8ecd-1502d5bb7b56?includeHistory=true",
  "httpMethod": "GET",
  "responseStatusCode": 503,
  "exceptionType": "Java.Lang.IllegalStateException",
  "exceptionMessage": "Journey list render failed.",
  "stackTrace": "at com.locationnotes.trackables.MyJourneysFragment.render(MyJourneysFragment.kt:42)",
  "userExplanation": "This happened right after scanning a QR code.",
  "trackInSupportTickets": true,
  "clientContext": {
    "platform": "Android",
    "deviceModel": "Pixel 9",
    "osVersion": "Android 17",
    "appVersion": "1.0.0-beta.20260318.1"
  }
}
{
  "ticketNumber": "ERR-1M7Q4D9K2X5R8V6N",
  "usedExistingTicket": false,
  "explanationSaved": true,
  "trackedInSupportTickets": true,
  "trackedContentReportId": "d91f6e1c-b8e2-4e38-9e96-f2de0cc4f0e2"
}

Gumamit ng mga value ng pageMarkerType gaya ng URL, Android screen, o Android background task. Para sa mga ticket na binuo ng server, panatilihin ang orihinal na URL marker at ipadala ang ibinalik na ticketNumber dito upang ang naka-log na API URL ay manatiling nakadikit sa parehong tiket.

Nabasa ang status ng reporter

GET /api/compliance/reports/mine Tagadala
GET /api/compliance/reports/{contentReportId} Tagadala

Ang mga rutang ito ay nagbabalik lamang ng sariling mga ulat ng tumatawag maliban kung ang tumatawag ay isang super-admin. Gamitin ang mga ito upang ipakita ang Naiulat, Pagsusuri, o Nalutas kasama ang anumang tala ng huling resolusyon para sa parehong mga ulat sa nilalaman at mga sinusubaybayang error sa system.

{
  "contentReportId": "3ab419ab-4b71-4d43-b52c-303d6039f01f",
  "reporterUserId": "6d650c55-b235-4370-8572-e4b772cd1aea",
  "pageType": 2,
  "pageTypeLabel": "Note Page",
  "contentType": 5,
  "contentTypeLabel": "Title and content",
  "status": 2,
  "statusLabel": "Resolved",
  "pageTitle": "Reported note title",
  "pageUrl": "/en-US/Note/2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a#note-page-title",
  "pageReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a",
  "contentLabel": "Note Page title and content",
  "contentReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a:page-content",
  "contentPreview": "Title: Reported note title\n\nContent: Reported note body",
  "reportTitle": "Needs review",
  "reportExplanation": "This title is not appropriate for a public note.",
  "resolutionText": "Reviewed and recorded for moderation follow-up.",
  "reporterDisplayName": "site-compliance-reporter",
  "reviewerDisplayName": "site-compliance-admin",
  "createdUtc": "2026-03-18T18:00:00Z",
  "reviewedUtc": "2026-03-18T18:10:00Z"
}

Super-admin na pagsusuri

GET /api/compliance/reports Tagadala + SuperAdmin
PUT /api/compliance/reports/{contentReportId} Tagadala + SuperAdmin

Kasama sa listahan ng admin ang link ng ulat, metadata ng page, metadata ng nakakasakit na nilalaman, pagkakakilanlan ng reporter kapag available, at anumang nakaraang tala sa pagsusuri. Isinulat ng mga update ang kasalukuyang estado ng pagsusuri at text ng nakikitang resolution.

{
  "status": 1,
  "resolutionText": "Review opened and queued for follow-up."
}

Itakda ang status sa 2 at isama ang isang hindi walang laman na resolutionText kapag isinasara ang isang ulat bilang nalutas.

Mga halaga ng enum

  • pageType: 0 pahina ng profile, 1 pahina ng pangkat, 2 pahina ng tala, 3 nasusubaybayan na pahina, 4 masusubaybayang pahina ng pangkat, 5 error sa system, 6 pahina ng suporta
  • contentType: 0 pamagat, 1 paglalarawan, 2 komento, 3 katawan, 4 talambuhay, 5 pamagat at nilalaman, 6 mga detalye ng error, 7 larawan, 8 kahilingan sa suporta
  • status: 0 iniulat, 1 nagrereview, 2 naresolba

Gumagamit na ngayon ang mga ulat sa antas ng pahina ng website ng 5 upang masakop ng isang button ng ulat ang parehong nakikitang pamagat at ang nakikitang paglalarawan/katawan nang magkasama. Ginagamit pa rin ng mga ulat sa antas ng komento ang mga uri ng content na tukoy sa komento.

Ang mga kahilingan sa pangkalahatang suporta sa website ay gumagawa ng Pahina ng Suporta kasama ang mga tiket sa paghiling ng Suporta sa pamamagitan ng parehong COMPLIANCE.ContentReports store, kahit na ginagamit ng form ng browser ang page ng Suporta sa halip na ang raw na rutang ito ng API.

Ang sinusubaybayang website, API, at mga error sa Android app ay iniimbak sa LOG.Errors. Kapag naka-enable ang trackInSupportTickets, lalabas din ang naka-link na ticket ng suporta sa COMPLIANCE.ContentReports kaya sinusunod ng super-admin review at reporter status ang parehong workflow.

System at beta metadata

GET /api/system/status Hindi nakikilala

Gamitin ito para sa mga pagsusuri sa kalusugan, Android compatibility gating, ang kasalukuyang beta-page na URL, at ang naresolbang estado ng mapa/privacy para sa kasalukuyang kahilingan.

GET /api/system/beta-android Hindi nakikilala

Ibinabalik ang naka-stage na Android beta metadata, kasama ang display version, version code, minimum compatible na bersyon, at release note.

GET /api/system/ip-location Hindi nakikilala

Ibinabalik ang pinakamahusay na pagsisikap na IP-based na lokasyon ng kasalukuyang kahilingan para sa pagsentro ng mapa at pag-troubleshoot. Kapag ang client IP ay pribado, lokal, o kung hindi man ay hindi pinagkakatiwalaan, ang tugon ay mananatiling HTTP 200 at ipinapaliwanag ang kabiguan sa failureReason sa halip na maghagis ng error sa transportasyon.

GET /api/system/coordinate-locality Hindi nakikilala

Reverse-geocodes ang isang pares ng latitude/longitude sa mga label ng lungsod, estado/lalawigan, at bansa para sa mga daloy ng stop-planner at pagpili ng mapa. Ang mga di-wastong coordinate ay nagbabalik ng isang hindi ibinabato na payload na may resolved=false at failureReason=invalid-coordinates.

  • requestedExperienceMode versus effectiveExperienceMode ay nagsasabi sa iyo kung ang naka-sign-in na kagustuhan ay nakaligtas sa mga panuntunan sa privacy sa oras ng kahilingan o pinilit na ibaba sa no_3rd_parties.
  • requestedMapSource, preferredMapSource, at fallbackMapSource sabihin sa iyo kung aling provider ang hiningi ng user, aling provider ang gustong subukan muna ng server, at aling provider ang susunod na mag-load kung nabigo ang gustong source.
  • sasabihin sa iyo ng thirdPartyBrowserCallsAllowed, googleMapsAllowed, at openStreetMapAllowed kung ang kahilingang ito ay maaaring tumawag sa mga provider sa gilid ng browser.
  • hostedMapsForcedByPrivacy at hostedMapTileUrlTemplate ay nagsasabi sa iyo kapag ang kahilingan ay pinilit sa parehong pinagmulan na naka-host na mga tile, na kasalukuyang nagre-render sa pamamagitan ng /maps/tiles/{z}/{x}/{y}.png.

Ang pribadong network, local-network, at kung hindi man ay hindi naresolba na mga kahilingan sa IP ay sadyang tumahak sa mas mahigpit na landas, kaya ang isang localhost o office-network na pagsubok ay maaaring lehitimong magpakita ng no_3rd_parties at hosted_maps kahit na iba ang kagustuhan sa naka-sign in.

curl "https://locationnotes.com/api/system/status"
{
  "status": "online",
  "utcNow": "2026-03-13T21:15:00Z",
  "androidMinimumCompatibleDisplayVersion": "1.0.0-beta.20260313.2",
  "androidMinimumCompatibleVersionCode": "2026031302",
  "androidCompatibilityMessage": "The API changed after older beta builds were published. Update to the latest beta before syncing or using live team management.",
  "androidBetaPageUrl": "https://locationnotes.com/fil-PH/account/beta",
  "requestedExperienceMode": "latest_and_greatest",
  "effectiveExperienceMode": "no_3rd_parties",
  "usesSavedExperienceModePreference": false,
  "usesVisitorExperienceModePreferenceCookie": false,
  "thirdPartyBrowserCallsAllowed": false,
  "requestedMapSource": "openstreetmap",
  "preferredMapSource": "hosted_maps",
  "fallbackMapSource": "hosted_maps",
  "usesSavedMapPreference": false,
  "usesVisitorMapPreferenceCookie": false,
  "googleMapsAllowed": false,
  "googleMapsConfigured": false,
  "openStreetMapAllowed": false,
  "openStreetMapConfigured": true,
  "hostedMapsConfigured": true,
  "hostedMapsForcedByPrivacy": true,
  "hostedMapTileUrlTemplate": "/maps/tiles/{z}/{x}/{y}.png"
}
curl "https://locationnotes.com/api/system/ip-location"
{
  "resolved": true,
  "clientIpAddress": "50.77.187.28",
  "lookupIpAddress": "50.77.187.28",
  "usedDevelopmentFallbackIp": false,
  "sourceKind": "IpAddress",
  "coordinateSourceProvider": "IpInfoDb",
  "localitySourceProvider": "IpInfoDb",
  "latitude": 41.8758,
  "longitude": -87.6206,
  "city": "Chicago",
  "stateOrProvince": "Illinois",
  "country": "United States of America",
  "isApproximate": true,
  "accuracyRadiusKm": null,
  "failureReason": ""
}
curl "https://locationnotes.com/api/system/coordinate-locality?latitude=41.8818&longitude=-87.6231"
{
  "resolved": true,
  "sourceKind": "Coordinates",
  "coordinateSourceProvider": "StopPlanner",
  "localitySourceProvider": "HostedMapPostGIS",
  "latitude": 41.8818,
  "longitude": -87.6231,
  "city": "Chicago",
  "stateOrProvince": "Illinois",
  "country": "United States",
  "isApproximate": false,
  "accuracyRadiusKm": null,
  "failureReason": ""
}

Kumpletuhin ang imbentaryo ng ruta

Ang seksyong ito ay ang kumpletong checklist ng verb-and-path para sa kasalukuyang LocationNotes API surface, kabilang ang mga ruta ng pagkakakilanlan na pinamamahalaan ng framework sa ilalim ng /api/auth. Ipinapaliwanag ng mga detalyadong seksyon sa itaas ang mga pangunahing daloy ng trabaho; ang imbentaryo na ito ang pinagmumulan ng katotohanan sa antas ng ruta na dapat manatiling nakahanay sa live na talahanayan ng endpoint.

Pagpapatunay ng pagkakakilanlan at seguridad ng account

  • POST /api/auth/register Hindi nakikilala
  • POST /api/auth/login Hindi nakikilala
  • POST /api/auth/refresh Hindi nakikilala
  • GET /api/auth/confirmEmail Hindi nakikilala
  • POST /api/auth/resendConfirmationEmail Hindi nakikilala
  • POST /api/auth/forgotPassword Hindi nakikilala
  • POST /api/auth/resetPassword Hindi nakikilala
  • GET /api/auth/manage/info Tagadala
  • POST /api/auth/manage/info Tagadala
  • POST /api/auth/manage/2fa Tagadala

Account, system, sync, at mga panlabas na link

  • DELETE /api/account Tagadala
  • GET /api/system/status Hindi nakikilala
  • GET /api/system/beta-android Hindi nakikilala
  • GET /api/system/ip-location Hindi nakikilala
  • GET /api/system/coordinate-locality Hindi nakikilala
  • POST /api/sync/push Tagadala
  • POST /api/sync/pull Tagadala
  • POST /api/external-links/verify Tagadala

Mga tala at pampublikong pahina ng tala

  • GET /api/notes/public/bounds Hindi nakikilala
  • GET /api/notes/public/nearby Hindi nakikilala
  • GET /api/notes/mine Tagadala
  • POST /api/notes/mine Tagadala
  • GET /api/notes/mine/gpx Tagadala
  • POST /api/notes/mine/gpx Tagadala
  • POST /api/notes/mine/{noteId}/move Tagadala
  • DELETE /api/notes/mine/{noteId} Tagadala
  • GET /api/public/profiles/{userName}/notes/nearby Anonymous o Tagadala
  • GET /api/public/teams/{teamName}/notes/nearby Anonymous o Tagadala
  • GET /api/public/notes/{noteId} Anonymous o Tagadala
  • GET /api/public/notes/{noteId}/comments Anonymous o Tagadala
  • POST /api/public/notes/{noteId}/comments Tagadala
  • GET /api/public/notes/{noteId}/trackables Anonymous o Tagadala
  • POST /api/public/notes/{noteId}/trackables Tagadala

Mga kategorya at workspace tree

  • GET /api/categories/mine Tagadala
  • GET /api/categories/mine/tree Tagadala
  • GET /api/categories/mine/tree/sections Tagadala
  • GET /api/categories/mine/tree/children Tagadala
  • POST /api/categories/mine Tagadala
  • POST /api/categories/mine/{categoryId}/move Tagadala
  • DELETE /api/categories/mine/{categoryId} Tagadala

Mga team, membership, at link ng imbitasyon

  • GET /api/teams Tagadala
  • POST /api/teams Tagadala
  • PUT /api/teams/{teamId}/settings Tagadala
  • GET /api/teams/{teamId}/notes Tagadala
  • GET /api/teams/{teamId}/notes/gpx Tagadala
  • DELETE /api/teams/{teamId}/notes/{noteId} Tagadala
  • POST /api/teams/{teamId}/notes Tagadala
  • POST /api/teams/{teamId}/notes/gpx Tagadala
  • POST /api/teams/{teamId}/notes/{noteId}/move Tagadala
  • DELETE /api/teams/{teamId}/notes/{noteId}/delete Tagadala
  • GET /api/teams/{teamId}/categories Tagadala
  • GET /api/teams/{teamId}/categories/tree Tagadala
  • GET /api/teams/{teamId}/categories/tree/sections Tagadala
  • GET /api/teams/{teamId}/categories/tree/children Tagadala
  • POST /api/teams/{teamId}/categories Tagadala
  • POST /api/teams/{teamId}/categories/{categoryId}/move Tagadala
  • DELETE /api/teams/{teamId}/categories/{categoryId} Tagadala
  • POST /api/teams/{teamId}/memberships/request Tagadala
  • POST /api/teams/{teamId}/memberships/invite Tagadala
  • POST /api/teams/{teamId}/memberships/{membershipId}/accept Tagadala
  • POST /api/teams/{teamId}/memberships/{membershipId}/refuse Tagadala
  • POST /api/teams/{teamId}/memberships/{membershipId}/approve Tagadala
  • POST /api/teams/{teamId}/memberships/{membershipId}/deny Tagadala
  • POST /api/teams/{teamId}/memberships/{membershipId}/promote-admin Tagadala
  • DELETE /api/teams/{teamId}/memberships/{membershipId} Tagadala
  • GET /api/teams/{teamId}/invite-links Tagadala
  • POST /api/teams/{teamId}/invite-links Tagadala
  • DELETE /api/teams/{teamId}/invite-links/{inviteLinkId} Tagadala
  • POST /api/teams/invite-links/{teamSlug}/{inviteCode}/join Tagadala
  • DELETE /api/teams/{teamId} Tagadala

Mga nasusubaybayan at aktibong sesyon na sinusuportahan ng lihim

  • GET /api/trackables/public Anonymous o Tagadala
  • GET /api/trackables/mine Tagadala
  • GET /api/trackables/{trackableId} Anonymous o Tagadala
  • GET /api/trackables/{trackableId}/journey Anonymous o Tagadala
  • POST /api/trackables Tagadala
  • POST /api/trackables/groups Tagadala
  • POST /api/trackables/{trackableId}/activate Tagadala
  • POST /api/trackables/{trackableId}/watch Tagadala
  • DELETE /api/trackables/{trackableId}/watch Tagadala
  • DELETE /api/trackables/{trackableId}/group Tagadala
  • POST /api/trackables/{trackableId}/group Tagadala
  • POST /api/trackables/groups/{trackableGroupId}/watch Tagadala
  • DELETE /api/trackables/groups/{trackableGroupId}/watch Tagadala
  • GET /api/trackables/lookup Hindi nakikilala
  • POST /api/trackables/lookup Hindi nakikilala
  • GET /api/trackables/active Hindi nakikilala
  • GET /api/trackables/active/{trackableId} Hindi nakikilala
  • POST /api/trackables/active/{trackableId}/message Hindi nakikilala
  • DELETE /api/trackables/active/{trackableId} Hindi nakikilala
  • GET /api/trackables/{trackableId}/comments Anonymous o Tagadala
  • POST /api/trackables/{trackableId}/comments Anonymous o Tagadala
  • PUT /api/trackables/{trackableId}/comments/{commentId} Tagadala
  • DELETE /api/trackables/{trackableId}/comments/{commentId} Tagadala
  • POST /api/trackables/{trackableId}/journey-stops Anonymous o Tagadala
  • DELETE /api/trackables/{trackableId}/journey-stops/{journeyStopId} Tagadala

Mga larawan at pagsunod

  • GET /api/images/profiles/{userId} Anonymous o Tagadala
  • GET /api/images/notes/{noteId} Anonymous o Tagadala
  • GET /api/images/teams/{teamId} Anonymous o Tagadala
  • GET /api/images/trackables/{trackableId} Anonymous o Tagadala
  • GET /api/images/trackable-groups/{trackableGroupId} Anonymous o Tagadala
  • GET /api/images/{contentImageId}/{variant} Anonymous o Tagadala
  • POST /api/images/profiles Tagadala
  • POST /api/images/notes/{noteId} Tagadala
  • POST /api/images/teams/{teamId} Tagadala
  • POST /api/images/trackables/{trackableId} Tagadala
  • POST /api/images/trackable-groups/{trackableGroupId} Tagadala
  • DELETE /api/images/{contentImageId} Tagadala
  • POST /api/compliance/reports Anonymous o Tagadala
  • POST /api/compliance/errors Anonymous o Tagadala
  • GET /api/compliance/reports/mine Tagadala
  • GET /api/compliance/reports/{contentReportId} Tagadala
  • GET /api/compliance/reports Tagadala + SuperAdmin
  • PUT /api/compliance/reports/{contentReportId} Tagadala + SuperAdmin

Tanggalin ang account mula sa API

Maaaring permanenteng tanggalin ng mga na-authenticate na kliyente ang kasalukuyang account at naka-sync ng personal na data sa pamamagitan ng API. Basahin ang Tanggalin ang Data page muna kung kailangan mo ng buong panuntunan sa pagpapanatili para sa data at pag-export na pagmamay-ari ng team.

Ang nasusubaybayang paglilinis ay hindi lahat-o-wala. Inaalis ng server ang personal na nasusubaybayang aktibidad ng tinanggal na user kung saan maaari, ngunit hindi nito inaalis ang mga nakabahaging trackable, mga trackable na pagmamay-ari ng team, o kasaysayan ng ibang mga user dahil lang sa natanggal ang isang account. Kung mahalaga pa rin sa team ang trackable na pagmamay-ari ng team, mananatili ito sa team na iyon. Kung naka-attach pa rin sa isang trackable ang aktibidad ng ibang tao, mananatili sa system ang trackable na iyon.

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

Mga error at detalye ng problema

Ang mga pagkabigo sa pagpapatunay, pahintulot, at paghahanap ay nagbabalik ng mga karaniwang HTTP status code. Maraming mga ruta ng workspace ang nagbabalik ng RFC 7807 style na mga detalye ng problema JSON na may pamagat, detalye, at status.

{
  "title": "Forbidden",
  "code": "trackable_access_code_required",
  "detail": "Sign in, keep this trackable active on this browser, or provide this trackable's secret code or QR access code before posting comments or location reports.",
  "status": 403
}
  • 400 para sa pagpapatunay o pagtanggi sa panuntunan ng negosyo
  • 401 para sa nawawala o di-wastong pagpapatunay
  • 403 para sa mga napatunayang user na walang access
  • 404 para sa mga nawawalang tala, kategorya, koponan, membership, o link ng imbitasyon

Ang mga nasusubaybayang ruta ng pagsulat ay nagdaragdag din ng isang matatag na pag-aari ng code upang makilala ng mga kliyente ng API ang mga kaso tulad ng trackable_access_code_required, trackable_access_code_invalid, trackable_activation_required, at trackable_already_activated nang walang pag-parse ng tekstong Ingles. Ang buong pagmamapa ay nakadokumento sa nasusubaybayang pahina ng sanggunian ng error.