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, zipcode and geocoded_at. Every field is null until 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.


GET/v1/pois

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 next attribute 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

GET
/v1/pois
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
}

POST/v1/pois

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

POST
/v1/pois
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"
  }
}

GET/v1/pois/:id

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

GET
/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751
curl https://api.lanewise.app/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751 \
  -H "X-API-KEY: {YOUR_API_KEY}"

Response

{
  "data": {
    "id": "01J9ZC4Y4B5Q8QD42ZS3ZEV751",
    "name": "Mercat de la Boqueria",
    // ...
  }
}

PUT/v1/pois/:id

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. null removes a value.

Request

PUT
/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751
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/v1/pois/:id

Delete a POI

Permanently delete a POI and its attribute values. Returns a 204 with no body. Requires the delete-pois permission.

Request

DELETE
/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751
curl -X DELETE https://api.lanewise.app/v1/pois/01J9ZC4Y4B5Q8QD42ZS3ZEV751 \
  -H "X-API-KEY: {YOUR_API_KEY}"