> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prixo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /api/places — find nearby restaurants in Riyadh

> Find restaurants near a GPS point by passing coordinates and an optional keyword. Returns PRIXO database entries and Google Maps discoveries with ratings.

Find restaurants near any point in Riyadh by passing GPS coordinates and an optional keyword. PRIXO queries its own restaurant database first, then supplements results with Google Maps discoveries — giving you a combined list that includes ratings, neighbourhoods, and unique place identifiers you can pass to other endpoints.

## Endpoint

```
GET /api/places
```

## Authentication

Not required. This endpoint is fully public.

## Rate limit

No rate limit applies to this endpoint.

## Query parameters

<ParamField query="lat" type="number" required>
  The latitude of the search centre point. Must be a valid decimal coordinate within Saudi Arabia. Example: `24.7136`.
</ParamField>

<ParamField query="lng" type="number" required>
  The longitude of the search centre point. Must be a valid decimal coordinate within Saudi Arabia. Example: `46.6753`.
</ParamField>

<ParamField query="radius" type="number">
  The search radius in metres. Defaults to `1500` when omitted. Increase this for sparser areas or decrease it when you want results within walking distance.
</ParamField>

<ParamField query="keyword" type="string">
  Filter results by restaurant name or cuisine type. Accepts Arabic and English. When omitted, all restaurants within the radius are returned.
</ParamField>

<ParamField query="lang" type="string">
  The language for place names in the response. Accepts `"ar"` (Arabic) or `"en"` (English). Defaults to `"ar"`.
</ParamField>

## Example request

```bash theme={null}
GET /api/places?lat=24.7136&lng=46.6753&radius=2000&keyword=شاورما
```

```bash theme={null}
curl "https://prixo.ai/api/places?lat=24.7136&lng=46.6753&radius=2000&keyword=%D8%B4%D8%A7%D9%88%D8%B1%D9%85%D8%A7"
```

## Response

The response is a JSON object containing a `places` array and a `count` integer.

### Top-level fields

<ResponseField name="places" type="array">
  A list of restaurants within the search radius that match the keyword, sorted by relevance. Combines PRIXO database entries and Google Maps discoveries.

  <Expandable title="places[n] fields">
    <ResponseField name="places[n].id" type="string">
      The PRIXO-assigned identifier for this restaurant. Use this ID when querying other endpoints that accept a place identifier.
    </ResponseField>

    <ResponseField name="places[n].name" type="string">
      The restaurant's display name, in the language requested via the `lang` parameter.
    </ResponseField>

    <ResponseField name="places[n].lat" type="number">
      Latitude of the restaurant's location.
    </ResponseField>

    <ResponseField name="places[n].lng" type="number">
      Longitude of the restaurant's location.
    </ResponseField>

    <ResponseField name="places[n].rating" type="number | null">
      Average rating on a 0–5 scale. `null` if no rating data is available.
    </ResponseField>

    <ResponseField name="places[n].area" type="string | null">
      The Riyadh neighbourhood or district this restaurant is in — for example `"العليا"` or `"النزهة"`. `null` if the area could not be determined.
    </ResponseField>

    <ResponseField name="places[n].google_place_id" type="string | null">
      The Google Maps place identifier, prefixed with `ChIJ`. Present for all Google-discovered restaurants and for PRIXO database entries that have been matched to Google. `null` for unmatched PRIXO-only entries.
    </ResponseField>

    <ResponseField name="places[n].is_brand" type="boolean">
      `true` when the result represents a multi-branch chain rather than a single location.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="count" type="number">
  The total number of places returned in this response.
</ResponseField>

### Example response

```json theme={null}
{
  "places": [
    {
      "id": "place_mama_noura_olaya_01",
      "name": "ماما نورة",
      "lat": 24.715,
      "lng": 46.680,
      "rating": 4.5,
      "area": "العليا",
      "google_place_id": "ChIJd8BlQ2BxxkcRVIkwfJGbKOQ",
      "is_brand": false
    },
    {
      "id": "place_shawarmaji_02",
      "name": "شاورماجي",
      "lat": 24.711,
      "lng": 46.675,
      "rating": 4.2,
      "area": "العليا",
      "google_place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
      "is_brand": true
    }
  ],
  "count": 2
}
```

## Source of results

<Note>
  Results combine two sources. **PRIXO database** places have verified price data and community snapshots attached to them. **Google Maps discovered** places appear in the list but may not yet have any price data — you can be the first to [submit a snapshot](/api/snapshots) for them.

  You can tell the two apart by checking whether a `google_place_id` is present without a matching PRIXO entry elsewhere in the platform, but the simplest approach is to attempt a `/api/search` query for the specific place and check the `discoveredViaGoogle` flag in the response.
</Note>

<Tip>
  For best coverage in dense areas, keep `radius` at or below `2000`. Very large radii (above `5000`) may return results in different areas of Riyadh that are not practically reachable in a single delivery session.
</Tip>
