<!-- Locations API: Connected Businesses and Apps · Prisma · https://prismareviews.com/docs/api-reference/locations -->
> GET /v1/locations and GET /v1/locations/{id}: the Google locations, apps, shops, business units and listings connected to your Prisma workspace.

# Locations

A location is one thing that receives reviews on one platform: a Google Business Profile location, an app in the App Store or Google Play, a Judge.me shop, a Trustpilot business unit, a Yotpo or REVIEWS.io store, a G2 product, or a Yelp, Tripadvisor or Booking.com listing. Locations are created by Prisma when you [connect](/docs/api-reference/connections) an account, and every [review](/docs/api-reference/reviews) belongs to one. Plans are priced by connected locations: see [Pricing](/pricing).

## The location object

```json
{
  "id": "loc_01KJ8P9W2C4D6F8G0H2J4K6M8N",
  "platform": "google",
  "connection_id": "con_01KJ8P7R5S3T1V9W7X5Y3Z1A2B",
  "name": "Café Ruzafa",
  "address": "Carrer de Sueca 10, Valencia",
  "url": "https://maps.google.com/?cid=1234567890",
  "external_id": "accounts/1234567890/locations/9876543210",
  "status": "active",
  "last_synced_at": "2026-10-23T08:00:12.000Z",
  "next_sync_at": "2026-10-24T08:00:12.000Z"
}
```

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Prisma location ID (`loc_…`). Use it as `location_id` in `GET /v1/reviews`. |
| `platform` | enum | Platform ID, as in the review object. |
| `connection_id` | string | The connection that created it. |
| `name` | string | Name on the platform. For Yelp, Tripadvisor and Booking.com it is the listing URL you connected. |
| `address` | string \| null | Address for places. For App Store apps it holds the bundle ID. |
| `url` | string \| null | Public page of the location, app or listing, when known. |
| `external_id` | string | The platform's own ID: Google location name, App Store app ID, Android package name, listing URL… |
| `status` | enum | `active` or `disconnected`. |
| `last_synced_at` | timestamp \| null | Last time Prisma checked it for reviews. `null` until the first sync finishes. |
| `next_sync_at` | timestamp \| null | When the next check is scheduled. `null` once disconnected. |

How often each platform is checked is on [Platforms](/docs/api-reference/platforms).

## List locations

`GET /v1/locations`

Returns every connected location of your workspace in the mode of your key, oldest first. Disconnected locations are left out. The list is not paginated: `next_cursor` is always `null`.

```bash
curl https://api.prismareviews.com/v1/locations \
  -H "Authorization: Bearer $PRISMA_API_KEY"
```
```javascript
const res = await fetch("https://api.prismareviews.com/v1/locations", {
  headers: { Authorization: "Bearer " + process.env.PRISMA_API_KEY },
});
const { data } = await res.json();
for (const loc of data) console.log(loc.id, loc.platform, loc.name);
```
```python
import os
import requests

resp = requests.get(
    "https://api.prismareviews.com/v1/locations",
    headers={"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"},
    timeout=30,
)
for loc in resp.json()["data"]:
    print(loc["id"], loc["platform"], loc["name"])
```

**Response `200`**

```json
{
  "data": [
    {
      "id": "loc_01KJ8P9W2C4D6F8G0H2J4K6M8N",
      "platform": "google",
      "connection_id": "con_01KJ8P7R5S3T1V9W7X5Y3Z1A2B",
      "name": "Café Ruzafa",
      "address": "Carrer de Sueca 10, Valencia",
      "url": "https://maps.google.com/?cid=1234567890",
      "external_id": "accounts/1234567890/locations/9876543210",
      "status": "active",
      "last_synced_at": "2026-10-23T08:00:12.000Z",
      "next_sync_at": "2026-10-24T08:00:12.000Z"
    }
  ],
  "next_cursor": null
}
```

There are no query filters: filter by `platform` or `connection_id` on your side.

## Get a location

`GET /v1/locations/{id}`

```bash
curl https://api.prismareviews.com/v1/locations/loc_01KJ8P9W2C4D6F8G0H2J4K6M8N \
  -H "Authorization: Bearer $PRISMA_API_KEY"
```
```javascript
const res = await fetch(
  "https://api.prismareviews.com/v1/locations/loc_01KJ8P9W2C4D6F8G0H2J4K6M8N",
  { headers: { Authorization: "Bearer " + process.env.PRISMA_API_KEY } }
);
console.log(await res.json());
```
```python
resp = requests.get(
    "https://api.prismareviews.com/v1/locations/loc_01KJ8P9W2C4D6F8G0H2J4K6M8N",
    headers={"Authorization": f"Bearer {os.environ['PRISMA_API_KEY']}"},
    timeout=30,
)
print(resp.json())
```

Returns `200` with one location object, including disconnected ones until their data is deleted. `404 resource_not_found` if there is no location with that ID in your workspace and mode.

## Plan limits

When a connection would bring more locations than your plan allows (Spark 2, Beam 10, Spectrum 50, Aurora 200), Prisma creates locations up to the limit and reports the rest in `locations_over_plan_limit` on the connection response. Those aren't imported. To add them, upgrade or delete a connection you no longer need, then connect again. Test locations count separately from live ones. `GET /v1/usage` shows how many live locations you use: see [Usage](/docs/api-reference/usage).
