Skip to content
GET/v1/{metro}/aroundbetaall plans

Search around an address

Takes an address (or lat/lng, resolved the same way) and returns everything nearby, grouped the way a person reads a neighborhood rather than as one flat relevance list. /nearby is the point-only sibling: a plain distance-ordered list, no address resolution, no grouping — use it when the caller already has coordinates.

Show more

One request returns:

  • location — the resolved address, so you can see which reading of an ambiguous address was used;
  • activity — a header: score, percentile, one sentence, components;
  • results — five ranked groups, each item carrying distance_m and walk_minutes;
  • facets — counts by type, age band, free/paid and distance ring over the whole circle;
  • coverage — how many nearby rows are excluded for lacking coordinates.

Check coverage before treating an empty group as a signal: an empty group with coverage.hidden_nearby > 0 means those rows are not visible to this endpoint, not that the area has nothing happening.

The groups: happening_soon (dated events in the window), recurring_programs (weekly/monthly series and drop-in classes), classes_enrolling (term classes), camps, and places (places with no date of their own). happening_soon and recurring_programs overlap by design; each item's also_in names the other groups it appears in.

Results are ordered for relevance to the requested point, window and filters. Diagnostic ranking details are available only to internal keys.

limit is per group. Each group returns its own next_cursor ("<group>:<offset>"); pass it as cursor to continue that one group.

The window is from/to, local calendar dates in the metro's timezone: from defaults to today, to to from + 30 days, to is inclusive of that whole local day, and the span is at most 366 days. Unlike the collection endpoints, this route never returns an instant before now — a from of today (or earlier) starts at the present, not local midnight. meta.window echoes the resolved dates.

min_confidence uses the default shown in this operation. Collection endpoints may use different documented defaults.

Returns 503 when this endpoint is unavailable.

Beta — may not be enabled for all keys yet. If location resolution is unavailable, returns 503 ("geocoding unavailable") rather than guessing. data.location.source says how the location was resolved (see ResolvedLocation).

Try this requestRun it with sample data, no key needed. Paste a key to run it live.
Example request
curl -sS \
  -H "X-API-Key: $TAILEND_API_KEY" \
  "https://api.tailend.dev/v1/philadelphia/around"
Example response · 200
{
  "data": {
    "location": {
      "lat": 1,
      "lng": 1,
      "source": "cache"
    },
    "results": {
      "happening_soon": {
        "total": 1,
        "returned": 1,
        "items": [
          {
            "listing_id": "00000000-0000-4000-8000-000000000001",
            "type": "event",
            "name": "example",
            "distance_m": 1,
            "walk_minutes": 1,
            "score": 1
          }
        ]
      },
      "recurring_programs": {
        "total": 1,
        "returned": 1,
        "items": [
          {
            "listing_id": "00000000-0000-4000-8000-000000000001",
            "type": "event",
            "name": "example",
            "distance_m": 1,
            "walk_minutes": 1,
            "score": 1
          }
        ]
      },
      "classes_enrolling": {
        "total": 1,
        "returned": 1,
        "items": [
          {
            "listing_id": "00000000-0000-4000-8000-000000000001",
            "type": "event",
            "name": "example",
            "distance_m": 1,
            "walk_minutes": 1,
            "score": 1
          }
        ]
      },
      "camps": {
        "total": 1,
        "returned": 1,
        "items": [
          {
            "listing_id": "00000000-0000-4000-8000-000000000001",
            "type": "event",
            "name": "example",
            "distance_m": 1,
            "walk_minutes": 1,
            "score": 1
          }
        ]
      },
      "places": {
        "total": 1,
        "returned": 1,
        "items": [
          {
            "listing_id": "00000000-0000-4000-8000-000000000001",
            "type": "event",
            "name": "example",
            "distance_m": 1,
            "walk_minutes": 1,
            "score": 1
          }
        ]
      }
    },
    "facets": {
      "by_type": {},
      "by_age_band": {},
      "by_price": {
        "free": 1,
        "paid": 1
      },
      "free_share": 1,
      "by_distance_ring": [
        {
          "label": "within_400m",
          "max_m": 1,
          "count": 1
        }
      ]
    },
    "coverage": {
      "hidden_nearby": 1,
      "unplaceable_in_metro": 1,
      "reason": "example"
    }
  },
  "meta": {
    "metro": "example",
    "radius_m": 1,
    "window": {
      "from": "2026-09-24",
      "to": "2026-09-24",
      "timezone": "example"
    },
    "limit": 1
  }
}

Try any request with sample data, no key needed. Available on every plan.

Metro slug from /v1/metros (e.g. philadelphia).

Optional parameters (13)

Latitude of the point to score.

Longitude of the point to score.

A street address to resolve server-side instead of sending a point.

Radius in metres.

Local calendar date (metro timezone), inclusive.

Local calendar date (metro timezone), inclusive; at most 366 days after from.

Age bands to favour.

Events, classes, and camps only; ignored for places.

Restrict to these listing types.

Minimum row confidence.

Maximum items per group, not per response.

A group's next_cursor from the previous response: "<group>:<offset>".

Opt into a block the lean default response leaves out.

Ctrl Enter to send