Geotrackable API 接口
Geotrackable API 可在同一生产域名上供 Android 应用和其他获授权客户端使用。
使用这些示例来验证实时主机、获取 bearer 令牌、读取公共地图数据、同步已登录的位置,并处理可追踪物,而不必从网站界面猜测路由名称。
打开实时状态 创建常规位置和追踪物位置 错误负载与恢复方法 请求 Trackable 秘密代码 为什么 GET /api/account 返回 404
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"
}
保留前缀的处理方法
GT保留给 Geotrackable 系统签发的代码。请省略 secretCode,让此主机签发一个代码。LN属于 LocationNotes Trackable;请在来源站点处理该物品,而不要在此采用其代码。TB属于 Geocaching.com Trackable;请使用来源站点的追踪流程。GK属于 GeoKrety.org Trackable;请使用来源站点的追踪流程。GC是 Geocaching.com 的 Geocache 标识符,而不是 Geotrackable 秘密代码。
保留或无效的自定义值会返回包含 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"
}
各字段的用途
type- 此问题详情约定的稳定 URI。客户端逻辑应使用 code(而非 type 或易读文本)来区分具体故障。
title- 适合作为标题的简短易读摘要。请勿依据此文本分支客户端逻辑。
status- 在正文中重复的 HTTP status,以便所捕获的诊断信息仍易于理解。
detail- 针对本次请求说明失败原因,但不会回显凭据或私密令牌。
instance- 与本次问题关联的请求路径。包含秘密代码的网站入口路径可能会被遮盖。
code- 客户端应据此分支处理的稳定机器可读标识符。
action- 具体的恢复步骤:更正字段、完成身份验证、等待、减小负载或选择其他值。
requestId- 可安全包含在支持请求中的关联值。请将它与 status、code、请求方法和路由模板一并保留。
documentation- 针对该故障类别或确切 code 的帮助页面位置。
验证错误包含字段名称
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 表示应刷新当前追踪物或组的状态。