隐私选项

由于我们无法自信地将此次访问置于需要同意的区域之外,因此 Geotrackable 将保留第三方跟踪工具,直到您确认此次访问应允许哪些内容。

确认建议的默认设置以继续移动,或者如果您首先想要更严格的地图或分析路径,请打开下面的访问选项。

本次访问的推荐路线默认值

Geotrackable.com

Android 应用设置

在 Android 的“同步”选项卡中,只将站点源地址保存为端点。不要添加 /api。

https://Geotrackable.com

将本地账户凭据 POST 到 /api/auth/login?useCookies=false&useSessionCookies=false 以登录,然后在 Authorization 标头中发送返回的 bearer 令牌。

预期响应

在客户端发送 bearer 令牌之前,受保护路由会返回 HTTP 401。在浏览器中打开仅限 POST 的路由会返回 HTTP 405,因为浏览器发送的是 GET。

每个离线同步周期都必须先推送,再拉取。

未知的 API 路径会返回 HTTP 404。使用错误 HTTP 方法调用已知路径通常会返回 HTTP 405,并可能包含 Allow 标头。仅用于删除的 /api/account 路径特意不提供 GET 端点,因此 GET /api/account 会返回含操作建议的 404;读取账户信息请使用 /api/auth/manage/info。

调用私有路由前,请检查主机、登录并确认令牌。

当前账户信息路由来自框架身份 API。单独的 account 路由仅用于永久删除。

健康检查

此路由允许匿名访问,是确认生产 API 主机可达的最快方式。

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

注册

在请求 bearer 令牌之前,请使用电子邮件、密码和公开个人资料用户名创建本地帐户。用户名只能包含小写字母、数字和下划线。

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 登录

当脚本、应用或 API 客户端需要 bearer 令牌时,请使用本地账户凭据并禁用 cookie。

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..."
}

当前账户和个人资料

没有 GET /api/account 个人资料端点。请使用身份 manage-info 端点读取已登录账户元数据,并使用网站个人资料页面显示公开资料。

GET /api/account 不是已发布的读取路由。

GET /api/auth/manage/info 返回已登录的身份详细信息。

DELETE /api/account 永久删除当前账户。

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

检查 Android 或 API 客户端连接时,请从这些路由开始。

方法 路由
GET /api/system/status
POST /api/auth/register
POST /api/auth/login?useCookies=false&useSessionCookies=false
GET /api/auth/manage/info
POST /api/sync/push
POST /api/sync/pull
GET /api/notes/public/bounds
GET /api/notes/public/nearby
GET /api/categories/mine
GET /api/notes/mine
POST /api/notes/mine
POST /api/trackables/{trackableId}/notes
GET /api/trackables/public
POST /api/trackables/lookup
GET /api/trackables/active
DELETE /api/account

创建一个常规位置,或直接在受管理的追踪物下创建位置。

使用 POST /api/notes/mine 创建常规个人位置。当已登录调用者拥有已激活的追踪物或管理其团队时,使用 POST /api/trackables/{trackableId}/notes。不要向 /api/trackables/{trackableId} 发送 POST;该资源路由仅接受 GET。

位置文本属性是 body,而不是 content。categoryId 是可选的,latitude 和 longitude 必须一起提供。追踪物路由从 URL 获取 trackableId,因此不要在 trackableIds 属性中重复它。

地图边界内的公共位置

当客户端已有地图视口并需要该区域内可见的公共位置笔记时,请使用边界查询。

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": 1,
    "updatedUtc": "2026-06-20T12:00:00Z"
  }
]

创建常规个人位置

此路由创建一个不附加到追踪物的位置。省略 categoryId 可使用账户的默认类别。响应为已保存的位置,并包含供后续请求使用的 noteId。

创建请求接受如下所示的可读枚举名称,例如 Private、Public 和 Disabled,并继续接受相应的数值。位置备注响应目前以数字编码 visibility 和 commentPolicy:visibility 0 为 Private,1 为 Public,2 为 VisibleOnceAssociatedTrackableAccessed;commentPolicy 0 为 Disabled,1 为 LoggedInUsers,2 为 TeamMembers。

curl -X POST "https://Geotrackable.com/api/notes/mine" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "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
  }'

在受管理的追踪物下创建位置

此一步路由以原子方式创建完整的位置备注及其追踪物旅程停靠点。追踪物必须已激活,bearer-token 账户必须是其个人所有者或所属团队的有效管理员。团队追踪物会自动在同一团队中创建备注。

curl -X POST "https://Geotrackable.com/api/trackables/<TRACKABLE_ID>/notes" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Dropped off at spot #1",
    "body": "Left near the park.",
    "contentLanguage": "en-US",
    "latitude": 41.8827,
    "longitude": -87.6233,
    "visibility": "Private",
    "commentPolicy": "Disabled"
  }'
{
  "trackableId": "13a2c0b1-582f-4a7b-92aa-16922f7bdb63",
  "journeyStopId": "3a223d33-5442-4cf7-84a1-3d937a253f30",
  "note": {
    "noteId": "26f84cdd-02e7-4c18-a153-f2754418f435",
    "title": "Dropped off at spot #1",
    "body": "Left near the park.",
    "latitude": 41.8827,
    "longitude": -87.6233
  },
  "message": "Location note created and added to the trackable journey."
}

在结果未知的超时后重复 POST 并不安全。重试前请先刷新追踪物旅程和您的位置,以免客户端创建重复的备注和停靠点。

拥有密钥或活动会话访问权限时关联位置

不管理该追踪物的发现者应使用两次调用:先创建常规位置,从响应中读取 noteId,然后使用密钥附加一个已激活的追踪物。selectedActiveTrackableIds 仅适用于在同一个由 cookie 支持的浏览器会话中处于活动状态的追踪物。

curl -X POST "https://Geotrackable.com/api/public/notes/<NOTE_ID>/trackables" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{
    "trackableSecretCodes": "<TRACKABLE_SECRET_CODE>"
  }'

尽管属性名称为复数,trackableSecretCodes 每个请求只接受一个代码。备注必须有坐标,并且追踪物必须已激活。要关联另一个追踪物,请重复关联请求。

对于只有坐标而没有 title、body、category 或完整位置备注的轻量旅程点,请改用 POST /api/trackables/{trackableId}/journey-stops。

请先推送本地更改,然后拉取该用户和当前公共区域的服务器视图。

两个同步路由都需要 bearer 身份验证。匿名私有位置可以保留在设备本地,但服务器同步 API 不会接受它们。

推送请求

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"
      }
    ]
  }'

每条位置笔记都必须引用登录账户已可见的类别,或同一次推送中包含的类别。离线同时创建两者时,请确保两条记录中的 categoryId 完全相同。

拉取请求

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": []
}

拉取前先解决推送冲突

有效的推送可能返回 HTTP 200,并带有 conflicts 集合。这是逐实体的同步结果,而非传输故障。每项冲突都包含 entityId、entityType、易读的 reason、稳定的 code 和具体的 action。

{
  "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."
}

不要静默循环提交被拒绝的实体。stale_update 要求先拉取并决定如何合并;team_membership_required 要求刷新成员资格;online_team_management_required 表示应改用在线团队 API 进行更改;entity_ownership_conflict 表示对于此账户应以服务器副本为准。

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

秘密代码和私有 QR 载荷是敏感凭据。创建后,普通读取路由不会再返回它们。

POST /api/trackables 中的 secretCode 属性是可选的。需要 Geotrackable 生成唯一的系统秘密代码时请省略它;如果实体物品已有需要保留的代码,则可发送允许的自定义值。

公共浏览和查找

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"
  }'

使用秘密代码或 QR 查找可以创建浏览器式活动会话。请保留响应 Cookie 容器以供后续活动会话调用使用,像保护凭据一样保护该文件,并在不再需要会话时将其删除。

创建可追踪物

建议的请求应省略 secretCode。省略、null、空字符串或仅含空白的值都会要求服务器生成代码。非空值则表示请求在规范化和可用性检查后采用该确切自定义代码。

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
  }'

请求指定的秘密代码

仅当物品已有自定义标识符时才发送 secretCode。如果规范化后的值可用,服务器会采用它并返回 HTTP 201。生成的公开代码与之分开,仍由 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 个字符,并且在公开与秘密 Trackable 代码的整个命名空间中必须可用。以 GT、LN、TB、GK 或 GC 开头的代码保留给系统签发或来源站点标识符,不能用作 Geotrackable 自定义秘密代码。

创建响应是唯一一次显示机密信息的机会

立即保存返回的 secretCode 和 scanUrl。后续的列表、详情、查找、评论和旅程路由特意不会再次显示这些凭据。

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>"
    }
  ]
}

活动秘密访问

浏览器输入有效秘密代码或扫描载荷后,活动会话路由会显示该浏览器当前可以重新打开的内容。

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"
  }'

当请求的代码已被占用时

自定义代码冲突会返回 HTTP 409,code 为 trackable_secret_code_taken。此请求尚未创建 Trackable。请勿继续重试相同的值:省略 secretCode 以获取生成的代码,或选择另一个允许的自定义代码。

{
  "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"
}

保留前缀的处理方法

保留或无效的自定义值会返回包含 action 和文档链接的问题响应。安全的后备做法始终是从创建请求中移除 secretCode。

记录旅程停靠点

当不需要完整位置笔记时,直接旅程停靠点就是轻量级路线更新。

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"
  }'

评论可追踪物

登录的调用方可使用其 Bearer 身份发表评论。匿名调用方也可在客户端拥有由秘密代码支持的活动会话,或发送此物品对应的 accessCode 时,对已激活的 Trackable 发表评论。

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": ""
  }'

关于可追踪

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

创建团队

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"
  }'

创建邀请链接

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>"

关于团队

媒体和支持路由遵循其关联页面或内容的可见性。

图片

当父页面可安全公开时,列表读取可以匿名进行。上传和删除路由需要 bearer 身份验证。

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"

外部链接验证

在将外部链接保存到位置、团队、可追踪物或可追踪物组之前,请先验证该链接。

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"
  }'

内容和错误报告

对于公共页面内容问题,请使用报告;对于支持人员可能需要查看的客户端诊断,请提交错误。

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."
  }'

从 API 删除账户

已认证客户端可以通过 API 永久删除当前账户和已同步的个人数据。需要导出步骤或共享可追踪物保留规则时,请先阅读删除数据页面。

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

删除数据

错误信息包含下一项有用操作

API 问题响应使用稳定的 code 标识故障,通过 detail 说明本次请求的问题,并提供客户端可显示或执行的 action。支持人员需要将请求与服务器诊断信息关联时,请提供 requestId。

阅读错误负载与恢复参考

登录

请处理机器可读的 code、保留 requestId,并遵循 action,而不要解析英文文本。

API 故障使用 application/problem+json 和 RFC 风格的问题详情对象。易读的 title 和 detail 文本可能随时间改进或进行本地化;code 才是供程序逻辑使用的稳定值。

问题响应结构

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"
}

各字段的用途

验证错误包含字段名称

HTTP 400 验证失败会附带 errors 对象。每个键都是需要更正的 JSON 属性或请求区域;每个值都是数组,因为一个字段可能违反多项规则。

{
  "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 与内容类型

无效 JSON 属于请求验证失败。请保留 requestId、修正语法,并使用 Content-Type: application/json 重新发送正文。文件上传端点则要求 multipart/form-data,以及名称为 files 或 file(以具体路由为准)的部分。

即使请求正文语法有效,也可能不符合业务规则。字段级问题请读取 errors,程序逻辑请读取 code,上下文请读取 detail,下一步请读取 action。不要向用户显示原始服务器异常或堆栈跟踪。

状态 含义 恢复方法 重试指南
400 Bad Request JSON、查询值、字段约束或业务规则拒绝了该请求。 存在 errors 时请先读取它;否则读取 code、detail 和 action。修正请求后再重新发送。 请勿重试未作更改的请求。
401 Unauthorized 受保护的路由未收到可用的 Bearer 令牌。登录失败也会返回 401,但不会透露某个电子邮件地址是否存在。 获取或刷新令牌,确认 Bearer 方案和主机,然后将预期调用重试一次。 仅在身份验证状态改变后重试;重复未更改的尝试不会有帮助。
403 Forbidden 调用方身份已知,但缺少所需的所有权、团队角色、活动 Trackable 会话或由秘密代码支持的访问权限。 请按照 action 操作:使用符合条件的账户、请求访问权限、激活物品,或提供针对该 Trackable 的访问凭据。 在访问状态改变之前,请勿重试。
404 Not Found 未找到路由或资源。当调用方不应得知私密资源是否存在时,系统可能会特意将其显示为不存在。 确认请求方法、路由、GUID、公开代码和当前列表状态。刷新客户端中的过期数据。 请勿循环重试。仅在更正标识符或刷新状态后重试。
405 Method Not Allowed 路径存在,但使用了错误的 HTTP 方法,例如浏览器以 GET 打开仅支持 POST 的路由。 使用本文档所示的请求方法;响应提供 Allow 标头时,请检查该标头。 仅使用正确的请求方法和请求结构重试。
409 Conflict 请求有效,但与当前服务器状态冲突;其中包括所请求的 Trackable 秘密代码已被占用。 重新加载当前状态或更改冲突值。创建 Trackable 时,可以省略 secretCode 以生成代码,或选择另一个自定义代码。 请勿使用相同的创建值重试;只有在更改请求或状态后才可重试。
413 Content Too Large 请求正文或上传的文件集超过允许的大小。 减少图像数量或大小;如果工作流程允许,请拆分上传,并将元数据请求与媒体上传分开。 仅使用更小的负载重试。
415 Unsupported Media Type 正文编码与端点要求不匹配。 JSON 端点请使用 application/json,图像或 GPX 上传端点请使用 multipart/form-data。让 HTTP 库生成 multipart 边界。 仅在更正 Content-Type 和正文编码后重试。
429 Too Many Requests 客户端已超过请求限制,或在短时间内发送请求过快。 如果存在 Retry-After,请按其指示等待;同时降低并发量、缓存公开读取结果并合并重复请求。 按 Retry-After 指示等待;如果没有该标头,请使用带随机抖动和重试次数上限的指数退避。
500 Internal Server Error Geotrackable 已记录意外故障。响应不会暴露堆栈跟踪或内部机密。 如果响应中有 requestId 和 ticketNumber,请将其保留;然后联系支持团队,并提供时间、请求方法、路由模板、status 和 code。 延迟后可重试安全的读取操作。如果创建操作或其他非幂等写入的提交状态未知,请勿盲目重复执行。

谨慎重试写入操作

GET 请求通常可以安全重试。即使客户端在收到响应前超时,POST 也可能已经创建数据。再次创建 Trackable 前,请刷新 GET /api/trackables/mine 并核对结果,以免网络超时导致重复创建实体物品。

对于 429 或暂时性的 500,请使用带随机抖动且有上限的指数退避。当 action 指明必须更改请求本身时,应停止重试。绝不要把 400、403、404、405、409、413 或 415 变成自动重试循环。

在不泄露凭据的前提下保留有用诊断信息

绝不要记录 Authorization 标头、Bearer 或刷新令牌、密码、Cookie、secretCode、accessCode、QR 负载、私密扫描 URL 或原始 /trackable/{code} 入口路径。在遥测、崩溃报告、屏幕截图和支持附件中使用这些信息前,必须将其遮盖。

可安全记录的诊断字段包括 requestId、ticketNumber、HTTP status、稳定的 code、请求方法、路由模板、客户端版本和时间戳。如果完整请求正文可能包含位置文本、精确坐标、联系信息或 Trackable 凭据,请勿复制它。

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

已发布的 Geotrackable API 路由

此表从正在运行的 Geotrackable 端点表生成,使发布的文档与主机保持一致。

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

DELETE /api/account

已认证客户端可以通过 API 永久删除当前账户和已同步的个人数据。需要导出步骤或共享可追踪物保留规则时,请先阅读删除数据页面。

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

成功响应

永久移除已登录账户和符合条件的个人数据后,HTTP 200 会返回删除数量。响应成功后,当前会话会退出登录。

常见故障与恢复方法

401 要求有效的 bearer 令牌。400 会说明无法完成删除的原因。删除账户属于破坏性操作:发生结果不明的超时后,请勿自动重试;应先检查登录状态。

GET /api/auth/confirmEmail

使用确认链接中的用户 ID 和经过 URL 编码的确认代码完成电子邮件确认。

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

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

POST /api/auth/forgotPassword

启动基于电子邮件的账户恢复或确认工作流。响应有意不透露该电子邮件地址是否存在。

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

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

POST /api/auth/login

使用本地账户凭据,并在需要时提供双重身份验证值,以换取 bearer 令牌和刷新令牌。API 客户端必须保持禁用 cookie。

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!" }'

成功响应

HTTP 200 会返回 tokenType、accessToken、到期数据和已登录用户摘要。请将凭据存储在平台安全存储区中,切勿记录它们。

常见故障与恢复方法

400 涵盖格式错误的 JSON 或缺少字段。401 authentication_failed 有意不透露该电子邮件地址是否存在;请核对凭据,或先使用密码重置流程再重试。401 two_factor_required 响应会将 requiresTwoFactor 保持为 true,并指示客户端使用 twoFactorCode 或 twoFactorRecoveryCode 重新提交登录请求。

POST /api/auth/manage/2fa

为已登录的账户启用、禁用、重置或检查双重身份验证。验证器值和恢复值属于敏感凭据。

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 }'

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

GET /api/auth/manage/info

读取已登录账户的电子邮件地址和确认状态,或在需要时使用当前密码更新电子邮件地址或密码。

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

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

POST /api/auth/manage/info

读取已登录账户的电子邮件地址和确认状态,或在需要时使用当前密码更新电子邮件地址或密码。

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!" }'

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

POST /api/auth/refresh

使用仍然有效的刷新令牌换取新的访问令牌响应,而无需重新发送账户密码。

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

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

POST /api/auth/register

使用电子邮件地址、公开用户名和强密码创建本地账户。注册不会返回 bearer 令牌;接下来请登录。

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!" }'

成功响应

HTTP 200 表示本地账户已创建。响应中没有 bearer 令牌;接下来请调用登录路由。

常见故障与恢复方法

400 validation_failed 会指出 JSON 格式错误,或 email、password 和 userName 字段错误。请修正列出的错误;如果值重复,请使用其他电子邮件地址或公开用户名。

POST /api/auth/resendConfirmationEmail

启动基于电子邮件的账户恢复或确认工作流。响应有意不透露该电子邮件地址是否存在。

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

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

POST /api/auth/resetPassword

使用电子邮件中的准确重置代码和新的强密码完成密码恢复。重置代码属于凭据,不得记录。

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!" }'

成功响应

HTTP 200 表示身份操作已完成。如果操作提供身份有效负载,请读取返回的内容;密码和确认操作可能有意返回空的成功响应正文。

常见故障与恢复方法

400 包含字段级身份验证指引;401 表示 bearer 令牌或凭据不可用。请按照 action 操作,不要循环重试未更改的凭据。

GET /api/categories/mine

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回个人类别列表、管理树、分区或所请求的子项。空分支也是成功结果。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

POST /api/categories/mine

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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 }'

成功响应

HTTP 200 会返回已创建或移动的类别,或在满足后代类别规则后确认删除。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

GET /api/categories/mine/tree

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回个人类别列表、管理树、分区或所请求的子项。空分支也是成功结果。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

GET /api/categories/mine/tree/children

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回个人类别列表、管理树、分区或所请求的子项。空分支也是成功结果。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

GET /api/categories/mine/tree/sections

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回个人类别列表、管理树、分区或所请求的子项。空分支也是成功结果。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

DELETE /api/categories/mine/{categoryId}

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回已创建或移动的类别,或在满足后代类别规则后确认删除。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

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

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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 }'

成功响应

HTTP 200 会返回已创建或移动的类别,或在满足后代类别规则后确认删除。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

POST /api/compliance/errors

媒体和支持路由遵循其关联页面或内容的可见性。

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." }'

成功响应

HTTP 200 或 201 会返回错误工单回执。HTTP 200 表示请求已附加到现有工单;HTTP 201 表示已创建新工单。

常见故障与恢复方法

400 会说明缺少报告上下文或工作流状态无效;401 用于保护个人和管理员列表;403 要求相应的报告者或 SuperAdmin 角色;404 表示应保留该 ID,但要刷新报告列表。

GET /api/compliance/reports

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回已登录举报者或获授权管理员可见的举报或举报集合。

常见故障与恢复方法

400 会说明缺少报告上下文或工作流状态无效;401 用于保护个人和管理员列表;403 要求相应的报告者或 SuperAdmin 角色;404 表示应保留该 ID,但要刷新报告列表。

POST /api/compliance/reports

媒体和支持路由遵循其关联页面或内容的可见性。

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." }'

成功响应

HTTP 201 会返回内容举报回执和举报标识符,供后续跟进。

常见故障与恢复方法

400 会说明缺少报告上下文或工作流状态无效;401 用于保护个人和管理员列表;403 要求相应的报告者或 SuperAdmin 角色;404 表示应保留该 ID,但要刷新报告列表。

GET /api/compliance/reports/mine

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回已登录举报者或获授权管理员可见的举报或举报集合。

常见故障与恢复方法

400 会说明缺少报告上下文或工作流状态无效;401 用于保护个人和管理员列表;403 要求相应的报告者或 SuperAdmin 角色;404 表示应保留该 ID,但要刷新报告列表。

GET /api/compliance/reports/{contentReportId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回已登录举报者或获授权管理员可见的举报或举报集合。

常见故障与恢复方法

400 会说明缺少报告上下文或工作流状态无效;401 用于保护个人和管理员列表;403 要求相应的报告者或 SuperAdmin 角色;404 表示应保留该 ID,但要刷新报告列表。

PUT /api/compliance/reports/{contentReportId}

媒体和支持路由遵循其关联页面或内容的可见性。

# 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 '{}'

成功响应

HTTP 200 会返回已登录举报者或获授权管理员可见的举报或举报集合。

常见故障与恢复方法

400 会说明缺少报告上下文或工作流状态无效;401 用于保护个人和管理员列表;403 要求相应的报告者或 SuperAdmin 角色;404 表示应保留该 ID,但要刷新报告列表。

POST /api/external-links/verify

媒体和支持路由遵循其关联页面或内容的可见性。

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" }'

成功响应

HTTP 200 会返回规范化目标、已验证的页面标题,以及编辑器可在保存链接前使用的安全元数据。

常见故障与恢复方法

400 会在可用时包含 detail、action、supportUrl 和 upstreamStatusCode。请先修正被阻止、位于专用网络、格式错误、无法访问或不受支持的目标,再重试验证。

GET /api/images/notes/{noteId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回该个人资料、备注、团队、追踪物或群组的可见托管图像元数据;空数组也是有效结果。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

POST /api/images/notes/{noteId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

完成筛查和 JPEG 变体处理后,HTTP 200 会返回受管图像元数据和 URL。请使用返回的 URL,不要假定原始文件名仍会保留。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

POST /api/images/profiles

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

完成筛查和 JPEG 变体处理后,HTTP 200 会返回受管图像元数据和 URL。请使用返回的 URL,不要假定原始文件名仍会保留。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

GET /api/images/profiles/{userId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回该个人资料、备注、团队、追踪物或群组的可见托管图像元数据;空数组也是有效结果。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

GET /api/images/teams/{teamId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回该个人资料、备注、团队、追踪物或群组的可见托管图像元数据;空数组也是有效结果。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

POST /api/images/teams/{teamId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

完成筛查和 JPEG 变体处理后,HTTP 200 会返回受管图像元数据和 URL。请使用返回的 URL,不要假定原始文件名仍会保留。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

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

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回该个人资料、备注、团队、追踪物或群组的可见托管图像元数据;空数组也是有效结果。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

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

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

完成筛查和 JPEG 变体处理后,HTTP 200 会返回受管图像元数据和 URL。请使用返回的 URL,不要假定原始文件名仍会保留。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

GET /api/images/trackables/{trackableId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会返回该个人资料、备注、团队、追踪物或群组的可见托管图像元数据;空数组也是有效结果。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

POST /api/images/trackables/{trackableId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

完成筛查和 JPEG 变体处理后,HTTP 200 会返回受管图像元数据和 URL。请使用返回的 URL,不要假定原始文件名仍会保留。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

DELETE /api/images/{contentImageId}

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 204 确认图像及其受管变体已删除;没有响应正文。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

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

媒体和支持路由遵循其关联页面或内容的可见性。

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

成功响应

HTTP 200 会以图像内容类型流式传输所请求的可见 JPEG 变体。

常见故障与恢复方法

400 image_variant_invalid 会列出支持的下载变体,其他 400 响应会说明筛查限制;401/403 要求有效的所有者或团队管理员上下文;404 表示内容不存在或不可见;500 image_variant_unavailable 表示元数据存在,但无法提供已存储的变体。413 要求减少文件数量或缩小文件,415 要求上传使用 multipart/form-data。

GET /api/locations/mine/gpx

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会下载 GPX,其中包含此范围内符合条件的已定位航点。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

POST /api/locations/mine/gpx

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会在处理 GPX 航点文件后返回导入计数和逐项结果。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

GET /api/notes/mine

列出个人位置,或创建不会自动关联追踪物的普通个人位置。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

POST /api/notes/mine

列出个人位置,或创建不会自动关联追踪物的普通个人位置。

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" }'

成功响应

HTTP 200 会返回所请求范围内已保存的备注、评论、附件、移动结果或删除确认。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

GET /api/notes/mine/gpx

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会下载 GPX,其中包含此范围内符合条件的已定位航点。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

POST /api/notes/mine/gpx

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会在处理 GPX 航点文件后返回导入计数和逐项结果。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

DELETE /api/notes/mine/{noteId}

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回所请求范围内已保存的备注、评论、附件、移动结果或删除确认。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

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

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

# 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 '{}'

成功响应

HTTP 200 会返回所请求范围内已保存的备注、评论、附件、移动结果或删除确认。

常见故障与恢复方法

400 会指出字段、层级、边界、GPX 或移动/删除规则问题;401 要求令牌;403 要求所有权;404 表示应刷新个人工作区状态。上传还可能返回 413 或 415。

GET /api/notes/public/bounds

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

GET /api/notes/public/nearby

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

GET /api/public/notes/{noteId}

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

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

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回可见的评论面板、策略和当前评论。空评论列表也是成功结果。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

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

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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": "" }'

成功响应

HTTP 200 会返回已保存的评论状态。匿名写入需要此客户端的活动会话,或这个已激活追踪物专用的 accessCode。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

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

读取可见的追踪物关联,或通过秘密代码或同一浏览器中的活跃会话,将一个已激活的追踪物附加到现有且可管理的位置。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

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

读取可见的追踪物关联,或通过秘密代码或同一浏览器中的活跃会话,将一个已激活的追踪物附加到现有且可管理的位置。

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": [] }'

成功响应

HTTP 200 会返回所请求范围内已保存的备注、评论、附件、移动结果或删除确认。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

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

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

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

公共地图读取允许匿名访问;写入个人位置和类别需要 bearer 身份验证。

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

成功响应

HTTP 200 会返回可见的备注、评论、附件或地图结果。空集合是成功结果;缺少单个资源时会返回 404。

常见故障与恢复方法

400 会指出边界不完整、坐标范围无效或评论/附件输入无效;403 用于保护受限写入;404 可能用于隐藏私有或不存在的页面。请按照 errors 和 action 的指示修正查询。

POST /api/sync/pull

请先推送本地更改,然后拉取该用户和当前公共区域的服务器视图。

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 } }'

成功响应

HTTP 200 会返回当前的个人、公开和团队同步视图。每个离线同步周期执行 push 后,请调用此路由。

常见故障与恢复方法

400 会指出同步信封格式错误,或请求在处理前已被拒绝;401 要求新的 bearer 令牌。单个实体的协调问题会在 HTTP 200 响应的 conflicts 中随 code 和 action 返回。发生结果不明的超时后,切勿盲目重试 push。

POST /api/sync/push

请先推送本地更改,然后拉取该用户和当前公共区域的服务器视图。

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": [] }'

成功响应

HTTP 200 确认已接受客户端更改,并报告同步结果。请保留客户端 ID,以便随后的 pull 能协调相同的记录。

常见故障与恢复方法

400 会指出同步信封格式错误,或请求在处理前已被拒绝;401 要求新的 bearer 令牌。单个实体的协调问题会在 HTTP 200 响应的 conflicts 中随 code 和 action 返回。发生结果不明的超时后,切勿盲目重试 push。

GET /api/system/beta-android

此路由允许匿名访问,是确认生产 API 主机可达的最快方式。

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

成功响应

发布 Android 测试版软件包后,HTTP 200 会返回当前测试版发布元数据和下载指引。

常见故障与恢复方法

400 会指出查询绑定缺失或格式错误;500 会包含可供支持人员使用的 requestId。可选的 Android 测试版数据会返回 HTTP 200 和 available:false。坐标范围或位置提供程序失败会返回 HTTP 200、resolved:false,以及 failureMessage、action 和 retryable。

GET /api/system/coordinate-locality

此路由允许匿名访问,是确认生产 API 主机可达的最快方式。

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

成功响应

HTTP 200 会返回当前可用的最佳地区信息。若解析受到有意限制,成功响应中可能包含不完整的位置字段,或标示位置字段不可用。

常见故障与恢复方法

400 会指出查询绑定缺失或格式错误;500 会包含可供支持人员使用的 requestId。可选的 Android 测试版数据会返回 HTTP 200 和 available:false。坐标范围或位置提供程序失败会返回 HTTP 200、resolved:false,以及 failureMessage、action 和 retryable。

GET /api/system/ip-location

此路由允许匿名访问,是确认生产 API 主机可达的最快方式。

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

成功响应

HTTP 200 会返回当前可用的最佳地区信息。若解析受到有意限制,成功响应中可能包含不完整的位置字段,或标示位置字段不可用。

常见故障与恢复方法

400 会指出查询绑定缺失或格式错误;500 会包含可供支持人员使用的 requestId。可选的 Android 测试版数据会返回 HTTP 200 和 available:false。坐标范围或位置提供程序失败会返回 HTTP 200、resolved:false,以及 failureMessage、action 和 retryable。

GET /api/system/status

此路由允许匿名访问,是确认生产 API 主机可达的最快方式。

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

成功响应

HTTP 200 会返回服务状态、服务器 UTC 时间和 Android 测试版页面 URL。这只能确认服务可访问,并不表示已通过身份验证。

常见故障与恢复方法

网络、DNS、TLS 或 500 故障表示主机检查未完成。返回 requestId 时请保留它,并采用有上限的退避策略;status 不会返回 401。

GET /api/teams

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

POST /api/teams

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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" }'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

DELETE /api/teams/{teamId}

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

GET /api/teams/{teamId}/categories

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

POST /api/teams/{teamId}/categories

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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 }'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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 }'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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 }'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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>"

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会下载包含成员可见的团队地图航点的 GPX。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回团队 GPX 的导入计数和逐项结果。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

GET /api/teams/{teamId}/notes

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回已登录成员可见的团队、工作区、成员资格、类别、备注或邀请链接数据。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

POST /api/teams/{teamId}/notes

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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" }'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会下载包含成员可见的团队地图航点的 GPX。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回团队 GPX 的导入计数和逐项结果。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

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>"

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

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

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

PUT /api/teams/{teamId}/settings

团队 API 管理共享位置、类别、邀请链接、成员资格决定以及团队拥有的可追踪物范围。

# 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 '{}'

成功响应

HTTP 200 会返回最终团队状态,或确认成员资格、工作区、邀请、设置或删除操作。

常见故障与恢复方法

400 会说明成员资格、邀请、层级、GPX、移动或删除规则;401 表示需要登录;403 要求指定的成员或管理员角色;404 表示应先刷新团队状态,再提交其他更改。

POST /api/trackables

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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 }'

成功响应

HTTP 201 会返回一次性揭示信息。省略 secretCode 可生成 GT 代码;如果提供的自定义值可用且允许,系统会采用该值。请立即保存 secretCode 和 scanUrl,因为读取路由以后不会再揭示它们。

常见故障与恢复方法

400 validation_failed 会指出无效字段;400 trackable_secret_code_reserved 会说明 GT、LN、TB、GK 或 GC 前缀;409 trackable_secret_code_taken 表示应省略 secretCode 以生成代码,或选择其他值;401 表示需要登录。

GET /api/trackables/active

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回此客户端记住的、由秘密访问支持的活跃追踪物。空数组是成功结果,并非身份验证失败。

常见故障与恢复方法

404 表示此客户端已不再拥有所请求的活跃追踪物会话;请重新访问私密代码或扫描路由。400 涵盖无效的状态文本。此会话使用 cookie,因此请在各次调用之间保留 cookie 容器。

GET /api/trackables/active-indicator

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回调用者在公开、已登录或活动会话访问上下文中可见的追踪物数据。

常见故障与恢复方法

404 表示此客户端已不再拥有所请求的活跃追踪物会话;请重新访问私密代码或扫描路由。400 涵盖无效的状态文本。此会话使用 cookie,因此请在各次调用之间保留 cookie 容器。

DELETE /api/trackables/active/{trackableId}

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会结束此客户端为该追踪物记住的秘密代码访问会话。它不会删除或停用该追踪物。

常见故障与恢复方法

404 表示此客户端已不再拥有所请求的活跃追踪物会话;请重新访问私密代码或扫描路由。400 涵盖无效的状态文本。此会话使用 cookie,因此请在各次调用之间保留 cookie 容器。

GET /api/trackables/active/{trackableId}

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回该追踪物当前的活动入口状态或更新后的状态消息,前提是此客户端仍保有其秘密代码访问会话。

常见故障与恢复方法

404 表示此客户端已不再拥有所请求的活跃追踪物会话;请重新访问私密代码或扫描路由。400 涵盖无效的状态文本。此会话使用 cookie,因此请在各次调用之间保留 cookie 容器。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

# 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 '{}'

成功响应

HTTP 200 会返回该追踪物当前的活动入口状态或更新后的状态消息,前提是此客户端仍保有其秘密代码访问会话。

常见故障与恢复方法

404 表示此客户端已不再拥有所请求的活跃追踪物会话;请重新访问私密代码或扫描路由。400 涵盖无效的状态文本。此会话使用 cookie,因此请在各次调用之间保留 cookie 容器。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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" }'

成功响应

HTTP 200 会返回该追踪物当前的活动入口状态或更新后的状态消息,前提是此客户端仍保有其秘密代码访问会话。

常见故障与恢复方法

404 表示此客户端已不再拥有所请求的活跃追踪物会话;请重新访问私密代码或扫描路由。400 涵盖无效的状态文本。此会话使用 cookie,因此请在各次调用之间保留 cookie 容器。

POST /api/trackables/groups

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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 }'

成功响应

HTTP 201 会返回新组,以及每个生成成员的一次性公开凭据、秘密凭据和扫描凭据。离开该响应前,请持久保存此次揭示的信息。

常见故障与恢复方法

400 会说明默认值、数量、可见性、类别或团队规则无效;401 表示需要登录;403 表示调用方不能在该团队中创建。请修正请求后再重试该批次。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

已登录账户的关注偏好更改后,HTTP 200 会返回最终的追踪物或组状态。重复提交所需的最终状态不应创建重复关注。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

# 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 '{}'

成功响应

已登录账户的关注偏好更改后,HTTP 200 会返回最终的追踪物或组状态。重复提交所需的最终状态不应创建重复关注。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

POST /api/trackables/legacy-lookup

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

# 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 '{}'

成功响应

HTTP 200 会返回完成所请求的所有权、分组或监控操作后的追踪物状态。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

GET /api/trackables/lookup

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回 found、解析后的追踪物 ID、匹配类型和重定向指引。普通的代码输入错误或未知代码也会返回 HTTP 200 且 found 为 false,以便查找界面停留在原处。

常见故障与恢复方法

未知或输入错误的代码通常会返回 HTTP 200 且 found 为 false,而不是问题详情。400 仅用于格式错误的输入。诊断查找问题时,切勿记录已提交的秘密值或 QR 值。

POST /api/trackables/lookup

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回 found、解析后的追踪物 ID、匹配类型和重定向指引。普通的代码输入错误或未知代码也会返回 HTTP 200 且 found 为 false,以便查找界面停留在原处。

常见故障与恢复方法

未知或输入错误的代码通常会返回 HTTP 200 且 found 为 false,而不是问题详情。400 仅用于格式错误的输入。诊断查找问题时,切勿记录已提交的秘密值或 QR 值。

GET /api/trackables/mine

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回调用者在公开、已登录或活动会话访问上下文中可见的追踪物数据。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

GET /api/trackables/public

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回调用者在公开、已登录或活动会话访问上下文中可见的追踪物数据。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

GET /api/trackables/{trackableId}

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回调用者在公开、已登录或活动会话访问上下文中可见的追踪物数据。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

POST /api/trackables/{trackableId}/activate

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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 }'

成功响应

建立个人或团队所有权以及项目级元数据后,HTTP 200 会返回已激活追踪物的详情。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

GET /api/trackables/{trackableId}/comments

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回可见的评论面板、策略和当前评论。空评论列表也是成功结果。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

POST /api/trackables/{trackableId}/comments

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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": "" }'

成功响应

HTTP 200 会返回已保存的评论状态。匿名写入需要此客户端的活动会话,或这个已激活追踪物专用的 accessCode。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回已保存的评论状态。匿名写入需要此客户端的活动会话,或这个已激活追踪物专用的 accessCode。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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." }'

成功响应

HTTP 200 会返回已保存的评论状态。匿名写入需要此客户端的活动会话,或这个已激活追踪物专用的 accessCode。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

DELETE /api/trackables/{trackableId}/group

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会返回完成所请求的所有权、分组或监控操作后的追踪物状态。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

POST /api/trackables/{trackableId}/group

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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" }'

成功响应

HTTP 200 会返回完成所请求的所有权、分组或监控操作后的追踪物状态。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

GET /api/trackables/{trackableId}/journey

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

HTTP 200 会按路线顺序返回可见的旅程点。已激活但没有已报告停靠点的追踪物会返回空集合。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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": "" }'

成功响应

HTTP 200 会返回已保存的直接旅程停靠点。latitude 和 longitude 会成为已激活追踪物中不可变的路线历史点。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

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

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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>"

成功响应

HTTP 200 确认已删除获授权的直接旅程停靠点。在对此停靠点提供其他操作前,请刷新旅程。

常见故障与恢复方法

400 trackable_activation_required 表示符合条件的所有者必须先激活;403 trackable_access_code_required 或 trackable_access_code_invalid 表示必须提供此特定项目的会话或凭据;404 表示应刷新过期的 ID。

POST /api/trackables/{trackableId}/notes

在一个已激活的追踪物下,以原子方式创建完整的地图位置备注及旅程停靠点;该追踪物必须由已登录的个人所有者或现任团队管理员管理。

curl -X POST "https://Geotrackable.com/api/trackables/13a2c0b1-582f-4a7b-92aa-16922f7bdb63/notes" \
  -H "Authorization: Bearer <access token>" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Trackable drop", "body": "Placed near the east trail marker.", "contentLanguage": "en-US", "latitude": 41.8818, "longitude": -87.6231, "visibility": "Private", "commentPolicy": "Disabled" }'

成功响应

HTTP 201 会返回 trackableId、journeyStopId 和完整的已保存位置备注。Location 标头指向 /api/public/notes/{noteId};如果关联失败,则不会提交位置备注或旅程停靠点。

常见故障与恢复方法

400 validation_failed 会列出 content 或 trackableIds 等不受支持的字段;400 trackable_note_location_required 要求同时提供两个坐标;400 trackable_activation_required 要求先激活;403 trackable_management_required 要求个人所有者或现任团队管理员操作;404 trackable_not_found 要求使用刷新后的 ID。发生结果不明的超时后,请先刷新再重试,以免产生重复项。

DELETE /api/trackables/{trackableId}/watch

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

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

成功响应

已登录账户的关注偏好更改后,HTTP 200 会返回最终的追踪物或组状态。重复提交所需的最终状态不应创建重复关注。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

POST /api/trackables/{trackableId}/watch

可追踪物路由涵盖公共浏览、私有所有权、已记住的秘密访问、评论和旅程停靠点。

# 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 '{}'

成功响应

已登录账户的关注偏好更改后,HTTP 200 会返回最终的追踪物或组状态。重复提交所需的最终状态不应创建重复关注。

常见故障与恢复方法

400 会报告追踪物业务规则;401 适用于仅限 bearer 令牌的管理操作;403 会提供有关所有权、团队角色、分组或访问权限的 action;404 表示应刷新当前追踪物或组的状态。

支持