POIs
Points of interest (POIs) are the core of Lanewise: real-world locations with a name, coordinates, an optional category, custom attributes and an address filled in by reverse geocoding. On this page, we look at how to list, create, retrieve, update and delete POIs.
The POI model
Properties
- Name
id- Type
- string
- Description
Unique identifier (ULID) of the POI.
- Name
name- Type
- string
- Description
Name of the POI.
- Name
latitude- Type
- float
- Description
Latitude, between -90 and 90.
- Name
longitude- Type
- float
- Description
Longitude, between -180 and 180.
- Name
distance- Type
- float
- Description
Distance in meters from the search point. Only present when you filter by distance.
- Name
category- Type
- object | null
- Description
The category of the POI, if any.
- Name
attributes- Type
- object
- Description
Attribute values keyed by attribute name. Values are strings, numbers or booleans, depending on the attribute type.
- Name
address- Type
- object
- Description
Result of reverse geocoding:
display_name,street,city,country,zipcodeandgeocoded_at. Every field isnulluntil the POI is geocoded, usually a few seconds after it is created or moved.
- Name
created_at- Type
- timestamp
- Description
When the POI was created.
- Name
updated_at- Type
- timestamp
- Description
When the POI was last updated.
List all POIs
Retrieve a paginated list of your POIs, sorted by ID. Requires the read-pois permission.
Optional attributes
- Name
limit- Type
- integer
- Description
Number of POIs per page, between 1 and 100. Defaults to 15.
- Name
cursor- Type
- string
- Description
Cursor of the page to fetch, from the
nextattribute of the previous page.
- Name
attributes[...]- Type
- string
- Description
Filter by attribute values. See filtering.
- Name
category_id / category_name- Type
- string
- Description
Filter by category. See filtering.
- Name
latitude, longitude, distance- Type
- float
- Description
Filter by distance from a point. See filtering.
- Name
country_id / city_id / zipcode_id- Type
- string
- Description
Filter by location. See filtering.
Request
curl -G https://api.lanewise.app/v1/pois \
-H "X-API-KEY: {YOUR_API_KEY}" \
-d limit=10
Response
{
"data": [
{
"id": "01J9ZC4Y4B5Q8QD42ZS3ZEV751",
"name": "Mercat de la Boqueria",
"latitude": 41.3818,
"longitude": 2.1716,
"category": {
"id": "01J9ZC2M8TGDMQEWN2AY9CCP5V",
"name": "market",
"created_at": "2026-09-27T09:10:02.000000Z",
"updated_at": "2026-09-27T09:10:02.000000Z"
},
"attributes": {
"owner_id": "123",
"rating": 4.5,
"open": true
},
"address": {
"display_name": "Mercat de la Boqueria, La Rambla, Barcelona, 08002, Spain",
"street": "La Rambla",
"city": { "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed", "name": "Barcelona" },
"country": { "id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d", "name": "Spain" },
"zipcode": { "id": "6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b", "code": "08002" },
"geocoded_at": "2026-09-27T09:12:46.000000Z"
},
"created_at": "2026-09-27T09:12:44.000000Z",
"updated_at": "2026-09-27T09:12:46.000000Z"
}
],
"next": null
}
Create a POI
Create a POI. It is reverse-geocoded in the background, so its address is empty in the response. Requires the create-pois permission, and returns a 403 when your team reached its POI limit. To create many POIs at once, use a bulk import.
Required attributes
- Name
name- Type
- string
- Description
Name of the POI, up to 255 characters.
- Name
latitude- Type
- float
- Description
Latitude, between -90 and 90.
- Name
longitude- Type
- float
- Description
Longitude, between -180 and 180.
Optional attributes
- Name
category_id- Type
- string
- Description
ID of one of your categories.
- Name
attributes- Type
- object
- Description
Attribute values keyed by attribute name or ID. Each value must match the attribute type.
Request
curl https://api.lanewise.app/v1/pois \
-H "X-API-KEY: {YOUR_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "Mercat de la Boqueria",
"latitude": 41.3818,
"longitude": 2.1716,
"category_id": "01J9ZC2M8TGDMQEWN2AY9CCP5V",
"attributes": { "owner_id": "123", "rating": 4.5, "open": true }
}'
Response (201)
{
"data": {
"id": "01J9ZC4Y4B5Q8QD42ZS3ZEV751",
"name": "Mercat de la Boqueria",
"latitude": 41.3818,
"longitude": 2.1716,
"category": {
"id": "01J9ZC2M8TGDMQEWN2AY9CCP5V",
"name": "market",
"created_at": "2026-09-27T09:10:02.000000Z",
"updated_at": "2026-09-27T09:10:02.000000Z"
},
"attributes": { "owner_id": "123", "rating": 4.5, "open": true },
"address": {
"display_name": null,
"street": null,
"city": null,
"country": null,
"zipcode": null,
"geocoded_at": null
},
"created_at": "2026-09-27T09:12:44.000000Z",
"updated_at": "2026-09-27T09:12:44.000000Z"
}
}
Retrieve a POI
Retrieve a POI by its ID. Returns a 404 if the POI does not exist in your team. Requires the read-pois permission.
Request
curl https://api.lanewise.app/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751 \
-H "X-API-KEY: {YOUR_API_KEY}"
Response
{
"data": {
"id": "01J9ZC4Y4B5Q8QD42ZS3ZEV751",
"name": "Mercat de la Boqueria",
// ...
}
}
Update a POI
Update a POI. Send only the fields you want to change. Attributes are merged with the existing ones: send an attribute as null to remove it. Send category_id as null to remove the category. Moving a POI geocodes it again. Requires the update-pois permission.
Optional attributes
- Name
name- Type
- string
- Description
Name of the POI.
- Name
latitude- Type
- float
- Description
Latitude, between -90 and 90.
- Name
longitude- Type
- float
- Description
Longitude, between -180 and 180.
- Name
category_id- Type
- string | null
- Description
ID of one of your categories, or
null.
- Name
attributes- Type
- object
- Description
Attribute values to set, keyed by name or ID.
nullremoves a value.
Request
curl -X PUT https://api.lanewise.app/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751 \
-H "X-API-KEY: {YOUR_API_KEY}" \
-H "Content-Type: application/json" \
-d '{ "attributes": { "rating": 4.8, "open": null } }'
Response
{
"data": {
"id": "01J9ZC4Y4B5Q8QD42ZS3ZEV751",
"attributes": { "owner_id": "123", "rating": 4.8 },
// ...
}
}
Delete a POI
Permanently delete a POI and its attribute values. Returns a 204 with no body. Requires the delete-pois permission.
Request
curl -X DELETE https://api.lanewise.app/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751 \
-H "X-API-KEY: {YOUR_API_KEY}"