URL base y convenciones
URL base
Todos los ejemplos de esta página asumen el host de producción actual:
https://www.locationnotes.com
.
Las solicitudes y respuestas utilizan JSON. Los GUID son los identificadores principales entre notas, categorías, equipos y dispositivos.
Autorización
Los puntos finales privados, de sincronización y de equipo requieren una
Authorization: Bearer <access token>
encabezado a menos que la ruta esté marcada como pública a continuación.
Idioma
Las lecturas públicas y de gestión pueden pasar
contentLanguage=en-US
u otro idioma de contenido admitido para filtrar el contenido de nota/categoría devuelto.
Tokens de autenticación y portadores
Las páginas de inicio de sesión del sitio web y la configuración del proveedor externo están documentadas en el
Autenticación
pagina. Registrese primero cuando el llamador todavia no tenga una cuenta de LocationNotes.
Los clientes de API que necesiten un token de acceso de tipo bearer deben usar despues la ruta de inicio de sesion de la API de identidad con las cookies desactivadas, el mismo patron que usa la aplicacion de Android.
POST /api/auth/register
Anónimo
Cuerpo de la solicitud de registro
{
"email": "tester@example.com",
"password": "StrongP@ssw0rd!"
}
Comportamiento del registro
Una llamada de registro correcta crea la cuenta, pero no reemplaza el inicio de sesion. Llame despues a la ruta de inicio de sesion bearer cuando el cliente necesite un token de acceso para rutas privadas, de sincronizacion, de equipo o de administracion.
POST /api/auth/login?useCookies=false&useSessionCookies=false
Anónimo
Cuerpo de la solicitud
{
"email": "tester@example.com",
"password": "StrongP@ssw0rd!"
}
Extracto de respuesta
{
"tokenType": "Bearer",
"accessToken": "eyJhbGciOi..."
}
curl -X POST "https://www.locationnotes.com/api/auth/login?useCookies=false&useSessionCookies=false" \
-H "Content-Type: application/json" \
-d '{
"email": "tester@example.com",
"password": "StrongP@ssw0rd!"
}'
El inventario completo de rutas que aparece abajo tambien enumera las rutas actuales de identidad administradas por el framework bajo /api/auth.
Si necesita el flujo interactivo completo del sitio web, las devoluciones del proveedor, las páginas de seguridad de la cuenta o el comportamiento de vinculación de proveedores, use la
Página de autenticación.
Notas públicas dentro de los límites del mapa.
Utilice este punto final para ventanas de mapas públicos y experiencias de navegación por área. Esta es la ruta que utiliza el mapa de la página de inicio.
GET /api/notes/public/bounds
Anónimo
- Cadena de consulta requerida:
minLatitude, minLongitude, maxLatitude, maxLongitude
- Cadena de consulta opcional:
contentLanguage
- Las respuestas están limitadas por el límite de exposición de datos públicos del sitio, que actualmente es 500 de forma predeterminada, y están ordenadas primero por actividad reciente.
Estas consultas públicas del mapa incluyen tanto las notas normales con visibilidad Public como las notas con visibilidad VisibleOnceAssociatedTrackableAccessed mientras todavía no tengan rastreables asociados. En cuanto se asocia un rastreable, la nota deja de aparecer en el descubrimiento anónimo del mapa público hasta que la persona visitante haya desbloqueado uno de los rastreables asociados desde una ruta a nivel de página.
curl "https://www.locationnotes.com/api/notes/public/bounds?minLatitude=41.78&minLongitude=-87.75&maxLatitude=41.96&maxLongitude=-87.54&contentLanguage=en-US"
[
{
"noteId": "4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3",
"ownerUserId": "a7cfd28f-c17f-4cf7-8913-47fa10fd0d1f",
"categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
"title": "Dock gate closed",
"body": "Security redirected vehicles to the south entrance.",
"contentLanguage": "en-US",
"latitude": 41.8818,
"longitude": -87.6231,
"visibility": "Public",
"isDeleted": false,
"updatedUtc": "2026-03-13T20:10:00Z",
"clientMutationId": "web-demo-public-1",
"teamId": null
}
]
Notas públicas cerca de un punto
Utilice este punto final cuando el cliente ya conozca un punto central y desee un conjunto de resultados con distancia limitada en lugar de una ventana de mapa rectangular.
GET /api/notes/public/nearby
Anónimo
- Cadena de consulta requerida:
latitude, longitude
- Cadena de consulta opcional:
radiusKm (predeterminado 5), contentLanguage
- Los resultados cercanos están limitados por el límite de exposición de datos públicos del sitio, que actualmente es 500 de forma predeterminada.
Aquí se aplica la misma regla de visibilidad que en el punto final de límites: las notas públicas se incluyen normalmente, y las notas VisibleOnceAssociatedTrackableAccessed se incluyen solo hasta que obtienen su primer trackable asociado.
curl "https://www.locationnotes.com/api/notes/public/nearby?latitude=41.8818&longitude=-87.6231&radiusKm=8&contentLanguage=en-US"
Flujos de notas de paginas publicas de perfil y equipo
Estas rutas respaldan el mapa publicado y la franja de notas en las paginas publicas de perfil y de equipo. Usan las mismas reglas de acceso a notas que la propia pagina y aceptan un punto central cercano o limites completos del mapa.
GET /api/public/profiles/{userName}/notes/nearby
Anónimo o Portador
GET /api/public/teams/{teamName}/notes/nearby
Anónimo o Portador
Cadena de consulta requerida: latitude, longitude o limites completos del mapa con minLatitude, minLongitude, maxLatitude, maxLongitude.
Cadena de consulta opcional: radiusKm (predeterminado 5), contentLanguage, includeAllLanguages
El sitio normalmente envia el idioma actual de la ruta como contentLanguage para que las paginas publicas /en-US y /tlh no mezclen por defecto idiomas de autoria de notas en el mismo mapa o franja.
Use includeAllLanguages=true solo cuando el cliente este creando de forma intencional una superficie multilingue de exploracion en lugar de reflejar la pagina del sitio.
curl "https://www.locationnotes.com/api/public/profiles/michael-kappel/notes/nearby?minLatitude=41.87&minLongitude=-87.64&maxLatitude=41.89&maxLongitude=-87.62&contentLanguage=en-US"
Ciclo de sincronización sin conexión
Los clientes de sincronización deben enviar primero los datos locales sucios y luego extraer los cambios del servidor para el usuario, los equipos activos y las notas públicas en el área actual.
Ambas rutas de sincronización requieren autenticación de portador.
POST /api/sync/push
Portador
{
"deviceId": "5dd06ca7-34a5-4f2e-812d-3f1ef3e48290",
"notes": [
{
"noteId": "ef90c4ca-88a9-4a9b-b3a8-36e2649c5dcb",
"ownerUserId": "a7cfd28f-c17f-4cf7-8913-47fa10fd0d1f",
"categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
"title": "Offline inspection",
"body": "Saved while disconnected.",
"contentLanguage": "en-US",
"latitude": null,
"longitude": null,
"visibility": "Private",
"externalLinkUrl": "https://example.com/offline-inspection",
"externalLinkDescription": "",
"applyExternalLinkChanges": true,
"isDeleted": false,
"updatedUtc": "2026-03-13T20:12:00Z",
"clientMutationId": "android-offline-42",
"teamId": null
}
],
"categories": []
}
{
"appliedNoteIds": [
"ef90c4ca-88a9-4a9b-b3a8-36e2649c5dcb"
],
"appliedCategoryIds": [],
"conflicts": []
}
POST /api/sync/pull
Portador
{
"lastSyncUtc": "2026-03-13T19:45:00Z",
"publicArea": {
"minLatitude": 41.78,
"minLongitude": -87.75,
"maxLatitude": 41.96,
"maxLongitude": -87.54
}
}
{
"serverSyncUtc": "2026-03-13T20:13:02Z",
"userNotes": [],
"userCategories": [],
"teamCategories": [],
"publicNotes": [],
"teamNotes": []
}
Los puntos finales de sincronización rechazan solicitudes anónimas. Si el servidor bloquea una versión beta de Android anterior, verifique
GET /api/system/status
para conocer la versión mínima compatible y la URL de la página beta.
Notas personales y categorías.
Estas rutas devuelven el espacio de trabajo del sitio web en el que se ha iniciado sesión y el estado de sincronización personal de Android. Todos requieren autenticación de portador.
Leer notas personales
GET /api/notes/mine
Portador
Cadena de consulta opcional: contentLanguage y límites completos del mapa con minLatitude, minLongitude, maxLatitude, maxLongitude.
Las cargas de lectura de notas ahora incluyen lastActivityUtc para que los clientes puedan mostrar la actividad más reciente por separado de las marcas de tiempo de persistencia/actualización.
crear una nota
POST /api/notes/mine
Portador
{
"categoryId": "4de6bb76-f25d-4c73-b8e3-81b9ca3bf08f",
"title": "Category-only feedback",
"body": "This note stays off the map on purpose.",
"contentLanguage": "en-US",
"externalLinkUrl": "https://example.com/field-guide",
"externalLinkDescription": "",
"latitude": null,
"longitude": null,
"visibility": "VisibleOnceAssociatedTrackableAccessed",
"commentPolicy": "LoggedInUsers"
}
El campo visibility admite Private, Public y VisibleOnceAssociatedTrackableAccessed. El modo asociado a rastreables se comporta como Public hasta que la nota tenga uno o más rastreables asociados. A partir de ese momento, el descubrimiento público y el acceso a la página de la nota exigen que la persona visitante ya haya desbloqueado uno de esos rastreables asociados.
- Todavia no hay trackables asociados: la nota se comporta como una nota publica.
- Despues de la primera asociacion: la nota deja de aparecer en el descubrimiento publico anonimo y en el acceso normal a la pagina publica de la nota.
- Visitante desbloqueado: alguien que ya desbloqueo un trackable asociado puede abrir la pagina de la nota y usar las rutas API publicas conectadas a la pagina de la nota.
- Propietario o miembro autorizado del equipo: conserva el acceso normal a la nota y los permisos de administracion.
Lecturas y acciones de la pagina de la nota
GET /api/public/notes/{noteId}
Anónimo o Portador
GET /api/public/notes/{noteId}/comments
Anónimo o Portador
POST /api/public/notes/{noteId}/comments
Portador
GET /api/public/notes/{noteId}/trackables
Anónimo o Portador
POST /api/public/notes/{noteId}/trackables
Portador
{
"body": "I found it too."
}
{
"trackableSecretCodes": "LN4C8R2Z",
"selectedActiveTrackableIds": [
"f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31"
],
"activeTrackableAttachMode": "Self"
}
Estas rutas de pagina de nota respetan las reglas de acceso de la nota, incluidas las notas privadas y las notas protegidas por acceso de trackable asociado. Si quien llama puede abrir la pagina de la nota, la API puede devolver comentarios y trackables visibles para esa nota. Adjuntar trackables requiere al propietario de la nota o a un administrador del equipo.
- Antes de que exista el primer trackable asociado, estas rutas se comportan como rutas normales de pagina publica de nota.
- Despues de que exista al menos una asociacion, quienes llamen sin acceso a uno de los trackables asociados deben esperar 404 en las rutas publicas de pagina de nota aunque la nota siga existiendo.
- La misma nota aun puede devolver 200 para el propietario, los miembros autorizados del equipo o quienes ya desbloquearon un trackable asociado.
Leer categorías
GET /api/categories/mine
Portador
GET /api/categories/mine/tree
Portador
Ayudas del arbol del espacio de trabajo
GET /api/categories/mine/tree/sections
Portador
GET /api/categories/mine/tree/children?parentCategoryId={categoryId}
Portador
Use estas rutas auxiliares mas ligeras para selectores de categorias con carga diferida y arboles de barra lateral. tree/sections agrupa las categorias raiz por contentLanguage. tree/children devuelve los nodos hijos directos de un padre e incluye childCategoryCount para que el cliente pueda decidir si debe mostrar una opcion de expandir antes de cargar los nietos.
[
{
"contentLanguage": "en-US",
"rootCategories": [
{
"categoryId": "68cb4c9b-d9bd-4bde-8c6a-a03a4c70b283",
"name": "Field Reports",
"contentLanguage": "en-US",
"parentCategoryId": null,
"childCategoryCount": 2
}
]
}
]
[
{
"categoryId": "c4b2e65f-5cf2-4ab6-8577-a89dfb51407f",
"name": "Dock checks",
"contentLanguage": "en-US",
"parentCategoryId": "68cb4c9b-d9bd-4bde-8c6a-a03a4c70b283",
"childCategoryCount": 0
}
]
Crear o mover categorías
POST /api/categories/mine
Portador
POST /api/categories/mine/{categoryId}/move
Portador
{
"name": "Field Reports",
"contentLanguage": "en-US",
"parentCategoryId": null
}
Traspaso GPX de waypoints personales
GET /api/notes/mine/gpx
Portador
GET /api/notes/mine/gpx exporta solo notas personales mapeadas con coordenadas guardadas como waypoints GPX 1.1.
POST /api/notes/mine/gpx
Portador
POST /api/notes/mine/gpx acepta envíos multipart con file, visibility y contentLanguage opcional. La importación lee solo entradas de waypoint, crea notas mapeadas normales y nunca sobrescribe una nota existente.
Las comprobaciones de duplicados se quedan dentro del ambito personal seleccionado. Los titulos y coordenadas coincidentes con el mismo texto de nota se informan como duplicados. Los titulos y coordenadas coincidentes con texto de nota diferente se omiten para evitar sobrescritura.
curl "https://www.locationnotes.com/api/notes/mine/gpx" \
-H "Authorization: Bearer <access token>"
curl -X POST "https://www.locationnotes.com/api/notes/mine/gpx" \
-H "Authorization: Bearer <access token>" \
-F "file=@waypoints.gpx;type=application/gpx+xml" \
-F "visibility=Private" \
-F "contentLanguage=en-US"
Que son la importacion y la exportacion?
explica en que se diferencia el intercambio GPX de waypoints frente a las exportaciones completas de cuenta en JSON y ZIP portable.
Puntos finales del equipo
Las rutas de equipo cubren membresía, invitaciones, configuraciones, notas de equipo y categorías de equipo. Todos requieren autenticación de portador y el servidor aplica permisos de administrador/miembro por ruta.
Lecturas comunes
GET /api/teams
GET /api/teams/{teamId}/notes
GET /api/teams/{teamId}/categories
GET /api/teams/{teamId}/categories/tree
GET /api/teams/{teamId}/invite-links
Los modelos de lectura de notas de equipo y de equipo incluyen lastActivityUtc. El recorte público prefiere primero los registros activos más recientes.
Ayudas del arbol de categorias del equipo
GET /api/teams/{teamId}/categories/tree/sections
Portador
GET /api/teams/{teamId}/categories/tree/children?parentCategoryId={categoryId}
Portador
Estas rutas usan las mismas formas de seccion y nodos secundarios que las ayudas del arbol del espacio de trabajo personal, pero los datos permanecen dentro del ambito del equipo seleccionado y aun requieren membresia activa del equipo.
Utilice DELETE /api/teams/{teamId}/notes/{noteId} cuando la nota deba salir del espacio de trabajo del equipo pero seguir existiendo para el propietario, y use DELETE /api/teams/{teamId}/notes/{noteId}/delete cuando la propia nota del equipo deba eliminarse permanentemente.
crear un equipo
{
"name": "Beta Testers",
"title": "Beta Testers",
"description": "Public beta release gate for Android validation.",
"externalLinkUrl": "https://example.com/beta-program",
"externalLinkDescription": "",
"joinPolicy": "RequestsAllowed",
"pageVisibility": "Public",
"defaultNoteVisibility": "Public",
"contentLanguage": "en-US"
}
Crear una nota de equipo
POST /api/teams/{teamId}/notes
Portador
{
"categoryId": "68cb4c9b-d9bd-4bde-8c6a-a03a4c70b283",
"title": "Shared dock inspection",
"body": "Visible to the team until we publish it.",
"contentLanguage": "en-US",
"externalLinkUrl": "https://example.com/shared-briefing",
"externalLinkDescription": "",
"latitude": 41.8818,
"longitude": -87.6231,
"visibility": "Private",
"commentPolicy": "TeamMembers"
}
Traspaso GPX de waypoints de equipo
GET /api/teams/{teamId}/notes/gpx
Portador
POST /api/teams/{teamId}/notes/gpx
Portador
GET /api/teams/{teamId}/notes/gpx y POST /api/teams/{teamId}/notes/gpx aplican las mismas reglas GPX dentro del ambito del equipo seleccionado. Las comprobaciones de duplicado y sobrescritura solo se comparan con las notas de ese equipo.
curl "https://www.locationnotes.com/api/teams/{teamId}/notes/gpx" \
-H "Authorization: Bearer <access token>"
curl -X POST "https://www.locationnotes.com/api/teams/{teamId}/notes/gpx" \
-H "Authorization: Bearer <access token>" \
-F "file=@team-waypoints.gpx;type=application/gpx+xml" \
-F "visibility=Public" \
-F "contentLanguage=en-US"
Operaciones de membresía e invitación
POST /api/teams/{teamId}/memberships/request
POST /api/teams/{teamId}/memberships/invite
POST /api/teams/{teamId}/memberships/{membershipId}/accept
POST /api/teams/{teamId}/memberships/{membershipId}/refuse
POST /api/teams/{teamId}/memberships/{membershipId}/approve
POST /api/teams/{teamId}/memberships/{membershipId}/deny
POST /api/teams/{teamId}/memberships/{membershipId}/promote-admin
DELETE /api/teams/{teamId}/memberships/{membershipId}
POST /api/teams/invite-links/{teamSlug}/{inviteCode}/join
{
"isSingleUse": false
}
{
"inviteLinkId": "9a4726dc-4fb1-4c16-b7b3-5d48ea68fdce",
"teamId": "0f4ddf5d-f3dc-4417-b96d-8e212d24235e",
"teamName": "Invite Team",
"teamSlug": "invite-team",
"code": "8K4V9T",
"createdByDisplayName": "invite-admin",
"createdByCurrentUser": true,
"inviterIsCurrentlyAdmin": true,
"isSingleUse": false,
"createdUtc": "2026-03-18T21:15:00Z"
}
{
"teamSlug": "invite-team",
"membershipStatus": "RequestingMembership"
}
Puntos finales rastreables
Los rastreables admiten la exploración de códigos públicos, acceso a códigos secretos o QR de solo escaneo, revelación secreta única durante la creación, sesiones activas en el navegador, comentarios y flujos de trabajo de inventario agrupados.
Los códigos cortos secretos y las URL QR de solo escaneo solo se devuelven desde los puntos finales de creación que aparecen a continuación. Nunca más regresan de rutas de lectura, búsqueda, comentarios o detalles.
Reglas rastreables importantes:
- Los códigos públicos son tokens públicos cortos que siguen siendo globalmente únicos en todos los rastreables.
- Los códigos públicos y los códigos secretos cortos no chocan entre sí, por lo que un código corto no puede significar ambas cosas.
- Los códigos secretos cortos y las URL QR de solo escaneo son credenciales de acceso basadas en posesión.
- Piense en los trackables y grupos de trackables como visibles tras el acceso o siempre visibles para todos. El acceso secreto usado con sesión iniciada puede guardarse en la cuenta para dispositivos posteriores.
- Los formularios para adjuntar notas del sitio web aceptan un código rastreable a la vez y solo se adjuntan a partir de una coincidencia de código secreto breve existente.
- Si aún no se ha registrado un código externo, primero cree el rastreable. La entrada manual de notas adjuntas no registra automáticamente nuevos códigos de terceros.
- La activación se infiere de OwnerUserId; no existe un indicador de activación persistente independiente.
- Los rastreables no activados no se pueden adjuntar a notas y no pueden aceptar comentarios.
- Un rastreable puede pertenecer solo a un grupo a la vez, y para cambiar de grupo es necesario desconectarlo primero y luego volverlo a conectar.
Formatos y ejemplos de identificadores
| . |
Ejemplo |
regla de búsqueda |
| Token de código público |
LN-7K4V9T |
Token publico corto y globalmente unico. Seguro para busqueda publica y enlaces publicos. |
| Ruta de entrada pública |
GET /trackable/LN-7K4V9T |
URL corta publica para compartir. La misma ruta base se usa para codigos publicos, codigos secretos cortos y tokens QR largos solo de escaneo. |
| Página rastreable pública localizada |
GET /en-US/trackables/LN-7K4V9T |
Pagina publica representada especifica del idioma a la que se llega despues de que la URL compartida resuelve el codigo. |
| Ruta de entrada secreta |
GET /trackable/LN4C8R2Z |
URL corta de entrada basada en posesion para quien sostiene el objeto. Usa la misma ruta base <code>/trackable/{code}</code> que las formas publica y de escaneo largo. |
| Código secreto corto del sistema |
LN4C8R2Z |
Unico a nivel global entre todos los trackables y tambien unico frente a los codigos publicos. Pensado para entrada manual basada en posesion. |
| Prefijo del sistema alternativo |
GT8M2Q7V |
El mismo patron generado de secreto corto en implementaciones hermanas que usan el prefijo <code>GT</code>. |
| Trae tu propio código secreto |
ITEM42X |
Identificador externo avanzado. Debe seguir siendo unico entre todos los trackables y no debe empezar con <code>LN</code> ni <code>GT</code>. |
| Ruta de escaneo privada |
https://locationnotes.com/trackable/AB4D5QW2...<100 chars total>... |
Unico entre todos los trackables y pensado para provenir del escaneo QR en lugar de la entrada manual. |
Los tokens de código público generados y los cuerpos secretos breves generados utilizan la misma familia de caracteres resistentes a las manchas. La búsqueda escrita trata a O como 0, I o L como 1, S como 5 y U como V. Para los códigos secretos cortos del sistema, esa normalización se aplica al cuerpo generado después del prefijo literal. Los códigos públicos utilizan el mismo prefijo configurado con un guión antes del cuerpo generado, por lo que son visualmente distintos de los códigos secretos cortos.
Lecturas de lista y detalle
Las lecturas de la lista pública están limitadas por el límite de exposición de datos públicos del sitio, que actualmente es 500 de forma predeterminada.
Los modelos de lectura rastreables y de grupos rastreables incluyen lastActivityUtc para que los paneles y los clientes API puedan mostrar la actividad reciente de manera explícita.
GET /api/trackables/public
GET /api/trackables/mine
GET /api/trackables/{trackableId}
POST /api/trackables/{trackableId}/watch
DELETE /api/trackables/{trackableId}/watch
GET /api/trackables/{trackableId}/journey
POST /api/trackables/{trackableId}/journey-stops
DELETE /api/trackables/{trackableId}/journey-stops/{journeyStopId}
GET /api/trackables/public y las paginas publicas de exploracion de trackables del sitio siguen siendo multilingues para que los datos publicos de recorrido y logistica no queden ocultos por el idioma de la ruta.
Cambie el idioma del sitio cuando quiera la interfaz localizada alrededor de los mismos datos publicos del trackable.
Crear un trackable
POST /api/trackables
Portador
{
"name": "Promo coin",
"description": "Launch event inventory item",
"externalLinkUrl": "https://example.com/promo-coin",
"externalLinkDescription": "",
"teamId": null,
"visibility": "AlwaysVisibleToEveryone",
"activateImmediately": false,
"secretCode": ""
}
{
"trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
"heading": "Unactivated Trackable",
"description": "Please activate this trackable item",
"items": [
{
"trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
"name": "Unactivated Trackable",
"publicCode": "LN-7K4V9T",
"secretCode": "LN4C8R2Z",
"scanUrl": "https://locationnotes.com/trackable/ABCD...<100 characters total>...",
"qrPayload": "ABCD...<100 characters total>..."
}
]
}
Trae tu propio código secreto
{
"name": "Marketing token",
"description": "Bring-your-own identifier",
"teamId": null,
"visibility": "VisibleOnceAccessed",
"activateImmediately": true,
"secretCode": "TAG42"
}
El servidor acepta codigos secretos proporcionados por la persona que llama que no comienzan con LN, GT ni GC y no coinciden con ningun codigo publico o secreto existente. El codigo publico devuelto todavia lo genera el sistema.
Crear un grupo
POST /api/trackables/groups
Portador
{
"name": "Gnomes in this hunt",
"description": "Seasonal hunt inventory",
"defaultTrackableTitle": "",
"defaultTrackableDescription": "",
"defaultExternalLinkUrl": "https://example.com/hunt-rules",
"defaultExternalLinkDescription": "",
"trackableCount": 12,
"teamId": null,
"visibility": "AlwaysVisibleToEveryone",
"activateImmediately": false,
"watchGroupActivityWhenCreated": true
}
Los grupos están limitados a 100 rastreables. Los elementos no activados vuelven a los valores predeterminados del grupo hasta su activación. Una vez activados, deberán utilizar su propio título y descripción.
La creacion de grupos de trackables tambien puede aceptar watchGroupActivityWhenCreated cuando un lote sin activar debe empezar en la lista de seguimiento del creador.
Búsqueda y sesión activa.
POST /api/trackables/lookup coincide con un token de código público o un código secreto corto después de normalizar las sustituciones comunes de caracteres borrosos enumeradas anteriormente.
GET /trackable/{code} es la ruta corta de entrada al sitio web que se muestra a los usuarios y clientes API. Acepta un código público, un código secreto corto o el token QR largo y luego lo dirige al flujo correcto.
GET /api/trackables/active enumera la sesión de código secreto activa actual del cliente cuando existe.
GET /api/trackables/active/{trackableId} devuelve la carga útil de aterrizaje activa, incluidos los requisitos de activación y los elementos agrupados cuando estén disponibles.
POST /api/trackables/active/{trackableId}/message actualiza el texto de estado recordado.
DELETE /api/trackables/active/{trackableId} finaliza la sesión de código secreto recordada en ese cliente.
Las búsquedas de códigos secretos y las visitas de QR de solo escaneo crean una sesión de cliente activa en lugar de devolver el valor secreto. Esa sesión activa es lo que permite que los flujos de notas posteriores adjunten el rastreable sin tener que volver a ingresar el código.
Cuando la persona que llama se autentica, la misma búsqueda Visible una vez accedida también vincula el rastreable a esa cuenta para que los dispositivos que hayan iniciado sesión posteriormente puedan reabrir el rastreable, su página de grupo y las rutas de seguimiento normales sin volver a ingresar el secreto.
El sitio web utiliza intencionalmente la misma ruta base de entrada directa para los tres formularios: /trackable/{publicCode}, /trackable/{secretCode} y /trackable/{qrToken}.
La ruta localizada /{lang}/trackable/{code} es la llegada renderizada de un solo elemento despues de la seleccion automatica de idioma, pero aun asi no deberia mostrarse como la URL para compartir o imprimir.
Despues de que se resuelve la busqueda de un codigo publico, la pagina publica renderizada queda en /{lang}/trackable/{publicCode}.
Esa ruta de entrada compartida sigue siendo válida incluso si las longitudes de los códigos cortos configurados cambian más adelante, porque el servidor resuelve el valor del código en lugar de depender de las variaciones de la ruta del sitio web codificadas.
Las rutas rastreables de sitios web controladas por el propietario no forman parte intencionalmente del sistema de URL público.
Esa distinción también se aplica a las páginas de notas: un código público sirve para abrir la página pública rastreable, mientras que el archivo adjunto de una nota espera un código secreto breve existente o una sesión de navegador ya activa.
GET /api/trackables/lookup?code=LN4C8R2Z
{
"found": true,
"trackableId": "f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31",
"isPublicCodeMatch": false,
"usesSecretAccess": true,
"redirectUrl": "/en-US/trackables/active/f3a8f841-20db-4f1e-a3f8-9f14bc0b3c31"
}
GET /trackable/LN-7K4V9T
GET /en-US/trackables/LN-7K4V9T
GET /trackable/ABCD...<100 characters total>...
Activar para uno mismo o para el equipo
POST /api/trackables/{trackableId}/activate
Portador
{
"name": "",
"description": "",
"useGroupDefaultTitle": true,
"useGroupDefaultDescription": true,
"externalLinkUrl": "",
"externalLinkDescription": "",
"useGroupDefaultExternalLink": true,
"teamId": "optional-team-guid"
}
Si se proporciona teamId, el rastreable pasa a ser propiedad del equipo, los administradores del equipo pueden administrarlo y el miembro activador mantiene el control mientras permanece en ese equipo. Sin teamId, el rastreable pasa a ser de propiedad personal.
Cuando se activa un elemento agrupado, el propietario puede guardar un título y una descripción explícitos del elemento o copiar intencionalmente el título y la descripción predeterminados actuales del grupo en el elemento.
Separar y volver a unir grupos
DELETE /api/trackables/{trackableId}/group elimina la asociación de grupo actual.
POST /api/trackables/{trackableId}/group con { "trackableGroupId": "..." } asocia un rastreable separado con un nuevo grupo.
POST /api/trackables/groups/{trackableGroupId}/watch empieza a seguir los miembros visibles del grupo. Los seguimientos existentes de elementos miembros de ese mismo grupo todavia pueden consolidarse en el seguimiento del grupo, y la superposicion de propietario o seguidor se deduplica por usuario.
DELETE /api/trackables/groups/{trackableGroupId}/watch deja de supervisar el grupo.
Un rastreable sólo puede pertenecer a un grupo a la vez. El servidor aplica la regla de desconexión primero. Solo el activador original puede volver a adjuntar un rastreable desconectado, y el grupo de destino también debe ser controlado por ese usuario o un administrador de equipo elegible.
{
"trackableGroupId": "4bdffcab-bb51-4fd8-8c15-59f7b2d72c3f"
}
Comentarios del trackable
GET /api/trackables/{trackableId}/comments
POST /api/trackables/{trackableId}/comments
PUT /api/trackables/{trackableId}/comments/{commentId}
DELETE /api/trackables/{trackableId}/comments/{commentId}
Los rastreables no activados no pueden recibir comentarios ni paradas de viaje.
Los usuarios autenticados pueden publicar comentarios directamente. Las personas que llaman anónimamente también pueden publicar, pero cada escritura anónima debe provenir de la sesión rastreable activa de ese navegador o reenviar el código secreto corto exacto o el token QR privado para ese rastreable específico.
Solo el autor del comentario que haya iniciado sesión puede editar su propio comentario. Los propietarios rastreables y los administradores actuales del equipo pueden eliminar comentarios o paradas del viaje, pero aún no pueden reescribir las palabras de otra persona.
{
"body": "Starting the route now.",
"accessCode": "LN4C8R2Z"
}
Paradas de viaje directo
El feed del recorrido ahora es un historial inmutable de paradas. Las paradas respaldadas por notas capturan una instantanea de la ubicacion cuando se adjunta la nota, y los reportes directos en el mapa pueden guardarse sin crear primero una nota.
Si una nota vinculada luego se mueve a una coordenada diferente, el viaje rastreable aún mantiene la parada original para que el historial de logística no se reescriba silenciosamente.
Los informes directos anónimos siguen la misma regla que los comentarios anónimos: la persona que llama debe usar la sesión rastreable activa de ese navegador o reenviar el código secreto corto o el token QR privado en la solicitud de escritura.
{
"latitude": 41.8819,
"longitude": -87.6278,
"accessCode": "LN4C8R2Z"
}
GET /api/trackables/{trackableId}/journey devuelve los datos del lugar con la etiqueta como referencia principal. Cada punto incluye coordinateId, locationLabel y currentNotesAtCoordinate para que los clientes puedan mostrar las notas visibles actuales en esa coordenada sin tratar la parada como si tuviera una sola nota guardada propia.
Las respuestas del recorrido ya no dividen el contrato externo del lugar en campos city, stateOrProvince y country. Lea locationLabel junto con las coordenadas.
[
{
"journeyStopId": "8a274ad6-5dd4-45c4-969a-c13cc1b8d92c",
"coordinateId": "565c42dd-2e12-49b4-a16b-c89ff4502b8e",
"latitude": 41.8819,
"longitude": -87.6278,
"associatedUtc": "2026-04-05T18:30:00Z",
"isLocationOnly": false,
"isAnonymous": false,
"canDelete": false,
"canConvertToNote": false,
"locationLabel": "Chicago, Illinois, United States",
"creatorDisplayText": "Jordan",
"creatorProfileUserName": "jordan",
"currentNotesAtCoordinate": [
{
"noteId": "4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3",
"title": "Lobby drop",
"contentLanguage": "en-US",
"thumbnailUrl": "/api/images/notes/4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3/thumbnail"
}
]
}
]
Visibilidad y divulgación del recorrido
Las páginas de viaje rastreables pueden mostrar ubicaciones mapeadas incluso cuando algunas notas subyacentes sean privadas. En esos casos, los espectadores no autorizados pueden recibir el punto de ubicación pero no el contenido de la nota protegida.
Los espectadores autorizados reciben el título de la nota, la descripción y el enlace de la nota directamente desde la carga útil del viaje precargada y las ventanas emergentes de pin del mapa.
Eliminación y retención
Eliminar una cuenta no elimina automáticamente todos los rastreables que esa cuenta haya tocado. Los rastreables compartidos o propiedad del equipo pueden permanecer mientras solo se elimina la actividad personal extraíble del usuario eliminado.
Revise la página Eliminar datos y la sección API de eliminación de cuenta para conocer los límites de retención actuales.
Guías de flujo rastreables
La API rastreable tiene un flujo de trabajo de propiedad con inicio de sesión completo y un flujo de trabajo de informes anónimo respaldado por secretos más ligero.
Utilice las páginas dedicadas a continuación cuando necesite secuencias de llamadas ordenadas, puntos de decisión y ejemplos de copiar y pegar en lugar de un catálogo de rutas.
Flujo autenticado
Desde la búsqueda de elementos encontrados hasta el acceso secreto al navegador, el inicio de sesión, la activación, la vinculación de notas, el registro directo del viaje, la moderación y las consideraciones de exportación/eliminación.
Abra la guía de flujo de API rastreable autenticada
Flujo anónimo
Para personas que llaman que no inician sesión pero tienen el código secreto exacto o el token QR privado y necesitan publicar un informe de ubicación directo o comentar de forma segura.
Abra la guía de flujo de API rastreable anónima
búsqueda de errores
Las respuestas rastreables de detalles del problema ahora incluyen un campo de código estable legible por máquina. Utilice la página de referencia de errores para asignar fallas a causas probables y soluciones.
Abra la referencia de error de API rastreable
Compatibilidad con API de enlace externo
El soporte de enlaces externos está disponible en las API de nota, equipo, rastreable, grupo rastreable y sincronización. Los clientes pueden llamar primero al punto final de verificación, pero la creación y actualización de rutas aún revalidan el enlace del lado del servidor antes de guardar.
Verificar un enlace
POST /api/external-links/verify
Portador
Llame a esto antes de mostrar el campo de descripción en un cliente personalizado. Una respuesta exitosa devuelve una URL normalizada, la descripción sugerida en el título de la página y una URL de soporte para problemas de revisión. Las respuestas fallidas devuelven HTTP 400 con un mensaje detallado, una URL de soporte y un código de estado ascendente cuando el sitio de destino devolvió un error HTTP.
{
"url": "https://example.com/hunt-rules"
}
{
"normalizedUrl": "https://example.com/hunt-rules",
"suggestedDescription": "Example Domain",
"supportUrl": "/es-US/support"
}
{
"title": "Request rejected.",
"status": 400,
"detail": "The external page returned HTTP 405 Method Not Allowed during verification.",
"supportUrl": "/es-US/support",
"upstreamStatusCode": 405
}
Campos de nota, equipo y sincronización
Cree y actualice cargas útiles de notas, equipos y sincronización utilizando externalLinkUrl más externalLinkDescription. Cuando ApplyExternalLinkChanges es verdadero en las cargas útiles de notas de sincronización, el servidor revalida el enlace antes de guardarlo.
CreateNoteRequest.ExternalLinkUrl
CreateNoteRequest.ExternalLinkDescription
CreateTeamRequest.ExternalLinkUrl
CreateTeamRequest.ExternalLinkDescription
UpdateTeamSettingsRequest.ExternalLinkUrl
UpdateTeamSettingsRequest.ExternalLinkDescription
NoteDto.ExternalLinkUrl
NoteDto.ExternalLinkDescription
NoteDto.ApplyExternalLinkChanges
Campos rastreables y de grupo
En las solicitudes de creacion y actualizacion de trackables se usan externalLinkUrl, externalLinkDescription y externalLinkAppendPublicTrackableCode. Para crear y actualizar grupos de trackables se usan defaultExternalLinkUrl, defaultExternalLinkDescription y defaultExternalLinkAppendPublicTrackableCode. La activacion tambien admite useGroupDefaultStatusMessage junto con useGroupDefaultTitle, useGroupDefaultDescription y useGroupDefaultExternalLink cuando la persona propietaria quiere arrancar deliberadamente desde los valores predeterminados del grupo.
TrackableGroupCreateInputModel.Name acepta letras, numeros, espacios y mayusculas en las solicitudes. El servidor guarda el slug de la pagina por separado en minusculas con guiones bajos y mantiene ese slug fijo despues de la creacion.
Cuando un enlace guardado de trackable o un enlace predeterminado de grupo de trackables activa esta opcion, LocationNotes agrega LN={publicCode} solo cuando el clic empieza desde una pagina de trackable especifica. Las paginas de grupo siguen usando la URL guardada por si sola porque alli no hay ningun codigo de trackable individual en contexto.
La activación también puede aceptar valores opcionales de initialJourneyStopLatitude e initialJourneyStopLongitude cuando la primera ubicación rastreada debe crearse en la misma solicitud.
TrackableCreateInputModel.ExternalLinkUrl
TrackableCreateInputModel.ExternalLinkDescription
TrackableCreateInputModel.ExternalLinkAppendPublicTrackableCode
TrackableActivationInputModel.StatusMessage
TrackableGroupCreateInputModel.DefaultExternalLinkUrl
TrackableGroupCreateInputModel.DefaultExternalLinkDescription
TrackableGroupCreateInputModel.DefaultExternalLinkAppendPublicTrackableCode
TrackableGroupCreateInputModel.DefaultStatusMessage
TrackableGroupCreateInputModel.WatchGroupActivityWhenCreated
TrackableActivationInputModel.UseGroupDefaultTitle
TrackableActivationInputModel.UseGroupDefaultDescription
TrackableActivationInputModel.UseGroupDefaultStatusMessage
TrackableActivationInputModel.ExternalLinkUrl
TrackableActivationInputModel.ExternalLinkDescription
TrackableActivationInputModel.UseGroupDefaultExternalLink
TrackableActivationInputModel.InitialJourneyStopLatitude
TrackableActivationInputModel.InitialJourneyStopLongitude
Comportamiento del servidor
- Los clientes deben tratar externalLinkDescription como no disponible hasta que la verificación se realice correctamente.
- Si el cliente deja la descripción en blanco, el servidor utiliza el título de la página verificada o "no se encontró ningún título en la página externa".
- Los destinos rechazados pueden fallar porque el formato de la URL no es válido, el host es local o privado, no se pudo acceder a la página, la página no arrojó resultados exitosos o se encontraron señales de contenido para adultos.
- Las páginas públicas muestran enlaces externos guardados a través de una página de salida LocationNotes en lugar de enviar al visitante directamente al destino de terceros.
Puntos finales de imagen
La visibilidad de la imagen siempre sigue al elemento principal. Si la persona que llama puede abrir la página de perfil, nota, equipo, rastreable o de grupo rastreable conectado, la persona que llama también puede abrir sus imágenes. Si no se puede acceder al elemento principal, las lecturas de la lista de imágenes no devuelven elementos y las descargas directas de imágenes devuelven 404.
Los clientes también deben recordar que las cargas se examinan antes de guardarlas, los originales no se conservan y el servidor solo almacena variantes JPEG redimensionadas. Tanto el sitio web como la aplicación de Android utilizan estos mismos contratos API y rutas de archivos.
Listar imágenes por padre
GET /api/images/profiles/{userId}
Anónimo o Portador
GET /api/images/notes/{noteId}
Anónimo o Portador
GET /api/images/teams/{teamId}
Anónimo o Portador
GET /api/images/trackables/{trackableId}
Anónimo o Portador
GET /api/images/trackable-groups/{trackableGroupId}
Anónimo o Portador
Utilice estas lecturas para poblar galerías. Cada elemento incluye el GUID de la imagen, las dimensiones originales y las URL relativas para las copias almacenadas en miniatura, pequeñas, medianas y grandes.
originalWidth y originalHeight describen la imagen fuente cargada como referencia. Los archivos descargables reales siguen siendo las variantes redimensionadas almacenadas y enlazadas por thumbnailUrl, smallUrl, mediumUrl y largeUrl.
curl "https://www.locationnotes.com/api/images/notes/4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3"
[
{
"contentImageId": "f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1",
"targetType": 1,
"noteId": "4d6c5df3-3c53-4d0e-8e72-7d98a0f8a9f3",
"originalWidth": 1600,
"originalHeight": 1200,
"createdUtc": "2026-03-18T21:15:00Z",
"thumbnailUrl": "/Images/Thumbnail/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-64.jpg",
"smallUrl": "/Images/Small/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-306.jpg",
"mediumUrl": "/Images/Medium/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-612.jpg",
"largeUrl": "/Images/Large/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-1024.jpg"
}
]
Descargar bytes almacenados
GET /api/images/{contentImageId}/{variant}
Anónimo o Portador
Los valores de variante válidos son miniatura, pequeño, mediano y grande. Las respuestas devuelven imagen/jpeg.
Las URL de los archivos del sitio web en /Images/{Variant}/{guid}-{size}.jpg aplican la misma regla de visibilidad principal antes de que se entreguen los bytes de la imagen, por lo que los enlaces directos de las imágenes aún están protegidos por los permisos de perfil, nota, equipo, rastreable o grupo rastreable conectados.
curl -L "https://www.locationnotes.com/api/images/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1/large" --output note-large.jpg
Subir imagenes
POST /api/images/profiles
Portador
POST /api/images/notes/{noteId}
Portador
POST /api/images/teams/{teamId}
Portador
POST /api/images/trackables/{trackableId}
Portador
POST /api/images/trackable-groups/{trackableGroupId}
Portador
Envíe un campo de archivo de varias partes llamado archivo. La persona que llama ya debe tener permiso de administración principal para el objetivo, lo que significa acceso de administrador de equipo para las páginas del equipo y el permiso normal de edición/administración para los otros tipos de padres. Las cargas se analizan antes de guardarlas y luego se almacenan solo como copias JPEG redimensionadas.
curl -X POST "https://www.locationnotes.com/api/images/trackables/721f5205-ed2c-43e8-8ecd-1502d5bb7b56" \
-H "Authorization: Bearer <access token>" \
-F "file=@tracker.jpg"
{
"image": {
"contentImageId": "f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1",
"targetType": 3,
"trackableId": "721f5205-ed2c-43e8-8ecd-1502d5bb7b56",
"originalWidth": 1600,
"originalHeight": 1200,
"createdUtc": "2026-03-18T21:15:00Z",
"thumbnailUrl": "/Images/Thumbnail/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-64.jpg",
"smallUrl": "/Images/Small/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-306.jpg",
"mediumUrl": "/Images/Medium/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-612.jpg",
"largeUrl": "/Images/Large/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1-1024.jpg"
}
}
Eliminar imágenes
DELETE /api/images/{contentImageId}
Portador
La eliminación requiere el mismo permiso de administración principal que la carga. Cuando la eliminación se realiza correctamente, la fila de imagen de contenido y todas las variantes redimensionadas almacenadas se eliminan juntas.
Los clientes de la API deben usar aquí el verbo HTTP DELETE. Si alguien abre esta URL directamente en la barra de direcciones del navegador, el navegador enviará GET y la respuesta será 405 Method Not Allowed porque esta ruta no es una página de descarga.
Los botones de eliminación del sitio web usan la ruta localizada del formulario del sitio en /{culture}/images/{contentImageId}/delete para que las eliminaciones desde la galería del navegador conserven la protección antifalsificación.
curl -X DELETE "https://www.locationnotes.com/api/images/f1d52aa2-4d59-49bf-8d21-7d0b4e9e57f1" \
-H "Authorization: Bearer <access token>"
Que es una Imagen? explica las reglas de visibilidad, moderación, informes, cambio de tamaño, exportación y eliminación detrás de estas rutas.
Informes de cumplimiento
Use estas rutas para reportes de contenido inapropiado, errores de sistema rastreados y los mismos registros de tickets de soporte que respaldan el flujo de solicitudes de soporte del sitio web.
Las personas que llaman anónimamente pueden enviar informes, pero solo los informantes que hayan iniciado sesión pueden realizar un seguimiento posterior de las actualizaciones de estado y las resoluciones de los superadministradores a través de la API.
Enviar un informe
POST /api/compliance/reports
Anónimo o Portador
Si la solicitud est? autenticada mediante la cookie del sitio web o un token bearer, el informe creado se vincula a esa cuenta para que aparezca en GET /api/compliance/reports/mine.
{
"pageType": 2,
"contentType": 5,
"pageTitle": "Reported note title",
"pageUrl": "/en-US/Note/2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a#note-page-title",
"pageReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a",
"contentLabel": "Note Page title and content",
"contentReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a:page-content",
"contentPreview": "Title: Reported note title\n\nContent: Reported note body",
"reportTitle": "Needs review",
"reportExplanation": "This title is not appropriate for a public note."
}
Realice un seguimiento de un ticket de API o informe un error de la aplicación
POST /api/compliance/errors
Anónimo o Portador
Si una ruta API ya falló con un 500 inesperado y devolvió un ticketNumber en el JSON de detalles del problema, publique ese ticket aquí en lugar de crear una segunda fila de registro de errores. Incluya userExplanation y configure trackInSupportTickets cuando la persona que llama quiera un seguimiento del superadministrador.
{
"ticketNumber": "ERR-1M7Q4D9K2X5R8V6N",
"userExplanation": "Android app hit this right after I tapped refresh twice.",
"trackInSupportTickets": true,
"clientContext": {
"platform": "Android",
"screen": "My Journeys",
"appVersion": "1.0.0-beta.20260318.1"
}
}
Cuando la falla ocurrió solo dentro de la aplicación de Android y aún no hay ningún ticket del servidor, cree un nuevo ticket de error con un marcador que describa dónde estaba la aplicación.
{
"pageMarkerType": "Android screen",
"pageMarker": "My Journeys",
"requestCulture": "en-US",
"requestUrl": "https://locationnotes.com/api/trackables/active/721f5205-ed2c-43e8-8ecd-1502d5bb7b56?includeHistory=true",
"httpMethod": "GET",
"responseStatusCode": 503,
"exceptionType": "Java.Lang.IllegalStateException",
"exceptionMessage": "Journey list render failed.",
"stackTrace": "at com.locationnotes.trackables.MyJourneysFragment.render(MyJourneysFragment.kt:42)",
"userExplanation": "This happened right after scanning a QR code.",
"trackInSupportTickets": true,
"clientContext": {
"platform": "Android",
"deviceModel": "Pixel 9",
"osVersion": "Android 17",
"appVersion": "1.0.0-beta.20260318.1"
}
}
{
"ticketNumber": "ERR-1M7Q4D9K2X5R8V6N",
"usedExistingTicket": false,
"explanationSaved": true,
"trackedInSupportTickets": true,
"trackedContentReportId": "d91f6e1c-b8e2-4e38-9e96-f2de0cc4f0e2"
}
Utilice valores de pageMarkerType como URL, pantalla de Android o tarea en segundo plano de Android. Para los tickets generados por el servidor, mantenga el marcador de URL original y envíe el ticketNumber devuelto aquí para que la URL de API registrada permanezca adjunta al mismo ticket.
Lecturas de estado del reportero
GET /api/compliance/reports/mine
Portador
GET /api/compliance/reports/{contentReportId}
Portador
Estas rutas devuelven solo los informes de la persona que llama, a menos que la persona que llama sea un superadministrador. Úselos para mostrar Reportado, Revisando o Resuelto además de cualquier nota de resolución final tanto para informes de contenido como para errores del sistema rastreados.
{
"contentReportId": "3ab419ab-4b71-4d43-b52c-303d6039f01f",
"reporterUserId": "6d650c55-b235-4370-8572-e4b772cd1aea",
"pageType": 2,
"pageTypeLabel": "Note Page",
"contentType": 5,
"contentTypeLabel": "Title and content",
"status": 2,
"statusLabel": "Resolved",
"pageTitle": "Reported note title",
"pageUrl": "/en-US/Note/2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a#note-page-title",
"pageReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a",
"contentLabel": "Note Page title and content",
"contentReference": "2f4a9f80-b7db-4f4b-9d34-0c2cb8777d9a:page-content",
"contentPreview": "Title: Reported note title\n\nContent: Reported note body",
"reportTitle": "Needs review",
"reportExplanation": "This title is not appropriate for a public note.",
"resolutionText": "Reviewed and recorded for moderation follow-up.",
"reporterDisplayName": "site-compliance-reporter",
"reviewerDisplayName": "site-compliance-admin",
"createdUtc": "2026-03-18T18:00:00Z",
"reviewedUtc": "2026-03-18T18:10:00Z"
}
Revisión de superadministrador
GET /api/compliance/reports
Portador + SuperAdmin
PUT /api/compliance/reports/{contentReportId}
Portador + SuperAdmin
La lista de administradores incluye el enlace del informe, los metadatos de la página, los metadatos del contenido ofensivo, la identidad del denunciante cuando esté disponible y cualquier nota de revisión anterior. Las actualizaciones escriben el estado de revisión actual y el texto de resolución visible.
{
"status": 1,
"resolutionText": "Review opened and queued for follow-up."
}
Establezca el estado en 2 e incluya un texto de resolución que no esté vacío al cerrar un informe como resuelto.
Valores de enumeración
pageType: 0 La página de perfil, 1 página del equipo, 2 página de notas, 3 La página rastreable, 4 página de grupo rastreable, 5 error del sistema, 6 pagina de soporte
contentType: 0 título, 1 descripción, 2 comentario, 3 cuerpo, 4 biografía, 5 título y contenido, 6 detalles del error, 7 imagen, 8 solicitud de soporte
status: 0 informado, 1 revisando la sección, 2 resuelto
Los informes a nivel de página del sitio web ahora usan 5, por lo que un botón de informe puede cubrir tanto el título visible como la descripción/cuerpo visible juntos. Los informes a nivel de comentarios todavía utilizan los tipos de contenido específicos de comentarios.
Las solicitudes generales de soporte del sitio crean tickets de Pagina de soporte y Solicitud de soporte en el mismo almacen COMPLIANCE.ContentReports, aunque el formulario del navegador use la pagina de soporte en lugar de esta ruta API directa.
Los errores de sitios web, API y aplicaciones de Android rastreados se almacenan en LOG.Errors. Cuando trackInSupportTickets está habilitado, el ticket de soporte vinculado también aparece en COMPLIANCE.ContentReports, por lo que la revisión del superadministrador y el estado del reportero siguen el mismo flujo de trabajo.
Metadatos del sistema y beta
GET /api/system/status
Anónimo
Use este endpoint para comprobaciones de estado, control de compatibilidad de Android, la URL actual de la página beta y el estado resuelto de mapa y privacidad para la solicitud actual.
GET /api/system/beta-android
Anónimo
Devuelve metadatos beta de Android preparados, incluida la versión para mostrar, el código de versión, la versión mínima compatible y las notas de la versión.
GET /api/system/ip-location
Anónimo
Devuelve la mejor ubicacion basada en IP para la solicitud actual, util para centrar mapas y diagnosticar problemas.
Cuando la IP del cliente es privada, local o no confiable por otro motivo, la respuesta sigue siendo HTTP 200 y explica la falla en
failureReason
en lugar de generar un error de transporte.
GET /api/system/coordinate-locality
Anónimo
Hace geocodificacion inversa de un par latitud/longitud a etiquetas de ciudad, estado/provincia y pais para los flujos del planificador de paradas y seleccion del mapa.
Las coordenadas no validas devuelven una carga util sin excepcion con
resolved=false
y
failureReason=invalid-coordinates.
- requestedExperienceMode frente a effectiveExperienceMode le dice si la preferencia del usuario autenticado sobrevivio a las reglas de privacidad aplicadas a la solicitud o si fue rebajada a no_3rd_parties.
- requestedMapSource, preferredMapSource y fallbackMapSource le dicen que proveedor pidio el usuario, cual quiere intentar primero el servidor y cual debe cargarse despues si falla la fuente preferida.
- thirdPartyBrowserCallsAllowed, googleMapsAllowed y openStreetMapAllowed le dicen si esta solicitud puede llamar a proveedores del navegador.
- hostedMapsForcedByPrivacy mas hostedMapTileUrlTemplate le indican cuando la solicitud fue forzada a teselas alojadas del mismo origen, que actualmente se representan mediante
/maps/tiles/{z}/{x}/{y}.png.
Las solicitudes desde redes privadas, redes locales u otras IP que no puedan resolverse toman intencionalmente la ruta mas estricta, por lo que una prueba en localhost o en una red de oficina puede mostrar legitimamente no_3rd_parties y hosted_maps incluso cuando la preferencia del usuario autenticado era distinta.
curl "https://www.locationnotes.com/api/system/status"
{
"status": "online",
"utcNow": "2026-03-13T21:15:00Z",
"androidMinimumCompatibleDisplayVersion": "1.0.0-beta.20260313.2",
"androidMinimumCompatibleVersionCode": "2026031302",
"androidCompatibilityMessage": "The API changed after older beta builds were published. Update to the latest beta before syncing or using live team management.",
"androidBetaPageUrl": "https://www.locationnotes.com/es-US/account/beta",
"requestedExperienceMode": "latest_and_greatest",
"effectiveExperienceMode": "no_3rd_parties",
"usesSavedExperienceModePreference": false,
"usesVisitorExperienceModePreferenceCookie": false,
"thirdPartyBrowserCallsAllowed": false,
"requestedMapSource": "google_maps",
"preferredMapSource": "hosted_maps",
"fallbackMapSource": "hosted_maps",
"usesSavedMapPreference": false,
"usesVisitorMapPreferenceCookie": false,
"googleMapsAllowed": false,
"googleMapsConfigured": false,
"openStreetMapAllowed": false,
"openStreetMapConfigured": true,
"hostedMapsConfigured": true,
"hostedMapsForcedByPrivacy": true,
"hostedMapTileUrlTemplate": "/maps/tiles/{z}/{x}/{y}.png"
}
curl "https://www.locationnotes.com/api/system/ip-location"
{
"resolved": true,
"clientIpAddress": "50.77.187.28",
"lookupIpAddress": "50.77.187.28",
"usedDevelopmentFallbackIp": false,
"sourceKind": "IpAddress",
"coordinateSourceProvider": "IpInfoDb",
"localitySourceProvider": "IpInfoDb",
"latitude": 41.8758,
"longitude": -87.6206,
"city": "Chicago",
"stateOrProvince": "Illinois",
"country": "United States of America",
"isApproximate": true,
"accuracyRadiusKm": null,
"failureReason": ""
}
curl "https://www.locationnotes.com/api/system/coordinate-locality?latitude=41.8818&longitude=-87.6231"
{
"resolved": true,
"sourceKind": "Coordinates",
"coordinateSourceProvider": "StopPlanner",
"localitySourceProvider": "HostedMapPostGIS",
"latitude": 41.8818,
"longitude": -87.6231,
"city": "Chicago",
"stateOrProvince": "Illinois",
"country": "United States",
"isApproximate": false,
"accuracyRadiusKm": null,
"failureReason": ""
}
Inventario completo de rutas
Esta sección es la lista exhaustiva de verbos y rutas para la superficie actual de la API de LocationNotes, incluidas las rutas de identidad administradas por el marco bajo /api/auth. Las secciones detalladas anteriores explican los flujos principales; este inventario es la fuente de verdad a nivel de ruta y debe mantenerse alineado con la tabla de puntos finales en vivo.
Eliminar cuenta de la API
Los clientes autenticados pueden eliminar permanentemente la cuenta actual y los datos personales sincronizados a través de la API. Lea el
Eliminar datos
página primero si necesita las reglas de retención completas para las exportaciones y los datos propiedad del equipo.
La limpieza rastreable no es todo o nada. El servidor elimina la actividad rastreable personal del usuario eliminado cuando puede, pero no elimina los rastreables compartidos, los rastreables propiedad del equipo ni el historial de otros usuarios solo porque se elimina una cuenta.
Si un rastreable propiedad del equipo todavía es importante para el equipo, permanece en ese equipo. Si la actividad de otra persona todavía está adjunta a un rastreable, ese rastreable permanece en el sistema.
DELETE /api/account
Portador
curl -X DELETE "https://www.locationnotes.com/api/account" \
-H "Authorization: Bearer <access token>"
{
"deletedAccount": true,
"notesDeleted": 14,
"categoriesDeleted": 6,
"linkedProvidersDeleted": 2
}
Errores y detalles del problema
Los errores de validación, permisos y búsqueda devuelven códigos de estado HTTP estándar. Muchas rutas de espacios de trabajo devuelven JSON de detalles de problemas estilo RFC 7807 con un título, detalle y estado.
{
"title": "Forbidden",
"code": "trackable_access_code_required",
"detail": "Sign in, keep this trackable active on this browser, or provide this trackable's secret code or QR access code before posting comments or location reports.",
"status": 403
}
400 para validación o rechazo de reglas comerciales
401 para autenticación faltante o no válida
403 para usuarios autenticados que no tienen acceso
404 para notas, categorías, equipos, membresías o enlaces de invitación faltantes
Las rutas de escritura de trackables tambien agregan una propiedad code estable para que los clientes de la API puedan distinguir casos como
trackable_access_code_required,
trackable_access_code_invalid,
trackable_activation_required,
y
trackable_already_activated
sin analizar el texto en inglés. El mapeo completo está documentado en el
página de referencia de errores rastreables.