diff --git a/.env.example b/.env.example
index ddb75f3f4a..27030223c0 100644
--- a/.env.example
+++ b/.env.example
@@ -37,8 +37,7 @@ FACEBOOK_SECRET=41860e58c256a3d7ad8267d3c1939a4a
# FB Pixel ID is optional if you are trying to do customer rtracking
FACEBOOK_PIXEL_ID=
-FOURSQUARE_ID=2STROLSFBMZLAHG3IBA141EM2HGRF0IRIBB4KXMOGA2EH3JG
-FOURSQUARE_SECRET=UAABFAWTIHIUFBL0PDC3TDMSXJF2GTGWLD3BES1QHXKAIYQB
+FOURSQUARE_APIKEY=foursquare-service-key
GITHUB_ID=cb448b1d4f0c743a1e36
GITHUB_SECRET=815aa4606f476444691c5f1c16b9c70da6714dc6
diff --git a/README.md b/README.md
index f9e0065631..a3df4e5b73 100644
--- a/README.md
+++ b/README.md
@@ -220,13 +220,15 @@ Obtain SMTP credentials from a provider for transactional emails. Set the SMTP_U
-- Go to Foursquare for Developers and log in
-- Click on **My Apps** in the top menu
-- Click the **Create A New App** button
-- Enter _App Name_, _Welcome page url_,
-- For **Redirect URI**: your BASE_URL value followed by /auth/foursquare/callback (i.e. `http://localhost:8080/auth/foursquare/callback` )
-- Click **Save Changes**
-- Copy and paste _Client ID_ and _Client Secret_ keys into `.env` file
+- Go to Foursquare for Developers and log in
+
+- Click on **Create a new project** button
+- Enter your _Organization_ and _Project Name_
+- Click **Create**
+- Navigate to your project
+- Click **Settings** in the left-hand-side menu
+- Generate a Service API Key
+- Copy and paste the Service API Key as `FOURSQUARE_APIKEY` in your `.env` file
diff --git a/controllers/api.js b/controllers/api.js
index 60c51d84e9..09dc63a083 100644
--- a/controllers/api.js
+++ b/controllers/api.js
@@ -15,7 +15,6 @@ const googlesheets = require('@googleapis/sheets');
const validator = require('validator');
const { Configuration: LobConfiguration, LetterEditable, LettersApi, ZipEditable, ZipLookupsApi } = require('@lob/lob-typescript-sdk');
const fs = require('fs');
-
/**
* GET /api
* List of API examples.
@@ -30,31 +29,43 @@ exports.getApi = (req, res) => {
* GET /api/foursquare
* Foursquare API example.
*/
-exports.getFoursquare = async (req, res, next) => {
+exports.getFoursquare = async (req, res) => {
try {
- const headers = {
- Authorization: `${process.env.FOURSQUARE_APIKEY}`,
+ const options = {
+ method: 'GET',
+ headers: {
+ accept: 'application/json',
+ 'X-Places-Api-Version': '2025-06-17',
+ authorization: `Bearer ${process.env.FOURSQUARE_APIKEY}`,
+ },
+ };
+
+ const fetchJson = async (url, fetchOptions, label) => {
+ const response = await fetch(url, fetchOptions);
+ if (!response.ok) {
+ const text = await response.text().catch(() => '');
+ throw new Error(`${label} failed: ${response.status} ${response.statusText} - ${text}`);
+ }
+ return response.json();
};
- const [trendingVenuesRes, venueDetailRes, venuePhotosRes] = await Promise.all([
- fetch('https://api.foursquare.com/v3/places/search?ll=47.609657,-122.342148&limit=10', {
- headers,
- }).then((res) => res.json()),
- fetch('https://api.foursquare.com/v3/places/427ea800f964a520b1211fe3', {
- headers,
- }).then((res) => res.json()),
- fetch('https://api.foursquare.com/v3/places/427ea800f964a520b1211fe3/photos', {
- headers,
- }).then((res) => res.json()),
+ const [trendingVenuesRes, venueDetailRes] = await Promise.all([
+ fetchJson('https://places-api.foursquare.com/places/search?ll=47.609657,-122.342148&limit=10', options, 'Foursquare search'),
+ fetchJson('https://places-api.foursquare.com/places/427ea800f964a520b1211fe3', options, 'Foursquare venue detail'),
]);
res.render('api/foursquare', {
- title: 'Foursquare API (v3)',
- trendingVenues: trendingVenuesRes.results,
+ title: 'Foursquare Places API',
+ trendingVenues: trendingVenuesRes.results || [],
venueDetail: venueDetailRes,
- venuePhotos: venuePhotosRes.slice(0, 9), // Limit the photos to 9
});
} catch (error) {
- next(error);
+ console.error('Foursquare API Error:', error);
+ return res.status(500).render('api/foursquare', {
+ title: 'Foursquare Places API',
+ trendingVenues: [],
+ venueDetail: null,
+ error: 'Failed to fetch Foursquare data',
+ });
}
};
diff --git a/test/e2e/foursquare.e2e.test.js b/test/e2e/foursquare.e2e.test.js
new file mode 100644
index 0000000000..e1fd286e7f
--- /dev/null
+++ b/test/e2e/foursquare.e2e.test.js
@@ -0,0 +1,124 @@
+process.env.API_TEST_FILE = 'e2e/foursquare.e2e.test.js';
+const { test, expect } = require('@playwright/test');
+const { registerTestInManifest, isInManifest } = require('../tools/fixture-helpers');
+
+// Self-register this test in the manifest when recording
+registerTestInManifest('e2e/foursquare.e2e.test.js');
+
+// Skip this file during replay if it's not in the manifest
+if (process.env.API_MODE === 'replay' && !isInManifest('e2e/foursquare.e2e.test.js')) {
+ console.log('[fixtures] skipping e2e/foursquare.e2e.test.js as it is not in manifest for replay mode - 2 tests');
+ test.skip(true, 'Not in manifest for replay mode');
+}
+
+test.describe('Foursquare Places API Integration', () => {
+ let sharedPage;
+
+ test.beforeAll(async ({ browser }) => {
+ sharedPage = await browser.newPage();
+ await sharedPage.goto('/api/foursquare');
+ await sharedPage.waitForLoadState('networkidle');
+ });
+
+ test.afterAll(async () => {
+ if (sharedPage) await sharedPage.close();
+ });
+
+ test('should render Trending Venues table with data', async () => {
+ // Table basics
+ const table = sharedPage.locator('table.table.table-striped.table-bordered');
+ await expect(table).toBeVisible();
+
+ const headers = table.locator('thead th');
+ await expect(headers).toHaveCount(5);
+ await expect(headers.nth(1)).toContainText('Name');
+ await expect(headers.nth(2)).toContainText('Category');
+ await expect(headers.nth(3)).toContainText('Address');
+ await expect(headers.nth(4)).toContainText('Distance');
+
+ // Should have 10 result rows (API limit for busy Downtown Seattle location)
+ const rows = table.locator('tbody tr');
+ const rowCount = await rows.count();
+ expect(rowCount).toBe(10);
+
+ // Validate first row structure and formats
+ const firstRowCells = rows.first().locator('td');
+ await expect(firstRowCells).toHaveCount(5);
+
+ // Icon cell: must have an icon image
+ const iconImgCount = await firstRowCells.nth(0).locator('img').count();
+ expect(iconImgCount).toBeGreaterThan(0);
+ const icon = firstRowCells.nth(0).locator('img');
+ await expect(icon).toHaveAttribute('src', /https?:\/\//);
+ await expect(icon).toHaveAttribute('alt', /\w+/);
+ const w = parseInt(await icon.getAttribute('width'), 10);
+ const h = parseInt(await icon.getAttribute('height'), 10);
+ expect(w).toBeGreaterThanOrEqual(32);
+ expect(w).toBeLessThanOrEqual(64);
+ expect(h).toBe(w);
+
+ // Name cell: non-empty
+ const venueName = (await firstRowCells.nth(1).textContent()).trim();
+ expect(venueName.length).toBeGreaterThan(0);
+
+ // Category cell: non-empty
+ const categoryText = (await firstRowCells.nth(2).textContent()).trim();
+ expect(categoryText.length).toBeGreaterThan(0);
+
+ // Address cell: non-empty
+ const addrText = (await firstRowCells.nth(3).textContent()).trim();
+ expect(addrText.length).toBeGreaterThan(0);
+
+ // Distance cell: numeric
+ const distanceText = (await firstRowCells.nth(4).textContent()).trim();
+ expect(distanceText).toMatch(/^\d+$/);
+ });
+
+ test('should render Venue Details with name, category, and coordinates', async () => {
+ // Section header
+ await expect(sharedPage.locator('h3.text-primary', { hasText: 'Venue Details' })).toBeVisible();
+
+ // The details paragraph contains name, optional category, and location + lat/long
+ const detailsPara = sharedPage.locator('h3.text-primary:has-text("Venue Details") + p');
+ await expect(detailsPara).toBeVisible();
+
+ // Name element
+ const nameElement = detailsPara.locator('i u');
+ await expect(nameElement).toBeVisible();
+ const detailName = (await nameElement.textContent()).trim();
+ expect(detailName.length).toBeGreaterThan(0);
+
+ // Check expected hardcoded values from Downtown Seattle location (ll=47.609657,-122.342148)
+ const detailsText = await detailsPara.textContent();
+
+ // Extract and validate longitude (allow wiggle room for minor GIS changes)
+ const longitudeMatch = detailsText.match(/longitude:\s*([-\d.]+)/i);
+ expect(longitudeMatch).toBeTruthy();
+ const longitude = parseFloat(longitudeMatch[1]);
+ expect(longitude).toBeGreaterThan(-122.35);
+ expect(longitude).toBeLessThan(-122.33);
+
+ // Extract and validate latitude (allow wiggle room for minor GIS changes)
+ const latitudeMatch = detailsText.match(/latitude:\s*([-\d.]+)/i);
+ expect(latitudeMatch).toBeTruthy();
+ const latitude = parseFloat(latitudeMatch[1]);
+ expect(latitude).toBeGreaterThan(47.6);
+ expect(latitude).toBeLessThan(47.62);
+
+ // Related venues: check for Pike Place Market with 10+ related venues
+ const relatedVenuesPara = sharedPage.locator('p', { hasText: 'Related venues or businesses to' });
+ await expect(relatedVenuesPara).toBeVisible();
+ const relatedVenuesText = await relatedVenuesPara.textContent();
+ expect(relatedVenuesText).toContain('Pike Place Market');
+
+ // Extract the comma-separated list from the next paragraph
+ const relatedListPara = relatedVenuesPara.locator('+ p');
+ await expect(relatedListPara).toBeVisible();
+ const relatedListText = (await relatedListPara.textContent()).trim();
+ const relatedVenuesList = relatedListText
+ .split(',')
+ .map((v) => v.trim())
+ .filter((v) => v.length > 0);
+ expect(relatedVenuesList.length).toBeGreaterThanOrEqual(10);
+ });
+});
diff --git a/test/fixtures/GET_https%3A%2F%2Fplaces-api.foursquare.com%2Fplaces%2F427ea800f964a520b1211fe3.json b/test/fixtures/GET_https%3A%2F%2Fplaces-api.foursquare.com%2Fplaces%2F427ea800f964a520b1211fe3.json
new file mode 100644
index 0000000000..3651976fe7
--- /dev/null
+++ b/test/fixtures/GET_https%3A%2F%2Fplaces-api.foursquare.com%2Fplaces%2F427ea800f964a520b1211fe3.json
@@ -0,0 +1,855 @@
+{
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "latitude": 47.609334087942955,
+ "longitude": -122.34147579532495,
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "date_created": "2005-05-09",
+ "date_refreshed": "2025-10-27",
+ "email": "info@pikeplacemarket.org",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011003" },
+ "link": "/places/427ea800f964a520b1211fe3",
+ "location": { "address": "85 Pike St", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "85 Pike St (at Pine St), Seattle, WA 98101" },
+ "name": "Pike Place Market",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/427ea800f964a520b1211fe3",
+ "related_places": {
+ "children": [
+ {
+ "fsq_place_id": "68c3cd83a33d853805869d81",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d103951735", "name": "Clothing Store", "short_name": "Apparel", "plural_name": "Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_", "suffix": ".png" } }],
+ "name": "Fashion with Trends"
+ },
+ {
+ "fsq_place_id": "4a6e24f6f964a52007d41fe3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }],
+ "name": "Pike Place Chowder"
+ },
+ {
+ "fsq_place_id": "595d37622be425119f41fdaf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } }],
+ "name": "Gateway To Mystical Tibet"
+ },
+ {
+ "fsq_place_id": "5c0c2839e55d8b002bec0864",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d15a941735", "name": "Garden", "short_name": "Garden", "plural_name": "Gardens", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/garden_", "suffix": ".png" } }],
+ "name": "The Secret Garden"
+ },
+ {
+ "fsq_place_id": "5c0c5e3a9e3b65002c77457c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d116951735", "name": "Antique Store", "short_name": "Antiques", "plural_name": "Antique Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/antique_", "suffix": ".png" } }],
+ "name": "Animal Gifts & Collextibles"
+ },
+ {
+ "fsq_place_id": "439b0d38f964a520db2b1fe3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1cd941735", "name": "South American Restaurant", "short_name": "South American", "plural_name": "South American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/argentinian_", "suffix": ".png" } }],
+ "name": "Copacabana"
+ },
+ {
+ "fsq_place_id": "574882b9498e2cca0de19f2c",
+ "categories": [{ "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }],
+ "name": "Tiny’s Organic Hot Apple Cider"
+ },
+ {
+ "fsq_place_id": "4582b235f964a5207c3f1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d142941735", "name": "Asian Restaurant", "short_name": "Asian", "plural_name": "Asian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/asian_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1df931735", "name": "BBQ Joint", "short_name": "BBQ", "plural_name": "BBQ Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bbqalt_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } }
+ ],
+ "name": "Mee Sum Pastry"
+ },
+ {
+ "fsq_place_id": "6276e76835c7ab40d09e0c46",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d15b941735", "name": "Farm", "short_name": "Farm", "plural_name": "Farms", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/farm_", "suffix": ".png" } }
+ ],
+ "name": "Cuaresma R&L Farm"
+ },
+ {
+ "fsq_place_id": "6700798c5024253ac7e9224f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d165941735", "name": "Scenic Lookout", "short_name": "Scenic Lookout", "plural_name": "Scenic Lookouts", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/sceniclookout_", "suffix": ".png" } }],
+ "name": "Overlook Walk"
+ },
+ {
+ "fsq_place_id": "4ea5ee17b80336cb0348c68f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f9931735", "name": "Road", "short_name": "Road", "plural_name": "Roads", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/highway_", "suffix": ".png" } }],
+ "name": "Post Alley"
+ },
+ {
+ "fsq_place_id": "5924a2743149b933a0bba7b4",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d164941735", "name": "Plaza", "short_name": "Plaza", "plural_name": "Plazas", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/plaza_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f7941735", "name": "Flea Market", "short_name": "Flea Market", "plural_name": "Flea Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/fleamarket_", "suffix": ".png" } }
+ ],
+ "name": "The Pike Place MarketFront"
+ },
+ {
+ "fsq_place_id": "635d8e050082821c2c84110a",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } }],
+ "name": "The Cheese Box"
+ },
+ {
+ "fsq_place_id": "4fa97891e4b07650f7b12097",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c1941735", "name": "Mexican Restaurant", "short_name": "Mexican", "plural_name": "Mexican Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mexican_", "suffix": ".png" } }],
+ "name": "Los Agaves Mexican Street Food"
+ },
+ {
+ "fsq_place_id": "5722a9df498efc35a195867c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c9941735", "name": "Ice Cream Parlor", "short_name": "Ice Cream", "plural_name": "Ice Cream Parlors", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/icecream_", "suffix": ".png" } }],
+ "name": "Shug's Soda Fountain and Ice Cream"
+ },
+ {
+ "fsq_place_id": "685c6d51264921158658aa02",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d114951735", "name": "Bookstore", "short_name": "Bookstore", "plural_name": "Bookstores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/bookstore_", "suffix": ".png" } }],
+ "name": "Pine Books"
+ },
+ {
+ "fsq_place_id": "4b8593a9f964a5207e6631e3",
+ "categories": [
+ { "fsq_category_id": "4eb1bd1c3b7b55596b4a748f", "name": "Filipino Restaurant", "short_name": "Filipino", "plural_name": "Filipino Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/filipino_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d118951735", "name": "Grocery Store", "short_name": "Grocery Store", "plural_name": "Grocery Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_grocery_", "suffix": ".png" } }
+ ],
+ "name": "Oriental Mart"
+ },
+ { "fsq_place_id": "58d96a9e409f565903fa6399", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "4a96e520f964a520702720e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d111941735", "name": "Japanese Restaurant", "short_name": "Japanese", "plural_name": "Japanese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/japanese_", "suffix": ".png" } }],
+ "name": "Umai Sushi Teriyaki"
+ },
+ { "fsq_place_id": "58d96a720037eb26cc623292", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5762e95e498e2dd19def67cd",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d12f941735", "name": "Library", "short_name": "Library", "plural_name": "Libraries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/library_", "suffix": ".png" } }],
+ "name": "FOLIO: The Seattle Athenaeum"
+ },
+ {
+ "fsq_place_id": "52a7bdff11d264bf08c940dd",
+ "categories": [
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b25", "name": "Knitting Store", "short_name": "Knitting Supplies", "plural_name": "Knitting Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } }
+ ],
+ "name": "So Much Yarn"
+ },
+ {
+ "fsq_place_id": "5bf604ba598e64002c2984c6",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d111941735", "name": "Japanese Restaurant", "short_name": "Japanese", "plural_name": "Japanese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/japanese_", "suffix": ".png" } }],
+ "name": "Unai Sushi & Teriyaki"
+ },
+ {
+ "fsq_place_id": "668aeba01d73f81bbb98fa66",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c1941735", "name": "Mexican Restaurant", "short_name": "Mexican", "plural_name": "Mexican Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mexican_", "suffix": ".png" } }],
+ "name": "El Mixteco"
+ },
+ {
+ "fsq_place_id": "4c9faa8a2fb1a143bbeaf540",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d114951735", "name": "Bookstore", "short_name": "Bookstore", "plural_name": "Bookstores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/bookstore_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d10d951735", "name": "Record Store", "short_name": "Record Store", "plural_name": "Record Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/record_shop_", "suffix": ".png" } }
+ ],
+ "name": "Lionheart Bookstore & Records"
+ },
+ { "fsq_place_id": "58d96a5bc0c89b2d9f98060f", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "62ec0cea495f6e5349e94a14",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } }],
+ "name": "Bite Society"
+ },
+ {
+ "fsq_place_id": "614f82bfb2119e03fb370a9d",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d102951735", "name": "Fashion Accessories Store", "short_name": "Fashion Accessories Store", "plural_name": "Fashion Accessories Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_accessories_", "suffix": ".png" } }
+ ],
+ "name": "Eclipse Hat Shop"
+ },
+ {
+ "fsq_place_id": "62f9771ef26ef62eb249cc65",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Lor Garden"
+ },
+ {
+ "fsq_place_id": "419e8900f964a520301e1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }
+ ],
+ "name": "Le Panier"
+ },
+ {
+ "fsq_place_id": "5aae7807a22db7227b2a7bb3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d110941735", "name": "Italian Restaurant", "short_name": "Italian", "plural_name": "Italian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/italian_", "suffix": ".png" } }],
+ "name": "Pasta Casalinga"
+ },
+ {
+ "fsq_place_id": "47f20627f964a520954e1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d110941735", "name": "Italian Restaurant", "short_name": "Italian", "plural_name": "Italian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/italian_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }
+ ],
+ "name": "The Pasta Bar"
+ },
+ {
+ "fsq_place_id": "5b564b40054e29002cef59e8",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d123941735", "name": "Wine Bar", "short_name": "Wine Bar", "plural_name": "Wine Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/winery_", "suffix": ".png" } }],
+ "name": "Northwest Tastings"
+ },
+ {
+ "fsq_place_id": "66880e34f675c97a48ff2d83",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d179941735", "name": "Bagel Shop", "short_name": "Bagels", "plural_name": "Bagel Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bagels_", "suffix": ".png" } }],
+ "name": "Bagel Pop"
+ },
+ {
+ "fsq_place_id": "4b4e3163f964a520b7e426e3",
+ "categories": [
+ { "fsq_category_id": "4d4ae6fc7a7b7dea34424761", "name": "Fried Chicken Joint", "short_name": "Fried Chicken", "plural_name": "Fried Chicken Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/friedchicken_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d16e941735", "name": "Fast Food Restaurant", "short_name": "Fast Food", "plural_name": "Fast Food Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/fastfood_", "suffix": ".png" } }
+ ],
+ "name": "Chicken Valley"
+ },
+ {
+ "fsq_place_id": "511ac39fe4b0c7092df6617c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } }],
+ "name": "Indi Chocolate"
+ },
+ {
+ "fsq_place_id": "6276e7ce6210f9141d155c05",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d15b941735", "name": "Farm", "short_name": "Farm", "plural_name": "Farms", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/farm_", "suffix": ".png" } }
+ ],
+ "name": "Cuaresma R&L Farm"
+ },
+ { "fsq_place_id": "4a9441bff964a520f02020e3", "categories": [{ "fsq_category_id": "4bf58dd8d48988d146941735", "name": "Deli", "short_name": "Deli", "plural_name": "Delis", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/deli_", "suffix": ".png" } }], "name": "Michou" },
+ {
+ "fsq_place_id": "4ae38a67f964a5206b9621e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11d951735", "name": "Butcher", "short_name": "Butcher", "plural_name": "Butchers", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_butcher_", "suffix": ".png" } }],
+ "name": "fero's meat market"
+ },
+ { "fsq_place_id": "58d96a4c02b60e791e4176cc", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "440daad8f964a52096301fe3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }],
+ "name": "Starbucks"
+ },
+ {
+ "fsq_place_id": "4b1b1d8cf964a52049f823e3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d118951735", "name": "Grocery Store", "short_name": "Grocery Store", "plural_name": "Grocery Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_grocery_", "suffix": ".png" } }
+ ],
+ "name": "Sosio's Fruit and Produce"
+ },
+ {
+ "fsq_place_id": "4c33791fed37a593816a6d03",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fb941735", "name": "Hobby Store", "short_name": "Hobbies", "plural_name": "Hobby Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/hobbyshop_", "suffix": ".png" } }],
+ "name": "Old Seattle Paperworks"
+ },
+ { "fsq_place_id": "58d96b7e7d66be79a60a8cda", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5bad843c73fe25002cd1df40",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Santos Farms"
+ },
+ {
+ "fsq_place_id": "49ee65a3f964a52058681fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "5293a7563cf9994f4e043a44", "name": "Russian Restaurant", "short_name": "Russian", "plural_name": "Russian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/russian_", "suffix": ".png" } }
+ ],
+ "name": "Piroshky Piroshky"
+ },
+ { "fsq_place_id": "58d96a6c9ab66307e1769c5a", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5990c95b4940bc65f0dfc026",
+ "categories": [
+ { "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1cb941735", "name": "Food Truck", "short_name": "Food Truck", "plural_name": "Food Trucks", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/streetfood_", "suffix": ".png" } }
+ ],
+ "name": "Roasted Corn"
+ },
+ {
+ "fsq_place_id": "62c04eaf8c88c7194f5714c6",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d179941735", "name": "Bagel Shop", "short_name": "Bagels", "plural_name": "Bagel Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bagels_", "suffix": ".png" } }],
+ "name": "Bagelbop"
+ },
+ {
+ "fsq_place_id": "477ce324f964a520234d1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d115941735", "name": "Middle Eastern Restaurant", "short_name": "Middle Eastern", "plural_name": "Middle Eastern Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/middleeastern_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1c0941735", "name": "Mediterranean Restaurant", "short_name": "Mediterranean", "plural_name": "Mediterranean Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mediterranean_", "suffix": ".png" } }
+ ],
+ "name": "Falafel King"
+ },
+ {
+ "fsq_place_id": "5641140ccd108d476916ca18",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f9941735", "name": "Food and Beverage Retail", "short_name": "Food & Beverage", "plural_name": "Food and Beverage Retail", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/foodanddrink_", "suffix": ".png" } }],
+ "name": "Tiny's Organic"
+ },
+ {
+ "fsq_place_id": "689e8c4db9cf5b176894c56c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d124941735", "name": "Office", "short_name": "Office", "plural_name": "Offices", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/default_", "suffix": ".png" } }],
+ "name": "The Salish Room"
+ },
+ {
+ "fsq_place_id": "59220125c4df1d5708ba1560",
+ "categories": [{ "fsq_category_id": "58daa1558bbb0b01f18ec1d6", "name": "Art Studio", "short_name": "Art Studio", "plural_name": "Art Studios", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }],
+ "name": "Jesse Link Gallery"
+ },
+ {
+ "fsq_place_id": "68c9d7951ed0a44ad66351c5",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }],
+ "name": "Pizza & Pasta Bar"
+ },
+ {
+ "fsq_place_id": "51883255498e51f786d85a0a",
+ "categories": [
+ { "fsq_category_id": "4d954b16a243a5684b65b473", "name": "Rest Area", "short_name": "Rest Areas", "plural_name": "Rest Areas", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/restarea_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d165941735", "name": "Scenic Lookout", "short_name": "Scenic Lookout", "plural_name": "Scenic Lookouts", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/sceniclookout_", "suffix": ".png" } }
+ ],
+ "name": "Waterfront Viewpoint"
+ },
+ {
+ "fsq_place_id": "62a3ee720cea093979f7fb9d",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e2931735", "name": "Art Gallery", "short_name": "Art Gallery", "plural_name": "Art Galleries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }],
+ "name": "Gallery Ergo"
+ },
+ { "fsq_place_id": "58d96a79debdf62e17649a84", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "4ba52ffdf964a52057e938e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } }],
+ "name": "Juice Emporium"
+ },
+ {
+ "fsq_place_id": "5ccf6cc84acb19002c7b1b90",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d117951735", "name": "Candy Store", "short_name": "Candy Store", "plural_name": "Candy Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/candystore_", "suffix": ".png" } }],
+ "name": "Cobb's Pike Place Popcorn"
+ },
+ {
+ "fsq_place_id": "4bc23a4d4cdfc9b61dcf9521",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "City Fish Co."
+ },
+ {
+ "fsq_place_id": "59e548478c35dc3e57b97e90",
+ "categories": [{ "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }],
+ "name": "Tiny's Organic Hot Apple Cider"
+ },
+ {
+ "fsq_place_id": "66246edb29ceb661bfb4bbc4",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c9941735", "name": "Ice Cream Parlor", "short_name": "Ice Cream", "plural_name": "Ice Cream Parlors", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/icecream_", "suffix": ".png" } }],
+ "name": "Baxter & Frost"
+ },
+ {
+ "fsq_place_id": "684dbad659d3f64cce97a8b3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Lee’s Garden"
+ },
+ {
+ "fsq_place_id": "68c9d794251ab11151d2ec11",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }],
+ "name": "Pizza & Pasta Bar"
+ },
+ {
+ "fsq_place_id": "4a4bc093f964a520abac1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1fb941735", "name": "Hobby Store", "short_name": "Hobbies", "plural_name": "Hobby Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/hobbyshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f3941735", "name": "Toy Store", "short_name": "Toys & Games", "plural_name": "Toy Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/toys_", "suffix": ".png" } },
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b18", "name": "Comic Book Store", "short_name": "Comic Store", "plural_name": "Comic Book Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/comic_", "suffix": ".png" } }
+ ],
+ "name": "Golden Age Collectables"
+ },
+ {
+ "fsq_place_id": "628ab065d6117e2150c3ac14",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Pike St. Coffee"
+ },
+ {
+ "fsq_place_id": "4c2f6396213c2d7fbdb8305d",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d100951735", "name": "Pet Supplies Store", "short_name": "Pet Supplies Store", "plural_name": "Pet Supplies Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/pet_store_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Merry Tails"
+ },
+ {
+ "fsq_place_id": "50d7a5a3e4b05909046d1938",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } }
+ ],
+ "name": "Quality Fruit"
+ },
+ {
+ "fsq_place_id": "449addfdf964a5209c341fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d123941735", "name": "Wine Bar", "short_name": "Wine Bar", "plural_name": "Wine Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/winery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d11e941735", "name": "Cocktail Bar", "short_name": "Cocktail", "plural_name": "Cocktail Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/cocktails_", "suffix": ".png" } }
+ ],
+ "name": "The Tasting Room"
+ },
+ { "fsq_place_id": "58d96ad083622d210c61e79b", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "629f71fcf8b64237d81e23ce",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d116941735", "name": "Bar", "short_name": "Bar", "plural_name": "Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/pub_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }
+ ],
+ "name": "Alibi Room"
+ },
+ {
+ "fsq_place_id": "4a3c2d5df964a52038a11fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d14e941735", "name": "American Restaurant", "short_name": "American", "plural_name": "American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/default_", "suffix": ".png" } }
+ ],
+ "name": "Market Grill"
+ },
+ {
+ "fsq_place_id": "51c1286f498e2505fd764fbe",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11e941735", "name": "Cocktail Bar", "short_name": "Cocktail", "plural_name": "Cocktail Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/cocktails_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } }
+ ],
+ "name": "Rachel's Ginger Beer"
+ },
+ {
+ "fsq_place_id": "63dec8d120aa934d836a9ef9",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Woodinville Farm Flowers"
+ },
+ {
+ "fsq_place_id": "6421e2eb8eecbf34771acfff",
+ "categories": [
+ {
+ "fsq_category_id": "4deefb944765f83613cdba6e",
+ "name": "Historic and Protected Site",
+ "short_name": "Historic and Protected Site",
+ "plural_name": "Historic and Protected Sites",
+ "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/historicsite_", "suffix": ".png" }
+ }
+ ],
+ "name": "Public Market Center Clock Sign"
+ },
+ {
+ "fsq_place_id": "4b9d10c1f964a5208f8c36e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } }],
+ "name": "Pike Place Bakery"
+ },
+ {
+ "fsq_place_id": "49ef647df964a520ad681fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d119951735", "name": "Wine Store", "short_name": "Wine Store", "plural_name": "Wine Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_wineshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } }
+ ],
+ "name": "DeLaurenti Food & Wine"
+ },
+ {
+ "fsq_place_id": "4ac7cd89f964a520d9b920e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c0941735", "name": "Mediterranean Restaurant", "short_name": "Mediterranean", "plural_name": "Mediterranean Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mediterranean_", "suffix": ".png" } }],
+ "name": "Turkish Delight"
+ },
+ {
+ "fsq_place_id": "6521e256c6f3d2015723be6e",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ff941735", "name": "Miscellaneous Store", "short_name": "Store", "plural_name": "Miscellaneous Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }],
+ "name": "The Alabaster Owl"
+ },
+ {
+ "fsq_place_id": "64c1462b75db9e2421a181fa",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } }],
+ "name": "Hellenika Cultured Creamery"
+ },
+ {
+ "fsq_place_id": "4de28f8b2271bfb8449e892c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d117951735", "name": "Candy Store", "short_name": "Candy Store", "plural_name": "Candy Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/candystore_", "suffix": ".png" } }],
+ "name": "Sweetie's"
+ },
+ {
+ "fsq_place_id": "68b0d8c3b9bd4e2bafd7bec1",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Thai Tao Farm"
+ },
+ {
+ "fsq_place_id": "4c34f0e34308b7132891c430",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } },
+ { "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }
+ ],
+ "name": "Tiny's Organic"
+ },
+ {
+ "fsq_place_id": "59ed1ad520795515ba5e1509",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d116951735", "name": "Antique Store", "short_name": "Antiques", "plural_name": "Antique Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/antique_", "suffix": ".png" } }],
+ "name": "Osara Commisary"
+ },
+ {
+ "fsq_place_id": "6599b1a970e0dc308f87bd6c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Yang Farm"
+ },
+ {
+ "fsq_place_id": "57d30787498e4af69643ce18",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Eighth Generation Flagship Store"
+ },
+ {
+ "fsq_place_id": "59b44831be70782b657ae1b8",
+ "categories": [
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b1c", "name": "Fruit and Vegetable Store", "short_name": "Fruit and Vegetable Store", "plural_name": "Fruit and Vegetable Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_grocery_", "suffix": ".png" } },
+ { "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }
+ ],
+ "name": "Sidhu Farms"
+ },
+ {
+ "fsq_place_id": "5b941d4a57a537002c09077d",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d103951735", "name": "Clothing Store", "short_name": "Apparel", "plural_name": "Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_", "suffix": ".png" } },
+ { "fsq_category_id": "58daa1558bbb0b01f18ec1d6", "name": "Art Studio", "short_name": "Art Studio", "plural_name": "Art Studios", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }
+ ],
+ "name": "Basilic Textiles"
+ },
+ {
+ "fsq_place_id": "47f245d1f964a520974e1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1c5941735", "name": "Sandwich Spot", "short_name": "Sandwich Spot", "plural_name": "Sandwich Spots", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/deli_", "suffix": ".png" } }
+ ],
+ "name": "Three Girls Bakery"
+ },
+ { "fsq_place_id": "58d96a618ee5602ddf71d713", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5a774b2e9e3b651f75c3f6d9",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ff941735", "name": "Miscellaneous Store", "short_name": "Store", "plural_name": "Miscellaneous Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }],
+ "name": "Simply Lavender"
+ },
+ {
+ "fsq_place_id": "4aa01f4cf964a520673e20e3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "Jack's Fish Spot"
+ },
+ {
+ "fsq_place_id": "5963fe50018cbb34d91b1c35",
+ "categories": [{ "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } }],
+ "name": "Careful It Bites"
+ },
+ {
+ "fsq_place_id": "4bae650bf964a52093ac3be3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d119951735", "name": "Wine Store", "short_name": "Wine Store", "plural_name": "Wine Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_wineshop_", "suffix": ".png" } }
+ ],
+ "name": "La Buona Tavola - Truffle Cafe"
+ },
+ { "fsq_place_id": "58d96a9a0aac7572b1a6d52f", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "624b4faee0f31740166c7f2a",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Artisan Glass Blowing"
+ },
+ {
+ "fsq_place_id": "4c019a5b716bc9b6ad2dbc55",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d114951735", "name": "Bookstore", "short_name": "Bookstore", "plural_name": "Bookstores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/bookstore_", "suffix": ".png" } }],
+ "name": "BLMF Literary Saloon"
+ },
+ {
+ "fsq_place_id": "4e275e2e149554c7742f17d0",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d124941735", "name": "Office", "short_name": "Office", "plural_name": "Offices", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f9941735", "name": "Food and Beverage Retail", "short_name": "Food & Beverage", "plural_name": "Food and Beverage Retail", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/foodanddrink_", "suffix": ".png" } }
+ ],
+ "name": "Tiny's Organic"
+ },
+ {
+ "fsq_place_id": "5d85527c85aecf0008de913a",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ff941735", "name": "Miscellaneous Store", "short_name": "Store", "plural_name": "Miscellaneous Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }],
+ "name": "The Everything Store"
+ },
+ {
+ "fsq_place_id": "68a7a3f3af5e2f5ab4060e71",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d127941735", "name": "Meeting Room", "short_name": "Meeting Room", "plural_name": "Meeting Rooms", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/office_conferenceroom_", "suffix": ".png" } }],
+ "name": "The Classroom"
+ },
+ {
+ "fsq_place_id": "5dd0686bf1a48400074146d5",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Double Dorjee"
+ },
+ {
+ "fsq_place_id": "6382cc5bec755b618b6d0488",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f2931735", "name": "Performing Arts Venue", "short_name": "Performing Arts", "plural_name": "Performing Arts Venues", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/performingarts_", "suffix": ".png" } }],
+ "name": "Rabbit Box Theater"
+ },
+ {
+ "fsq_place_id": "4a41576ff964a52027a51fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1bf941735", "name": "Mac and Cheese Joint", "short_name": "Mac and Cheese Joint", "plural_name": "Mac and Cheese Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/macandcheese_", "suffix": ".png" } }
+ ],
+ "name": "Beecher's Handmade Cheese"
+ },
+ { "fsq_place_id": "58d96a952eb9796c3af09c59", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5a19b89867e5f2622dbdebdf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Seattle Hats"
+ },
+ {
+ "fsq_place_id": "6302c45c7b270c589032321f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Cafe Au Lait Dahlias"
+ },
+ {
+ "fsq_place_id": "44e36b6bf964a5203d371fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10c941735", "name": "French Restaurant", "short_name": "French", "plural_name": "French Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/french_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "Place Pigalle"
+ },
+ {
+ "fsq_place_id": "4f514e1de4b0ef967033cf64",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d116951735", "name": "Antique Store", "short_name": "Antiques", "plural_name": "Antique Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/antique_", "suffix": ".png" } }],
+ "name": "2nd Hand Gala"
+ },
+ {
+ "fsq_place_id": "4f52a4eee4b02d0eb3a8aeeb",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d105951735", "name": "Children's Clothing Store", "short_name": "Children's Clothing Store", "plural_name": "Children's Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_kids_", "suffix": ".png" } }
+ ],
+ "name": "Boston Street Children's Shop"
+ },
+ {
+ "fsq_place_id": "5a764d7f1cf2e146251883d4",
+ "categories": [{ "fsq_category_id": "5744ccdfe4b0c0459246b4dc", "name": "Shopping Plaza", "short_name": "Shopping Plaza", "plural_name": "Shopping Plazas", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/mall_", "suffix": ".png" } }],
+ "name": "Down Under"
+ },
+ {
+ "fsq_place_id": "5de311c0fe97aa0007399445",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }],
+ "name": "The Magic In The Market"
+ },
+ {
+ "fsq_place_id": "659a09cd0b378d3675f46fef",
+ "categories": [{ "fsq_category_id": "4def73e84765ae376e57713a", "name": "Portuguese Restaurant", "short_name": "Portuguese", "plural_name": "Portuguese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/portuguese_", "suffix": ".png" } }],
+ "name": "Lonely Siren"
+ },
+ {
+ "fsq_place_id": "4582b276f964a5207d3f1fe3",
+ "categories": [
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b2c", "name": "Herbs and Spices Store", "short_name": "Herbs and Spices Store", "plural_name": "Herbs and Spices Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Tenzing Momo"
+ },
+ {
+ "fsq_place_id": "454c474af964a520bb3c1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d143941735", "name": "Breakfast Spot", "short_name": "Breakfast", "plural_name": "Breakfast Spots", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/breakfast_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d147941735", "name": "Diner", "short_name": "Diner", "plural_name": "Diners", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/diner_", "suffix": ".png" } }
+ ],
+ "name": "Lowell's Restaurant"
+ },
+ {
+ "fsq_place_id": "49c2e1a6f964a5203c561fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d14e941735", "name": "American Restaurant", "short_name": "American", "plural_name": "American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/default_", "suffix": ".png" } }
+ ],
+ "name": "Athenian"
+ },
+ { "fsq_place_id": "58d96ac8da54ae0f567959a1", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "6744f891e01c6807db3938aa",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d148941735", "name": "Donut Shop", "short_name": "Donuts", "plural_name": "Donut Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/donuts_", "suffix": ".png" } }],
+ "name": "Uli’s Apple Cider Donuts"
+ },
+ {
+ "fsq_place_id": "6166347d1a6d742808ba683d",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Jungle Bean"
+ },
+ {
+ "fsq_place_id": "4e74dcb0315188bfdc647599",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d102951735", "name": "Fashion Accessories Store", "short_name": "Fashion Accessories Store", "plural_name": "Fashion Accessories Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_accessories_", "suffix": ".png" } }
+ ],
+ "name": "Croshay Design"
+ },
+ {
+ "fsq_place_id": "628ab06556bad27a379944fe",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Pike St. Coffee"
+ },
+ {
+ "fsq_place_id": "689e590c6503d3418a48cfe1",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1d2941735", "name": "Sushi Restaurant", "short_name": "Sushi", "plural_name": "Sushi Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/sushi_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d145941735", "name": "Chinese Restaurant", "short_name": "Chinese", "plural_name": "Chinese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/asian_", "suffix": ".png" } }
+ ],
+ "name": "Umai Sushi &Teriyaki"
+ },
+ {
+ "fsq_place_id": "58e2d589f63c54423edeb9ee",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Ruby's Gift Shop"
+ },
+ {
+ "fsq_place_id": "4d210e79b69c6dcbd0db7595",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "Woodring Orchards"
+ },
+ {
+ "fsq_place_id": "4aca405df964a5200bc120e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d10e941735", "name": "Greek Restaurant", "short_name": "Greek", "plural_name": "Greek Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/greek_", "suffix": ".png" } }],
+ "name": "Mr D's Greek Delicacies"
+ },
+ { "fsq_place_id": "58d96a875804ea0704a62c92", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "54b16f17498e2617e20e1838",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }],
+ "name": "Mariscos México"
+ },
+ {
+ "fsq_place_id": "5b0b192c916bc1002c45359f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Cha Doua’s Garden"
+ },
+ {
+ "fsq_place_id": "5c104bab829b0c002caf9f5e",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d103951735", "name": "Clothing Store", "short_name": "Apparel", "plural_name": "Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_", "suffix": ".png" } }],
+ "name": "Aiiden"
+ },
+ {
+ "fsq_place_id": "5c71c13458002c002cb60933",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "Truffle Queen"
+ },
+ {
+ "fsq_place_id": "64a080f7acca8210e042ce22",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d111951735", "name": "Jewelry Store", "short_name": "Jewelry", "plural_name": "Jewelry Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/jewelry_", "suffix": ".png" } },
+ { "fsq_category_id": "58daa1558bbb0b01f18ec1d6", "name": "Art Studio", "short_name": "Art Studio", "plural_name": "Art Studios", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }
+ ],
+ "name": "Magpie Mouse Studios"
+ },
+ {
+ "fsq_place_id": "4b95ac9cf964a520e2ae34e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fb941735", "name": "Hobby Store", "short_name": "Hobbies", "plural_name": "Hobby Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/hobbyshop_", "suffix": ".png" } }],
+ "name": "Pike Place Magic Shop"
+ },
+ {
+ "fsq_place_id": "4ad21dcdf964a5207adf20e3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ {
+ "fsq_category_id": "4bf58dd8d48988d1d3941735",
+ "name": "Vegan and Vegetarian Restaurant",
+ "short_name": "Vegan and Vegetarian Restaurant",
+ "plural_name": "Vegan and Vegetarian Restaurants",
+ "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/vegetarian_", "suffix": ".png" }
+ }
+ ],
+ "name": "Cinnamon Works"
+ },
+ {
+ "fsq_place_id": "4d0f9817cf09a143fe63260f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } }],
+ "name": "Totem Smokehouse Smoked Salmon"
+ },
+ {
+ "fsq_place_id": "4ba3fa5ef964a520c57338e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11d951735", "name": "Butcher", "short_name": "Butcher", "plural_name": "Butchers", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_butcher_", "suffix": ".png" } }],
+ "name": "Don & Joe's Meats"
+ },
+ {
+ "fsq_place_id": "4bf960cb4a67c928f2b826cf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } }],
+ "name": "Pike Place Fish Market"
+ },
+ {
+ "fsq_place_id": "4b295179f964a520d49c24e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "MarketSpice"
+ },
+ {
+ "fsq_place_id": "53d7e31d498ebdc66811f697",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Martin Family Orchards"
+ },
+ {
+ "fsq_place_id": "6754f0680f5cf64c8639d9f2",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } },
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b26", "name": "Textiles Store", "short_name": "Textiles Store", "plural_name": "Textiles Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } },
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b25", "name": "Knitting Store", "short_name": "Knitting Supplies", "plural_name": "Knitting Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }
+ ],
+ "name": "Yarn Dragon"
+ },
+ {
+ "fsq_place_id": "4bf9739f4a67c92837e026cf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d123951735", "name": "Smoke Shop", "short_name": "Smoke Shop", "plural_name": "Smoke Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/tobacco_", "suffix": ".png" } }],
+ "name": "Tobacco Patch"
+ },
+ {
+ "fsq_place_id": "4c6fe5539375a09315280537",
+ "categories": [
+ { "fsq_category_id": "52e81612bcbc57f1066b79ed", "name": "Outdoor Sculpture", "short_name": "Outdoor Sculpture", "plural_name": "Outdoor Sculptures", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/sculpture_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d12d941735", "name": "Monument", "short_name": "Monument", "plural_name": "Monuments", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/government_monument_", "suffix": ".png" } }
+ ],
+ "name": "Rachel the Pig at Pike Place Market"
+ },
+ {
+ "fsq_place_id": "6881fae9aa6688540a5c01ff",
+ "categories": [{ "fsq_category_id": "63be6904847c3692a84b9b2b", "name": "Automotive Service", "short_name": "Automotive Service", "plural_name": "Automotive Services", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/automotive_", "suffix": ".png" } }],
+ "name": "Sapir Construction"
+ },
+ {
+ "fsq_place_id": "4beed475e24d20a14b6e7314",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d110951735", "name": "Hair Salon", "short_name": "Hair Salon", "plural_name": "Hair Salons", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/salon_barber_", "suffix": ".png" } }],
+ "name": "Sergio's Barber Shop"
+ },
+ {
+ "fsq_place_id": "474acec2f964a520994c1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d147941735", "name": "Diner", "short_name": "Diner", "plural_name": "Diners", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/diner_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d14e941735", "name": "American Restaurant", "short_name": "American", "plural_name": "American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "Sound View Café"
+ },
+ {
+ "fsq_place_id": "52991cb2498e0d9918eb12d9",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } }],
+ "name": "MarninSaylor"
+ },
+ {
+ "fsq_place_id": "5c71c1349e0d54003978395e",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "Truffle Queen"
+ }
+ ]
+ },
+ "social_media": { "facebook_id": "86493431461", "instagram": "pikeplacepublicmarket", "twitter": "pike_place" },
+ "tel": "(206) 682-7453",
+ "website": "https://www.pikeplacemarket.org"
+}
diff --git a/test/fixtures/GET_https%3A%2F%2Fplaces-api.foursquare.com%2Fplaces%2Fsearch%3Fll%3D47.609657%252C-122.342148%26limit%3D10.json b/test/fixtures/GET_https%3A%2F%2Fplaces-api.foursquare.com%2Fplaces%2Fsearch%3Fll%3D47.609657%252C-122.342148%26limit%3D10.json
new file mode 100644
index 0000000000..7340723782
--- /dev/null
+++ b/test/fixtures/GET_https%3A%2F%2Fplaces-api.foursquare.com%2Fplaces%2Fsearch%3Fll%3D47.609657%252C-122.342148%26limit%3D10.json
@@ -0,0 +1,1134 @@
+{
+ "results": [
+ {
+ "fsq_place_id": "419e8900f964a520301e1fe3",
+ "latitude": 47.6097907988089,
+ "longitude": -122.34225747070934,
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }
+ ],
+ "date_created": "2004-11-20",
+ "date_refreshed": "2025-10-27",
+ "distance": 16,
+ "email": "info@lepanier.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330080021004" },
+ "link": "/places/419e8900f964a520301e1fe3",
+ "location": { "address": "1902 Pike Pl", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1902 Pike Pl (at Stewart St), Seattle, WA 98101" },
+ "name": "Le Panier",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/419e8900f964a520301e1fe3",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Pike Place Market"
+ }
+ },
+ "social_media": { "facebook_id": "112134218808196", "twitter": "lepanierbakery" },
+ "tel": "(206) 441-3669",
+ "website": "https://www.lepanier.com"
+ },
+ {
+ "fsq_place_id": "4a41576ff964a52027a51fe3",
+ "latitude": 47.60956997146841,
+ "longitude": -122.34185099601746,
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1bf941735", "name": "Mac and Cheese Joint", "short_name": "Mac and Cheese Joint", "plural_name": "Mac and Cheese Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/macandcheese_", "suffix": ".png" } }
+ ],
+ "date_created": "2009-06-23",
+ "date_refreshed": "2025-10-26",
+ "distance": 24,
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011001" },
+ "link": "/places/4a41576ff964a52027a51fe3",
+ "location": { "address": "1600 Pike Pl", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1600 Pike Pl (Pine St), Seattle, WA 98101" },
+ "name": "Beecher's Handmade Cheese",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/4a41576ff964a52027a51fe3",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Pike Place Market"
+ }
+ },
+ "social_media": { "facebook_id": "90709154764", "instagram": "beecherscheese", "twitter": "beechersseattle" },
+ "store_id": "",
+ "tel": "(206) 956-1964",
+ "website": "https://beechershandmadecheese.com/cafe/pike-place-market"
+ },
+ {
+ "fsq_place_id": "49ee65a3f964a52058681fe3",
+ "latitude": 47.60986350454703,
+ "longitude": -122.34244033809314,
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "5293a7563cf9994f4e043a44", "name": "Russian Restaurant", "short_name": "Russian", "plural_name": "Russian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/russian_", "suffix": ".png" } }
+ ],
+ "date_created": "2009-04-22",
+ "date_refreshed": "2025-10-26",
+ "distance": 31,
+ "email": "cs@piroshkybakery.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330080021004" },
+ "link": "/places/49ee65a3f964a52058681fe3",
+ "location": { "address": "1908 Pike Pl", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1908 Pike Pl (btwn Virginia & Stewart St), Seattle, WA 98101" },
+ "name": "Piroshky Piroshky",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/49ee65a3f964a52058681fe3",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Pike Place Market"
+ }
+ },
+ "social_media": { "facebook_id": "145205242168363", "instagram": "piroshkypiroshky", "twitter": "PiroshkyBakery" },
+ "tel": "(206) 441-6068",
+ "website": "http://piroshkybakery.com"
+ },
+ {
+ "fsq_place_id": "4a9441bff964a520f02020e3",
+ "latitude": 47.60984075878839,
+ "longitude": -122.34240534518894,
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d146941735", "name": "Deli", "short_name": "Deli", "plural_name": "Delis", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/deli_", "suffix": ".png" } }],
+ "date_created": "2009-08-25",
+ "date_refreshed": "2025-10-27",
+ "distance": 28,
+ "email": "info@michoudeli.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330080021004" },
+ "link": "/places/4a9441bff964a520f02020e3",
+ "location": { "address": "1904 Pike Pl", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1904 Pike Pl, Seattle, WA 98101" },
+ "name": "Michou",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/4a9441bff964a520f02020e3",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Pike Place Market"
+ }
+ },
+ "social_media": { "facebook_id": "118607088203830" },
+ "tel": "(206) 448-4758",
+ "website": "http://www.michoudeli.com"
+ },
+ {
+ "fsq_place_id": "42accc80f964a5203f251fe3",
+ "latitude": 47.60965387058825,
+ "longitude": -122.34148136820502,
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10c941735", "name": "French Restaurant", "short_name": "French", "plural_name": "French Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/french_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d16d941735", "name": "Café", "short_name": "Café", "plural_name": "Cafés", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/cafe_", "suffix": ".png" } }
+ ],
+ "date_created": "2005-06-13",
+ "date_refreshed": "2025-10-25",
+ "distance": 49,
+ "email": "bmunn@cafecampagne.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011000" },
+ "link": "/places/42accc80f964a5203f251fe3",
+ "location": { "address": "1600 Post Aly", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1600 Post Aly (at Pine St), Seattle, WA 98101" },
+ "name": "Cafe Campagne",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/42accc80f964a5203f251fe3",
+ "related_places": {},
+ "social_media": { "facebook_id": "43225062707", "twitter": "" },
+ "store_id": "",
+ "tel": "(206) 728-2233",
+ "website": "https://cafecampagne.com"
+ },
+ {
+ "fsq_place_id": "51c1286f498e2505fd764fbe",
+ "latitude": 47.609648331726504,
+ "longitude": -122.34142532549396,
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11e941735", "name": "Cocktail Bar", "short_name": "Cocktail", "plural_name": "Cocktail Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/cocktails_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } }
+ ],
+ "date_created": "2013-06-19",
+ "date_refreshed": "2025-10-25",
+ "distance": 54,
+ "email": "rachel@rachelsgingerbeer.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011000" },
+ "link": "/places/51c1286f498e2505fd764fbe",
+ "location": { "address": "1530 Post Aly", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1530 Post Aly, Seattle, WA 98101" },
+ "name": "Rachel's Ginger Beer",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/51c1286f498e2505fd764fbe",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Pike Place Market"
+ }
+ },
+ "social_media": { "facebook_id": "193410837360450", "twitter": "rgbsoda" },
+ "tel": "(206) 467-4924",
+ "website": "http://rachelsgingerbeer.com"
+ },
+ {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "latitude": 47.609334087942955,
+ "longitude": -122.34147579532495,
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "date_created": "2005-05-09",
+ "date_refreshed": "2025-10-27",
+ "distance": 61,
+ "email": "info@pikeplacemarket.org",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011003" },
+ "link": "/places/427ea800f964a520b1211fe3",
+ "location": { "address": "85 Pike St", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "85 Pike St (at Pine St), Seattle, WA 98101" },
+ "name": "Pike Place Market",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/427ea800f964a520b1211fe3",
+ "related_places": {
+ "children": [
+ {
+ "fsq_place_id": "68c3cd83a33d853805869d81",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d103951735", "name": "Clothing Store", "short_name": "Apparel", "plural_name": "Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_", "suffix": ".png" } }],
+ "name": "Fashion with Trends"
+ },
+ {
+ "fsq_place_id": "4a6e24f6f964a52007d41fe3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }],
+ "name": "Pike Place Chowder"
+ },
+ {
+ "fsq_place_id": "595d37622be425119f41fdaf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } }],
+ "name": "Gateway To Mystical Tibet"
+ },
+ {
+ "fsq_place_id": "5c0c2839e55d8b002bec0864",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d15a941735", "name": "Garden", "short_name": "Garden", "plural_name": "Gardens", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/garden_", "suffix": ".png" } }],
+ "name": "The Secret Garden"
+ },
+ {
+ "fsq_place_id": "5c0c5e3a9e3b65002c77457c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d116951735", "name": "Antique Store", "short_name": "Antiques", "plural_name": "Antique Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/antique_", "suffix": ".png" } }],
+ "name": "Animal Gifts & Collextibles"
+ },
+ {
+ "fsq_place_id": "439b0d38f964a520db2b1fe3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1cd941735", "name": "South American Restaurant", "short_name": "South American", "plural_name": "South American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/argentinian_", "suffix": ".png" } }],
+ "name": "Copacabana"
+ },
+ {
+ "fsq_place_id": "574882b9498e2cca0de19f2c",
+ "categories": [{ "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }],
+ "name": "Tiny’s Organic Hot Apple Cider"
+ },
+ {
+ "fsq_place_id": "4582b235f964a5207c3f1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d142941735", "name": "Asian Restaurant", "short_name": "Asian", "plural_name": "Asian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/asian_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1df931735", "name": "BBQ Joint", "short_name": "BBQ", "plural_name": "BBQ Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bbqalt_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } }
+ ],
+ "name": "Mee Sum Pastry"
+ },
+ {
+ "fsq_place_id": "6276e76835c7ab40d09e0c46",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d15b941735", "name": "Farm", "short_name": "Farm", "plural_name": "Farms", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/farm_", "suffix": ".png" } }
+ ],
+ "name": "Cuaresma R&L Farm"
+ },
+ {
+ "fsq_place_id": "6700798c5024253ac7e9224f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d165941735", "name": "Scenic Lookout", "short_name": "Scenic Lookout", "plural_name": "Scenic Lookouts", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/sceniclookout_", "suffix": ".png" } }],
+ "name": "Overlook Walk"
+ },
+ {
+ "fsq_place_id": "4ea5ee17b80336cb0348c68f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f9931735", "name": "Road", "short_name": "Road", "plural_name": "Roads", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/highway_", "suffix": ".png" } }],
+ "name": "Post Alley"
+ },
+ {
+ "fsq_place_id": "5924a2743149b933a0bba7b4",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d164941735", "name": "Plaza", "short_name": "Plaza", "plural_name": "Plazas", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/plaza_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f7941735", "name": "Flea Market", "short_name": "Flea Market", "plural_name": "Flea Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/fleamarket_", "suffix": ".png" } }
+ ],
+ "name": "The Pike Place MarketFront"
+ },
+ {
+ "fsq_place_id": "635d8e050082821c2c84110a",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } }],
+ "name": "The Cheese Box"
+ },
+ {
+ "fsq_place_id": "4fa97891e4b07650f7b12097",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c1941735", "name": "Mexican Restaurant", "short_name": "Mexican", "plural_name": "Mexican Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mexican_", "suffix": ".png" } }],
+ "name": "Los Agaves Mexican Street Food"
+ },
+ {
+ "fsq_place_id": "5722a9df498efc35a195867c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c9941735", "name": "Ice Cream Parlor", "short_name": "Ice Cream", "plural_name": "Ice Cream Parlors", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/icecream_", "suffix": ".png" } }],
+ "name": "Shug's Soda Fountain and Ice Cream"
+ },
+ {
+ "fsq_place_id": "685c6d51264921158658aa02",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d114951735", "name": "Bookstore", "short_name": "Bookstore", "plural_name": "Bookstores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/bookstore_", "suffix": ".png" } }],
+ "name": "Pine Books"
+ },
+ {
+ "fsq_place_id": "4b8593a9f964a5207e6631e3",
+ "categories": [
+ { "fsq_category_id": "4eb1bd1c3b7b55596b4a748f", "name": "Filipino Restaurant", "short_name": "Filipino", "plural_name": "Filipino Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/filipino_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d118951735", "name": "Grocery Store", "short_name": "Grocery Store", "plural_name": "Grocery Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_grocery_", "suffix": ".png" } }
+ ],
+ "name": "Oriental Mart"
+ },
+ { "fsq_place_id": "58d96a9e409f565903fa6399", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "4a96e520f964a520702720e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d111941735", "name": "Japanese Restaurant", "short_name": "Japanese", "plural_name": "Japanese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/japanese_", "suffix": ".png" } }],
+ "name": "Umai Sushi Teriyaki"
+ },
+ { "fsq_place_id": "58d96a720037eb26cc623292", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5762e95e498e2dd19def67cd",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d12f941735", "name": "Library", "short_name": "Library", "plural_name": "Libraries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/library_", "suffix": ".png" } }],
+ "name": "FOLIO: The Seattle Athenaeum"
+ },
+ {
+ "fsq_place_id": "52a7bdff11d264bf08c940dd",
+ "categories": [
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b25", "name": "Knitting Store", "short_name": "Knitting Supplies", "plural_name": "Knitting Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } }
+ ],
+ "name": "So Much Yarn"
+ },
+ {
+ "fsq_place_id": "5bf604ba598e64002c2984c6",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d111941735", "name": "Japanese Restaurant", "short_name": "Japanese", "plural_name": "Japanese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/japanese_", "suffix": ".png" } }],
+ "name": "Unai Sushi & Teriyaki"
+ },
+ {
+ "fsq_place_id": "668aeba01d73f81bbb98fa66",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c1941735", "name": "Mexican Restaurant", "short_name": "Mexican", "plural_name": "Mexican Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mexican_", "suffix": ".png" } }],
+ "name": "El Mixteco"
+ },
+ {
+ "fsq_place_id": "4c9faa8a2fb1a143bbeaf540",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d114951735", "name": "Bookstore", "short_name": "Bookstore", "plural_name": "Bookstores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/bookstore_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d10d951735", "name": "Record Store", "short_name": "Record Store", "plural_name": "Record Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/record_shop_", "suffix": ".png" } }
+ ],
+ "name": "Lionheart Bookstore & Records"
+ },
+ { "fsq_place_id": "58d96a5bc0c89b2d9f98060f", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "62ec0cea495f6e5349e94a14",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } }],
+ "name": "Bite Society"
+ },
+ {
+ "fsq_place_id": "614f82bfb2119e03fb370a9d",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d102951735", "name": "Fashion Accessories Store", "short_name": "Fashion Accessories Store", "plural_name": "Fashion Accessories Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_accessories_", "suffix": ".png" } }
+ ],
+ "name": "Eclipse Hat Shop"
+ },
+ {
+ "fsq_place_id": "62f9771ef26ef62eb249cc65",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Lor Garden"
+ },
+ {
+ "fsq_place_id": "419e8900f964a520301e1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }
+ ],
+ "name": "Le Panier"
+ },
+ {
+ "fsq_place_id": "5aae7807a22db7227b2a7bb3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d110941735", "name": "Italian Restaurant", "short_name": "Italian", "plural_name": "Italian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/italian_", "suffix": ".png" } }],
+ "name": "Pasta Casalinga"
+ },
+ {
+ "fsq_place_id": "47f20627f964a520954e1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d110941735", "name": "Italian Restaurant", "short_name": "Italian", "plural_name": "Italian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/italian_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }
+ ],
+ "name": "The Pasta Bar"
+ },
+ {
+ "fsq_place_id": "5b564b40054e29002cef59e8",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d123941735", "name": "Wine Bar", "short_name": "Wine Bar", "plural_name": "Wine Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/winery_", "suffix": ".png" } }],
+ "name": "Northwest Tastings"
+ },
+ {
+ "fsq_place_id": "66880e34f675c97a48ff2d83",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d179941735", "name": "Bagel Shop", "short_name": "Bagels", "plural_name": "Bagel Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bagels_", "suffix": ".png" } }],
+ "name": "Bagel Pop"
+ },
+ {
+ "fsq_place_id": "4b4e3163f964a520b7e426e3",
+ "categories": [
+ { "fsq_category_id": "4d4ae6fc7a7b7dea34424761", "name": "Fried Chicken Joint", "short_name": "Fried Chicken", "plural_name": "Fried Chicken Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/friedchicken_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d16e941735", "name": "Fast Food Restaurant", "short_name": "Fast Food", "plural_name": "Fast Food Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/fastfood_", "suffix": ".png" } }
+ ],
+ "name": "Chicken Valley"
+ },
+ {
+ "fsq_place_id": "511ac39fe4b0c7092df6617c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } }],
+ "name": "Indi Chocolate"
+ },
+ {
+ "fsq_place_id": "6276e7ce6210f9141d155c05",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d15b941735", "name": "Farm", "short_name": "Farm", "plural_name": "Farms", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/farm_", "suffix": ".png" } }
+ ],
+ "name": "Cuaresma R&L Farm"
+ },
+ { "fsq_place_id": "4a9441bff964a520f02020e3", "categories": [{ "fsq_category_id": "4bf58dd8d48988d146941735", "name": "Deli", "short_name": "Deli", "plural_name": "Delis", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/deli_", "suffix": ".png" } }], "name": "Michou" },
+ {
+ "fsq_place_id": "4ae38a67f964a5206b9621e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11d951735", "name": "Butcher", "short_name": "Butcher", "plural_name": "Butchers", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_butcher_", "suffix": ".png" } }],
+ "name": "fero's meat market"
+ },
+ { "fsq_place_id": "58d96a4c02b60e791e4176cc", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "440daad8f964a52096301fe3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }],
+ "name": "Starbucks"
+ },
+ {
+ "fsq_place_id": "4b1b1d8cf964a52049f823e3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d118951735", "name": "Grocery Store", "short_name": "Grocery Store", "plural_name": "Grocery Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_grocery_", "suffix": ".png" } }
+ ],
+ "name": "Sosio's Fruit and Produce"
+ },
+ {
+ "fsq_place_id": "4c33791fed37a593816a6d03",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fb941735", "name": "Hobby Store", "short_name": "Hobbies", "plural_name": "Hobby Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/hobbyshop_", "suffix": ".png" } }],
+ "name": "Old Seattle Paperworks"
+ },
+ { "fsq_place_id": "58d96b7e7d66be79a60a8cda", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5bad843c73fe25002cd1df40",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Santos Farms"
+ },
+ {
+ "fsq_place_id": "49ee65a3f964a52058681fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "5293a7563cf9994f4e043a44", "name": "Russian Restaurant", "short_name": "Russian", "plural_name": "Russian Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/russian_", "suffix": ".png" } }
+ ],
+ "name": "Piroshky Piroshky"
+ },
+ { "fsq_place_id": "58d96a6c9ab66307e1769c5a", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5990c95b4940bc65f0dfc026",
+ "categories": [
+ { "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1cb941735", "name": "Food Truck", "short_name": "Food Truck", "plural_name": "Food Trucks", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/streetfood_", "suffix": ".png" } }
+ ],
+ "name": "Roasted Corn"
+ },
+ {
+ "fsq_place_id": "62c04eaf8c88c7194f5714c6",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d179941735", "name": "Bagel Shop", "short_name": "Bagels", "plural_name": "Bagel Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bagels_", "suffix": ".png" } }],
+ "name": "Bagelbop"
+ },
+ {
+ "fsq_place_id": "477ce324f964a520234d1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d115941735", "name": "Middle Eastern Restaurant", "short_name": "Middle Eastern", "plural_name": "Middle Eastern Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/middleeastern_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1c0941735", "name": "Mediterranean Restaurant", "short_name": "Mediterranean", "plural_name": "Mediterranean Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mediterranean_", "suffix": ".png" } }
+ ],
+ "name": "Falafel King"
+ },
+ {
+ "fsq_place_id": "5641140ccd108d476916ca18",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f9941735", "name": "Food and Beverage Retail", "short_name": "Food & Beverage", "plural_name": "Food and Beverage Retail", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/foodanddrink_", "suffix": ".png" } }],
+ "name": "Tiny's Organic"
+ },
+ {
+ "fsq_place_id": "689e8c4db9cf5b176894c56c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d124941735", "name": "Office", "short_name": "Office", "plural_name": "Offices", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/default_", "suffix": ".png" } }],
+ "name": "The Salish Room"
+ },
+ {
+ "fsq_place_id": "59220125c4df1d5708ba1560",
+ "categories": [{ "fsq_category_id": "58daa1558bbb0b01f18ec1d6", "name": "Art Studio", "short_name": "Art Studio", "plural_name": "Art Studios", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }],
+ "name": "Jesse Link Gallery"
+ },
+ {
+ "fsq_place_id": "68c9d7951ed0a44ad66351c5",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }],
+ "name": "Pizza & Pasta Bar"
+ },
+ {
+ "fsq_place_id": "51883255498e51f786d85a0a",
+ "categories": [
+ { "fsq_category_id": "4d954b16a243a5684b65b473", "name": "Rest Area", "short_name": "Rest Areas", "plural_name": "Rest Areas", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/restarea_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d165941735", "name": "Scenic Lookout", "short_name": "Scenic Lookout", "plural_name": "Scenic Lookouts", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/sceniclookout_", "suffix": ".png" } }
+ ],
+ "name": "Waterfront Viewpoint"
+ },
+ {
+ "fsq_place_id": "62a3ee720cea093979f7fb9d",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e2931735", "name": "Art Gallery", "short_name": "Art Gallery", "plural_name": "Art Galleries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }],
+ "name": "Gallery Ergo"
+ },
+ { "fsq_place_id": "58d96a79debdf62e17649a84", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "4ba52ffdf964a52057e938e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } }],
+ "name": "Juice Emporium"
+ },
+ {
+ "fsq_place_id": "5ccf6cc84acb19002c7b1b90",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d117951735", "name": "Candy Store", "short_name": "Candy Store", "plural_name": "Candy Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/candystore_", "suffix": ".png" } }],
+ "name": "Cobb's Pike Place Popcorn"
+ },
+ {
+ "fsq_place_id": "4bc23a4d4cdfc9b61dcf9521",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "City Fish Co."
+ },
+ {
+ "fsq_place_id": "59e548478c35dc3e57b97e90",
+ "categories": [{ "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }],
+ "name": "Tiny's Organic Hot Apple Cider"
+ },
+ {
+ "fsq_place_id": "66246edb29ceb661bfb4bbc4",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c9941735", "name": "Ice Cream Parlor", "short_name": "Ice Cream", "plural_name": "Ice Cream Parlors", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/icecream_", "suffix": ".png" } }],
+ "name": "Baxter & Frost"
+ },
+ {
+ "fsq_place_id": "684dbad659d3f64cce97a8b3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Lee’s Garden"
+ },
+ {
+ "fsq_place_id": "68c9d794251ab11151d2ec11",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }],
+ "name": "Pizza & Pasta Bar"
+ },
+ {
+ "fsq_place_id": "4a4bc093f964a520abac1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1fb941735", "name": "Hobby Store", "short_name": "Hobbies", "plural_name": "Hobby Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/hobbyshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f3941735", "name": "Toy Store", "short_name": "Toys & Games", "plural_name": "Toy Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/toys_", "suffix": ".png" } },
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b18", "name": "Comic Book Store", "short_name": "Comic Store", "plural_name": "Comic Book Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/comic_", "suffix": ".png" } }
+ ],
+ "name": "Golden Age Collectables"
+ },
+ {
+ "fsq_place_id": "628ab065d6117e2150c3ac14",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Pike St. Coffee"
+ },
+ {
+ "fsq_place_id": "4c2f6396213c2d7fbdb8305d",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d100951735", "name": "Pet Supplies Store", "short_name": "Pet Supplies Store", "plural_name": "Pet Supplies Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/pet_store_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Merry Tails"
+ },
+ {
+ "fsq_place_id": "50d7a5a3e4b05909046d1938",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } }
+ ],
+ "name": "Quality Fruit"
+ },
+ {
+ "fsq_place_id": "449addfdf964a5209c341fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d123941735", "name": "Wine Bar", "short_name": "Wine Bar", "plural_name": "Wine Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/winery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d11e941735", "name": "Cocktail Bar", "short_name": "Cocktail", "plural_name": "Cocktail Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/cocktails_", "suffix": ".png" } }
+ ],
+ "name": "The Tasting Room"
+ },
+ { "fsq_place_id": "58d96ad083622d210c61e79b", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "629f71fcf8b64237d81e23ce",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d116941735", "name": "Bar", "short_name": "Bar", "plural_name": "Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/pub_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ca941735", "name": "Pizzeria", "short_name": "Pizza", "plural_name": "Pizzerias", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/pizza_", "suffix": ".png" } }
+ ],
+ "name": "Alibi Room"
+ },
+ {
+ "fsq_place_id": "4a3c2d5df964a52038a11fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d14e941735", "name": "American Restaurant", "short_name": "American", "plural_name": "American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/default_", "suffix": ".png" } }
+ ],
+ "name": "Market Grill"
+ },
+ {
+ "fsq_place_id": "51c1286f498e2505fd764fbe",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11e941735", "name": "Cocktail Bar", "short_name": "Cocktail", "plural_name": "Cocktail Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/cocktails_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } }
+ ],
+ "name": "Rachel's Ginger Beer"
+ },
+ {
+ "fsq_place_id": "63dec8d120aa934d836a9ef9",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Woodinville Farm Flowers"
+ },
+ {
+ "fsq_place_id": "6421e2eb8eecbf34771acfff",
+ "categories": [
+ {
+ "fsq_category_id": "4deefb944765f83613cdba6e",
+ "name": "Historic and Protected Site",
+ "short_name": "Historic and Protected Site",
+ "plural_name": "Historic and Protected Sites",
+ "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/historicsite_", "suffix": ".png" }
+ }
+ ],
+ "name": "Public Market Center Clock Sign"
+ },
+ {
+ "fsq_place_id": "4b9d10c1f964a5208f8c36e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } }],
+ "name": "Pike Place Bakery"
+ },
+ {
+ "fsq_place_id": "49ef647df964a520ad681fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d119951735", "name": "Wine Store", "short_name": "Wine Store", "plural_name": "Wine Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_wineshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } }
+ ],
+ "name": "DeLaurenti Food & Wine"
+ },
+ {
+ "fsq_place_id": "4ac7cd89f964a520d9b920e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1c0941735", "name": "Mediterranean Restaurant", "short_name": "Mediterranean", "plural_name": "Mediterranean Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/mediterranean_", "suffix": ".png" } }],
+ "name": "Turkish Delight"
+ },
+ {
+ "fsq_place_id": "6521e256c6f3d2015723be6e",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ff941735", "name": "Miscellaneous Store", "short_name": "Store", "plural_name": "Miscellaneous Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }],
+ "name": "The Alabaster Owl"
+ },
+ {
+ "fsq_place_id": "64c1462b75db9e2421a181fa",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1d0941735", "name": "Dessert Shop", "short_name": "Desserts", "plural_name": "Dessert Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/dessert_", "suffix": ".png" } }],
+ "name": "Hellenika Cultured Creamery"
+ },
+ {
+ "fsq_place_id": "4de28f8b2271bfb8449e892c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d117951735", "name": "Candy Store", "short_name": "Candy Store", "plural_name": "Candy Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/candystore_", "suffix": ".png" } }],
+ "name": "Sweetie's"
+ },
+ {
+ "fsq_place_id": "68b0d8c3b9bd4e2bafd7bec1",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Thai Tao Farm"
+ },
+ {
+ "fsq_place_id": "4c34f0e34308b7132891c430",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d112941735", "name": "Juice Bar", "short_name": "Juice Bar", "plural_name": "Juice Bars", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/juicebar_", "suffix": ".png" } },
+ { "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }
+ ],
+ "name": "Tiny's Organic"
+ },
+ {
+ "fsq_place_id": "59ed1ad520795515ba5e1509",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d116951735", "name": "Antique Store", "short_name": "Antiques", "plural_name": "Antique Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/antique_", "suffix": ".png" } }],
+ "name": "Osara Commisary"
+ },
+ {
+ "fsq_place_id": "6599b1a970e0dc308f87bd6c",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Yang Farm"
+ },
+ {
+ "fsq_place_id": "57d30787498e4af69643ce18",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Eighth Generation Flagship Store"
+ },
+ {
+ "fsq_place_id": "59b44831be70782b657ae1b8",
+ "categories": [
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b1c", "name": "Fruit and Vegetable Store", "short_name": "Fruit and Vegetable Store", "plural_name": "Fruit and Vegetable Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_grocery_", "suffix": ".png" } },
+ { "fsq_category_id": "56aa371be4b08b9a8d57350b", "name": "Food Stand", "short_name": "Food Stand", "plural_name": "Food Stands", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/movingtarget_", "suffix": ".png" } }
+ ],
+ "name": "Sidhu Farms"
+ },
+ {
+ "fsq_place_id": "5b941d4a57a537002c09077d",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d103951735", "name": "Clothing Store", "short_name": "Apparel", "plural_name": "Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_", "suffix": ".png" } },
+ { "fsq_category_id": "58daa1558bbb0b01f18ec1d6", "name": "Art Studio", "short_name": "Art Studio", "plural_name": "Art Studios", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }
+ ],
+ "name": "Basilic Textiles"
+ },
+ {
+ "fsq_place_id": "47f245d1f964a520974e1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1c5941735", "name": "Sandwich Spot", "short_name": "Sandwich Spot", "plural_name": "Sandwich Spots", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/deli_", "suffix": ".png" } }
+ ],
+ "name": "Three Girls Bakery"
+ },
+ { "fsq_place_id": "58d96a618ee5602ddf71d713", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5a774b2e9e3b651f75c3f6d9",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ff941735", "name": "Miscellaneous Store", "short_name": "Store", "plural_name": "Miscellaneous Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }],
+ "name": "Simply Lavender"
+ },
+ {
+ "fsq_place_id": "4aa01f4cf964a520673e20e3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "Jack's Fish Spot"
+ },
+ {
+ "fsq_place_id": "5963fe50018cbb34d91b1c35",
+ "categories": [{ "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } }],
+ "name": "Careful It Bites"
+ },
+ {
+ "fsq_place_id": "4bae650bf964a52093ac3be3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d119951735", "name": "Wine Store", "short_name": "Wine Store", "plural_name": "Wine Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_wineshop_", "suffix": ".png" } }
+ ],
+ "name": "La Buona Tavola - Truffle Cafe"
+ },
+ { "fsq_place_id": "58d96a9a0aac7572b1a6d52f", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "624b4faee0f31740166c7f2a",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Artisan Glass Blowing"
+ },
+ {
+ "fsq_place_id": "4c019a5b716bc9b6ad2dbc55",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d114951735", "name": "Bookstore", "short_name": "Bookstore", "plural_name": "Bookstores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/bookstore_", "suffix": ".png" } }],
+ "name": "BLMF Literary Saloon"
+ },
+ {
+ "fsq_place_id": "4e275e2e149554c7742f17d0",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d124941735", "name": "Office", "short_name": "Office", "plural_name": "Offices", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f9941735", "name": "Food and Beverage Retail", "short_name": "Food & Beverage", "plural_name": "Food and Beverage Retail", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/foodanddrink_", "suffix": ".png" } }
+ ],
+ "name": "Tiny's Organic"
+ },
+ {
+ "fsq_place_id": "5d85527c85aecf0008de913a",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ff941735", "name": "Miscellaneous Store", "short_name": "Store", "plural_name": "Miscellaneous Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }],
+ "name": "The Everything Store"
+ },
+ {
+ "fsq_place_id": "68a7a3f3af5e2f5ab4060e71",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d127941735", "name": "Meeting Room", "short_name": "Meeting Room", "plural_name": "Meeting Rooms", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/office_conferenceroom_", "suffix": ".png" } }],
+ "name": "The Classroom"
+ },
+ {
+ "fsq_place_id": "5dd0686bf1a48400074146d5",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Double Dorjee"
+ },
+ {
+ "fsq_place_id": "6382cc5bec755b618b6d0488",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1f2931735", "name": "Performing Arts Venue", "short_name": "Performing Arts", "plural_name": "Performing Arts Venues", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/performingarts_", "suffix": ".png" } }
+ ],
+ "name": "Rabbit Box Theater"
+ },
+ {
+ "fsq_place_id": "4a41576ff964a52027a51fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11e951735", "name": "Cheese Store", "short_name": "Cheese Store", "plural_name": "Cheese Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_cheese_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1bf941735", "name": "Mac and Cheese Joint", "short_name": "Mac and Cheese Joint", "plural_name": "Mac and Cheese Joints", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/macandcheese_", "suffix": ".png" } }
+ ],
+ "name": "Beecher's Handmade Cheese"
+ },
+ { "fsq_place_id": "58d96a952eb9796c3af09c59", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "5a19b89867e5f2622dbdebdf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Seattle Hats"
+ },
+ {
+ "fsq_place_id": "6302c45c7b270c589032321f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Cafe Au Lait Dahlias"
+ },
+ {
+ "fsq_place_id": "44e36b6bf964a5203d371fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d10c941735", "name": "French Restaurant", "short_name": "French", "plural_name": "French Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/french_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "Place Pigalle"
+ },
+ {
+ "fsq_place_id": "4f514e1de4b0ef967033cf64",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d116951735", "name": "Antique Store", "short_name": "Antiques", "plural_name": "Antique Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/antique_", "suffix": ".png" } }],
+ "name": "2nd Hand Gala"
+ },
+ {
+ "fsq_place_id": "4f52a4eee4b02d0eb3a8aeeb",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d105951735", "name": "Children's Clothing Store", "short_name": "Children's Clothing Store", "plural_name": "Children's Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_kids_", "suffix": ".png" } }
+ ],
+ "name": "Boston Street Children's Shop"
+ },
+ {
+ "fsq_place_id": "5a764d7f1cf2e146251883d4",
+ "categories": [{ "fsq_category_id": "5744ccdfe4b0c0459246b4dc", "name": "Shopping Plaza", "short_name": "Shopping Plaza", "plural_name": "Shopping Plazas", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/mall_", "suffix": ".png" } }],
+ "name": "Down Under"
+ },
+ {
+ "fsq_place_id": "5de311c0fe97aa0007399445",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }],
+ "name": "The Magic In The Market"
+ },
+ {
+ "fsq_place_id": "659a09cd0b378d3675f46fef",
+ "categories": [{ "fsq_category_id": "4def73e84765ae376e57713a", "name": "Portuguese Restaurant", "short_name": "Portuguese", "plural_name": "Portuguese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/portuguese_", "suffix": ".png" } }],
+ "name": "Lonely Siren"
+ },
+ {
+ "fsq_place_id": "4582b276f964a5207d3f1fe3",
+ "categories": [
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b2c", "name": "Herbs and Spices Store", "short_name": "Herbs and Spices Store", "plural_name": "Herbs and Spices Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Tenzing Momo"
+ },
+ {
+ "fsq_place_id": "454c474af964a520bb3c1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d143941735", "name": "Breakfast Spot", "short_name": "Breakfast", "plural_name": "Breakfast Spots", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/breakfast_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d147941735", "name": "Diner", "short_name": "Diner", "plural_name": "Diners", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/diner_", "suffix": ".png" } }
+ ],
+ "name": "Lowell's Restaurant"
+ },
+ {
+ "fsq_place_id": "49c2e1a6f964a5203c561fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d14e941735", "name": "American Restaurant", "short_name": "American", "plural_name": "American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/default_", "suffix": ".png" } }
+ ],
+ "name": "Athenian"
+ },
+ { "fsq_place_id": "58d96ac8da54ae0f567959a1", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "6744f891e01c6807db3938aa",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d148941735", "name": "Donut Shop", "short_name": "Donuts", "plural_name": "Donut Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/donuts_", "suffix": ".png" } }],
+ "name": "Uli’s Apple Cider Donuts"
+ },
+ {
+ "fsq_place_id": "6166347d1a6d742808ba683d",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Jungle Bean"
+ },
+ {
+ "fsq_place_id": "4e74dcb0315188bfdc647599",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d102951735", "name": "Fashion Accessories Store", "short_name": "Fashion Accessories Store", "plural_name": "Fashion Accessories Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_accessories_", "suffix": ".png" } }
+ ],
+ "name": "Croshay Design"
+ },
+ {
+ "fsq_place_id": "628ab06556bad27a379944fe",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }
+ ],
+ "name": "Pike St. Coffee"
+ },
+ {
+ "fsq_place_id": "689e590c6503d3418a48cfe1",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d1d2941735", "name": "Sushi Restaurant", "short_name": "Sushi", "plural_name": "Sushi Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/sushi_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d145941735", "name": "Chinese Restaurant", "short_name": "Chinese", "plural_name": "Chinese Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/asian_", "suffix": ".png" } }
+ ],
+ "name": "Umai Sushi &Teriyaki"
+ },
+ {
+ "fsq_place_id": "58e2d589f63c54423edeb9ee",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d128951735", "name": "Gift Store", "short_name": "Gift Store", "plural_name": "Gift Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/giftshop_", "suffix": ".png" } }],
+ "name": "Ruby's Gift Shop"
+ },
+ {
+ "fsq_place_id": "4d210e79b69c6dcbd0db7595",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "Woodring Orchards"
+ },
+ {
+ "fsq_place_id": "4aca405df964a5200bc120e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d10e941735", "name": "Greek Restaurant", "short_name": "Greek", "plural_name": "Greek Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/greek_", "suffix": ".png" } }],
+ "name": "Mr D's Greek Delicacies"
+ },
+ { "fsq_place_id": "58d96a875804ea0704a62c92", "categories": [], "name": "Chain Music Press" },
+ {
+ "fsq_place_id": "54b16f17498e2617e20e1838",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }],
+ "name": "Mariscos México"
+ },
+ {
+ "fsq_place_id": "5b0b192c916bc1002c45359f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } }],
+ "name": "Cha Doua’s Garden"
+ },
+ {
+ "fsq_place_id": "5c104bab829b0c002caf9f5e",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d103951735", "name": "Clothing Store", "short_name": "Apparel", "plural_name": "Clothing Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/apparel_", "suffix": ".png" } }],
+ "name": "Aiiden"
+ },
+ {
+ "fsq_place_id": "5c71c13458002c002cb60933",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "Truffle Queen"
+ },
+ {
+ "fsq_place_id": "64a080f7acca8210e042ce22",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d111951735", "name": "Jewelry Store", "short_name": "Jewelry", "plural_name": "Jewelry Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/jewelry_", "suffix": ".png" } },
+ { "fsq_category_id": "58daa1558bbb0b01f18ec1d6", "name": "Art Studio", "short_name": "Art Studio", "plural_name": "Art Studios", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_", "suffix": ".png" } }
+ ],
+ "name": "Magpie Mouse Studios"
+ },
+ {
+ "fsq_place_id": "4b95ac9cf964a520e2ae34e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fb941735", "name": "Hobby Store", "short_name": "Hobbies", "plural_name": "Hobby Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/hobbyshop_", "suffix": ".png" } }],
+ "name": "Pike Place Magic Shop"
+ },
+ {
+ "fsq_place_id": "4ad21dcdf964a5207adf20e3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d16a941735", "name": "Bakery", "short_name": "Bakery", "plural_name": "Bakeries", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/bakery_", "suffix": ".png" } },
+ {
+ "fsq_category_id": "4bf58dd8d48988d1d3941735",
+ "name": "Vegan and Vegetarian Restaurant",
+ "short_name": "Vegan and Vegetarian Restaurant",
+ "plural_name": "Vegan and Vegetarian Restaurants",
+ "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/vegetarian_", "suffix": ".png" }
+ }
+ ],
+ "name": "Cinnamon Works"
+ },
+ {
+ "fsq_place_id": "4d0f9817cf09a143fe63260f",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } }],
+ "name": "Totem Smokehouse Smoked Salmon"
+ },
+ {
+ "fsq_place_id": "4ba3fa5ef964a520c57338e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d11d951735", "name": "Butcher", "short_name": "Butcher", "plural_name": "Butchers", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_butcher_", "suffix": ".png" } }],
+ "name": "Don & Joe's Meats"
+ },
+ {
+ "fsq_place_id": "4bf960cb4a67c928f2b826cf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d10e951735", "name": "Fish Market", "short_name": "Fish Market", "plural_name": "Fish Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_fishmarket_", "suffix": ".png" } }],
+ "name": "Pike Place Fish Market"
+ },
+ {
+ "fsq_place_id": "4b295179f964a520d49c24e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "MarketSpice"
+ },
+ {
+ "fsq_place_id": "53d7e31d498ebdc66811f697",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d11b951735", "name": "Flower Store", "short_name": "Flower Store", "plural_name": "Flower Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/flowershop_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Martin Family Orchards"
+ },
+ {
+ "fsq_place_id": "6754f0680f5cf64c8639d9f2",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } },
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b26", "name": "Textiles Store", "short_name": "Textiles Store", "plural_name": "Textiles Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } },
+ { "fsq_category_id": "52f2ab2ebcbc57f1066b8b25", "name": "Knitting Store", "short_name": "Knitting Supplies", "plural_name": "Knitting Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/default_", "suffix": ".png" } }
+ ],
+ "name": "Yarn Dragon"
+ },
+ {
+ "fsq_place_id": "4bf9739f4a67c92837e026cf",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d123951735", "name": "Smoke Shop", "short_name": "Smoke Shop", "plural_name": "Smoke Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/tobacco_", "suffix": ".png" } }],
+ "name": "Tobacco Patch"
+ },
+ {
+ "fsq_place_id": "4c6fe5539375a09315280537",
+ "categories": [
+ { "fsq_category_id": "52e81612bcbc57f1066b79ed", "name": "Outdoor Sculpture", "short_name": "Outdoor Sculpture", "plural_name": "Outdoor Sculptures", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/sculpture_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d12d941735", "name": "Monument", "short_name": "Monument", "plural_name": "Monuments", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/building/government_monument_", "suffix": ".png" } }
+ ],
+ "name": "Rachel the Pig at Pike Place Market"
+ },
+ {
+ "fsq_place_id": "6881fae9aa6688540a5c01ff",
+ "categories": [{ "fsq_category_id": "63be6904847c3692a84b9b2b", "name": "Automotive Service", "short_name": "Automotive Service", "plural_name": "Automotive Services", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/automotive_", "suffix": ".png" } }],
+ "name": "Sapir Construction"
+ },
+ {
+ "fsq_place_id": "4beed475e24d20a14b6e7314",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d110951735", "name": "Hair Salon", "short_name": "Hair Salon", "plural_name": "Hair Salons", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/salon_barber_", "suffix": ".png" } }],
+ "name": "Sergio's Barber Shop"
+ },
+ {
+ "fsq_place_id": "474acec2f964a520994c1fe3",
+ "categories": [
+ { "fsq_category_id": "4bf58dd8d48988d147941735", "name": "Diner", "short_name": "Diner", "plural_name": "Diners", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/diner_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d14e941735", "name": "American Restaurant", "short_name": "American", "plural_name": "American Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/default_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1ce941735", "name": "Seafood Restaurant", "short_name": "Seafood", "plural_name": "Seafood Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/seafood_", "suffix": ".png" } }
+ ],
+ "name": "Sound View Café"
+ },
+ {
+ "fsq_place_id": "52991cb2498e0d9918eb12d9",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d127951735", "name": "Arts and Crafts Store", "short_name": "Arts and Crafts Store", "plural_name": "Arts and Crafts Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/artstore_", "suffix": ".png" } }],
+ "name": "MarninSaylor"
+ },
+ {
+ "fsq_place_id": "5c71c1349e0d54003978395e",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1f5941735", "name": "Gourmet Store", "short_name": "Gourmet", "plural_name": "Gourmet Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_gourmet_", "suffix": ".png" } }],
+ "name": "Truffle Queen"
+ }
+ ]
+ },
+ "social_media": { "facebook_id": "86493431461", "instagram": "pikeplacepublicmarket", "twitter": "pike_place" },
+ "tel": "(206) 682-7453",
+ "website": "https://www.pikeplacemarket.org"
+ },
+ {
+ "fsq_place_id": "564e6ed5498eb69070554f79",
+ "latitude": 47.6099251,
+ "longitude": -122.3415442,
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1d2941735", "name": "Sushi Restaurant", "short_name": "Sushi", "plural_name": "Sushi Restaurants", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/sushi_", "suffix": ".png" } }],
+ "date_created": "2015-11-20",
+ "date_refreshed": "2025-10-20",
+ "distance": 54,
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011000" },
+ "link": "/places/564e6ed5498eb69070554f79",
+ "location": { "address": "86 Pine St", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "86 Pine St, Seattle, WA 98101" },
+ "name": "Sushi Kashiba",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/564e6ed5498eb69070554f79",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "4b36f319f964a520823e25e3",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1fa931735", "name": "Hotel", "short_name": "Hotel", "plural_name": "Hotels", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/travel/hotel_", "suffix": ".png" } }],
+ "name": "Inn at the Market"
+ }
+ },
+ "social_media": { "facebook_id": "188220664854130", "twitter": "sushikashiba" },
+ "tel": "(206) 441-8844",
+ "website": "https://sushikashiba.com"
+ },
+ {
+ "fsq_place_id": "4a8af0f9f964a520f30a20e3",
+ "latitude": 47.6095888496472,
+ "longitude": -122.34164820146991,
+ "categories": [
+ { "fsq_category_id": "58daa1558bbb0b01f18ec1b4", "name": "Kitchen Supply Store", "short_name": "Kitchen Supply", "plural_name": "Kitchen Supply Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_butcher_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1f8941735", "name": "Furniture and Home Store", "short_name": "Furniture and Home Store", "plural_name": "Furniture and Home Stores", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/furniture_", "suffix": ".png" } }
+ ],
+ "chains": [{ "fsq_chain_id": "5b1ff49775eee4002bc1cec8", "name": "Sur La Table" }],
+ "date_created": "2009-08-18",
+ "date_refreshed": "2025-10-23",
+ "distance": 38,
+ "email": "slt001@surlatable.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330081011001" },
+ "link": "/places/4a8af0f9f964a520f30a20e3",
+ "location": { "address": "84 Pine St", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "84 Pine St (at Post Alley), Seattle, WA 98101" },
+ "name": "Sur La Table",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/4a8af0f9f964a520f30a20e3",
+ "related_places": {},
+ "social_media": { "twitter": "Sur_La_Table" },
+ "store_id": "1",
+ "tel": "(206) 448-2244",
+ "website": "http://www.surlatable.com"
+ },
+ {
+ "fsq_place_id": "440daad8f964a52096301fe3",
+ "latitude": 47.609988295775516,
+ "longitude": -122.34262556938519,
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }],
+ "chains": [{ "fsq_chain_id": "556f676fbd6a75a99038d8ec", "name": "Starbucks" }],
+ "date_created": "2006-03-07",
+ "date_refreshed": "2025-10-27",
+ "distance": 51,
+ "email": "info@starbucks.com",
+ "extended_location": { "dma": "Seattle-Tacoma", "census_block_id": "530330080021004" },
+ "link": "/places/440daad8f964a52096301fe3",
+ "location": { "address": "1912 Pike Pl", "locality": "Seattle", "region": "WA", "postcode": "98101", "country": "US", "formatted_address": "1912 Pike Pl, Seattle, WA 98101" },
+ "name": "Starbucks",
+ "placemaker_url": "https://foursquare.com/placemakers/review-place/440daad8f964a52096301fe3",
+ "related_places": {
+ "parent": {
+ "fsq_place_id": "427ea800f964a520b1211fe3",
+ "categories": [
+ { "fsq_category_id": "50be8ee891d4fa8dcc7199a7", "name": "Market", "short_name": "Market", "plural_name": "Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/market_", "suffix": ".png" } },
+ { "fsq_category_id": "4bf58dd8d48988d1fa941735", "name": "Farmers Market", "short_name": "Farmers Market", "plural_name": "Farmers Markets", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/shops/food_farmersmarket_", "suffix": ".png" } }
+ ],
+ "name": "Pike Place Market"
+ },
+ "children": [
+ {
+ "fsq_place_id": "5ef390608ad2500008537a55",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }],
+ "name": "1912 Pike Pl"
+ },
+ {
+ "fsq_place_id": "5ef390b673640900084473e7",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }],
+ "name": "1912 Pile Pl"
+ },
+ {
+ "fsq_place_id": "5ef390618556300008cbf9cb",
+ "categories": [{ "fsq_category_id": "4bf58dd8d48988d1e0931735", "name": "Coffee Shop", "short_name": "Coffee Shop", "plural_name": "Coffee Shops", "icon": { "prefix": "https://ss3.4sqi.net/img/categories_v2/food/coffeeshop_", "suffix": ".png" } }],
+ "name": "1912 Pike Pl"
+ }
+ ]
+ },
+ "social_media": { "facebook_id": "22092443056", "instagram": "starbucks", "twitter": "starbucks" },
+ "store_id": "301-67",
+ "tel": "(206) 448-8762",
+ "website": "https://www.starbucks.com"
+ }
+ ],
+ "context": { "geo_bounds": { "circle": { "center": { "latitude": 47.609657, "longitude": -122.342148 }, "radius": 600 } } }
+}
diff --git a/test/fixtures/fixture_manifest.json b/test/fixtures/fixture_manifest.json
new file mode 100644
index 0000000000..1f60bb3661
--- /dev/null
+++ b/test/fixtures/fixture_manifest.json
@@ -0,0 +1,12 @@
+[
+ "e2e-nokey/github-api.e2e.test.js",
+ "e2e-nokey/pubchem.e2e.test.js",
+ "e2e-nokey/scraping.e2e.test.js",
+ "e2e-nokey/wikipedia.e2e.test.js",
+ "e2e/chart.e2e.test.js",
+ "e2e/foursquare.e2e.test.js",
+ "e2e/nyt.e2e.test.js",
+ "e2e/openai-moderation.e2e.test.js",
+ "e2e/trakt.e2e.test.js",
+ "e2e/giphy.e2e.test.js"
+]
diff --git a/test/tools/fixture-helpers.js b/test/tools/fixture-helpers.js
new file mode 100644
index 0000000000..beab8dc9dd
--- /dev/null
+++ b/test/tools/fixture-helpers.js
@@ -0,0 +1,66 @@
+const crypto = require('node:crypto');
+const fs = require('node:fs');
+const path = require('node:path');
+
+const MANIFEST_PATH = path.resolve(__dirname, '..', 'fixtures', 'fixture_manifest.json');
+
+function hashBody(body) {
+ try {
+ const h = crypto.createHash('sha1');
+ if (Buffer.isBuffer(body)) {
+ h.update(body);
+ } else if (typeof body === 'string') {
+ h.update(body);
+ } else if (body && typeof body === 'object') {
+ h.update(JSON.stringify(body));
+ } else if (body != null) {
+ h.update(String(body));
+ }
+ return h.digest('hex').slice(0, 12);
+ } catch {
+ return 'nohash';
+ }
+}
+
+function keyFor(method, url, body) {
+ const upper = String(method || 'GET').toUpperCase();
+ const parsed = new URL(url);
+ const sensitiveParams = ['apikey', 'api_key', 'api-key', 'key', 'token'];
+ sensitiveParams.forEach((param) => parsed.searchParams.delete(param));
+ const cleanUrl = `${parsed.origin}${parsed.pathname}${parsed.search}`;
+ // Encode, then replace Windows-forbidden filename characters with _
+ const safe = encodeURIComponent(cleanUrl).replace(/[<>:"/\\|?*]/g, '_');
+ if (upper === 'GET') {
+ return `${upper}_${safe}.json`;
+ }
+ const hash = hashBody(body);
+ return `${upper}_${safe}_${hash}.json`;
+}
+
+function registerTestInManifest(testFile) {
+ try {
+ if (process.env.API_MODE !== 'record') return;
+ let list = [];
+ try {
+ list = JSON.parse(fs.readFileSync(MANIFEST_PATH, 'utf8'));
+ if (!Array.isArray(list)) list = [];
+ } catch {}
+ if (!list.includes(testFile)) {
+ list.push(testFile);
+ fs.writeFileSync(MANIFEST_PATH, JSON.stringify(list, null, 2));
+ }
+ } catch {}
+}
+
+function isInManifest(id) {
+ try {
+ if (!id) return false;
+ if (!fs.existsSync(MANIFEST_PATH)) return false;
+ const list = JSON.parse(fs.readFileSync(MANIFEST_PATH, 'utf8'));
+ return Array.isArray(list) && list.includes(id);
+ } catch {
+ return false;
+ }
+}
+
+module.exports = { hashBody, keyFor, registerTestInManifest, isInManifest };
diff --git a/test/tools/server-axios-fixtures.js b/test/tools/server-axios-fixtures.js
new file mode 100644
index 0000000000..d7c1663eb3
--- /dev/null
+++ b/test/tools/server-axios-fixtures.js
@@ -0,0 +1,76 @@
+/**
+ * Server-side Axios API Fixture System
+ *
+ * This module uses Axios interceptors to record and replay HTTP responses for server-side
+ * API calls made by Express controllers. It enables deterministic testing without requiring
+ * live API credentials or network access.
+ *
+ * How it works:
+ * - RECORD MODE (API_MODE=record): Axios response interceptor captures successful responses
+ * and saves JSON data to test/fixtures/ using sanitized URL-based filenames.
+ * - REPLAY MODE (API_MODE=replay): Axios request interceptor short-circuits requests by
+ * returning saved fixture data. If fixture exists, it rejects the request with a special
+ * marker (isAxiosFixture:true), which the response error interceptor converts back to a
+ * successful response. Falls back to real axios if fixture is missing (unless
+ * API_STRICT_REPLAY=1, which blocks all non-fixture requests).
+ *
+ * Installation: This module is automatically installed in test/tools/start-with-memory-db.js
+ * before the Express app loads, ensuring all server-side axios calls are intercepted.
+ *
+ * Fixture keys: Generated by keyFor() helper, which sanitizes URLs (strips sensitive query
+ * params like apikey/token) and adds body hashes for POST requests to ensure uniqueness.
+ *
+ * See also: server-fetch-fixtures.js (same pattern for fetch), fixture-helpers.js (shared utilities)
+ */
+
+const fs = require('node:fs');
+const path = require('node:path');
+const axios = require('axios');
+const { keyFor } = require('./fixture-helpers');
+
+const FIXTURES_DIR = path.resolve(__dirname, '..', 'fixtures');
+
+function installServerAxiosFixtures({ mode = process.env.API_MODE } = {}) {
+ const strict = process.env.API_STRICT_REPLAY === '1';
+
+ if (mode === 'record') {
+ axios.interceptors.response.use((response) => {
+ try {
+ const { config, headers, data } = response;
+ const ct = (headers && headers['content-type']) || '';
+ if (typeof data === 'object' || ct.toLowerCase().includes('application/json')) {
+ const file = path.join(FIXTURES_DIR, keyFor(config.method || 'GET', config.url, config.data));
+ fs.writeFileSync(file, typeof data === 'string' ? data : JSON.stringify(data), 'utf8');
+ }
+ } catch {}
+ return response;
+ });
+ } else if (mode === 'replay') {
+ axios.interceptors.request.use((config) => {
+ try {
+ const file = path.join(FIXTURES_DIR, keyFor(config.method || 'GET', config.url, config.data));
+ if (fs.existsSync(file)) {
+ const data = JSON.parse(fs.readFileSync(file, 'utf8'));
+ console.log(`[fixtures] server replay ${(config.method || 'GET').toUpperCase()} ${config.url}`);
+ return Promise.reject({
+ isAxiosFixture: true,
+ config,
+ response: { config, status: 200, statusText: 'OK', headers: { 'content-type': 'application/json' }, data, request: {} },
+ });
+ }
+ if (strict) {
+ console.warn(`[fixtures] server strict-replay missing: ${(config.method || 'GET').toUpperCase()} ${config.url} — blocking network`);
+ throw new Error(`Strict replay: missing fixture for ${(config.method || 'GET').toUpperCase()} ${config.url}`);
+ }
+ } catch {}
+ return config;
+ });
+
+ axios.interceptors.response.use(
+ (response) => response,
+ (error) => (error?.isAxiosFixture ? Promise.resolve(error.response) : Promise.reject(error)),
+ );
+ }
+}
+
+module.exports = { installServerAxiosFixtures };
diff --git a/test/tools/server-fetch-fixtures.js b/test/tools/server-fetch-fixtures.js
new file mode 100644
index 0000000000..1da5a85bcb
--- /dev/null
+++ b/test/tools/server-fetch-fixtures.js
@@ -0,0 +1,77 @@
+/**
+ * Server-side fetch() API Fixture System
+ *
+ * This module monkey-patches the global fetch() function to record and replay HTTP responses
+ * for server-side API calls made by Express controllers. It enables deterministic testing
+ * without requiring live API credentials or network access.
+ *
+ * How it works:
+ * - RECORD MODE (API_MODE=record): Intercepts fetch() calls, executes them normally, and saves
+ * JSON responses to test/fixtures/ using sanitized URL-based filenames.
+ * - REPLAY MODE (API_MODE=replay): Intercepts fetch() calls and returns saved fixtures instead
+ * of making real network requests. Falls back to real fetch if fixture is missing (unless
+ * API_STRICT_REPLAY=1, which blocks all non-fixture requests).
+ *
+ * Installation: This module is automatically installed in test/tools/start-with-memory-db.js
+ * before the Express app loads, ensuring all server-side fetch calls are intercepted.
+ *
+ * Fixture keys: Generated by keyFor() helper, which sanitizes URLs (strips sensitive query
+ * params like apikey/token) and adds body hashes for POST requests to ensure uniqueness.
+ *
+ * See also: server-axios-fixtures.js (same pattern for axios), fixture-helpers.js (shared utilities)
+ */
+
+const fs = require('node:fs');
+const path = require('node:path');
+const { keyFor } = require('./fixture-helpers');
+
+const FIXTURES_DIR = path.resolve(__dirname, '..', 'fixtures');
+
+function installServerApiFixtures({ mode = process.env.API_MODE } = {}) {
+ const strict = process.env.API_STRICT_REPLAY === '1';
+
+ const origFetch = globalThis.fetch;
+
+ if (mode === 'record') {
+ globalThis.fetch = async (input, init = {}) => {
+ const res = await origFetch(input, init);
+ try {
+ const url = typeof input === 'string' ? input : input.url;
+ const method = (init.method || 'GET').toUpperCase();
+ const ct = (res.headers.get('content-type') || '').toLowerCase();
+ if (ct.includes('application/json')) {
+ const body = await res.clone().text();
+ const file = path.join(FIXTURES_DIR, keyFor(method, url, init.body));
+ fs.writeFileSync(file, body, 'utf8');
+ }
+ } catch {}
+ return res;
+ };
+ return;
+ }
+
+ if (mode === 'replay') {
+ globalThis.fetch = async (input, init = {}) => {
+ try {
+ const url = typeof input === 'string' ? input : input.url;
+ const method = (init.method || 'GET').toUpperCase();
+ const file = path.join(FIXTURES_DIR, keyFor(method, url, init.body));
+ if (fs.existsSync(file)) {
+ const body = fs.readFileSync(file, 'utf8');
+ console.log(`[fixtures] server replay ${method} ${url}`);
+ return new Response(body, {
+ status: 200,
+ headers: { 'content-type': 'application/json; charset=utf-8' },
+ });
+ }
+ if (strict) {
+ console.warn(`[fixtures] server strict-replay missing: ${method} ${url} — blocking network`);
+ throw new Error(`Strict replay: missing fixture for ${method} ${url}`);
+ }
+ } catch {}
+ return origFetch(input, init);
+ };
+ }
+}
+
+module.exports = { installServerApiFixtures };
diff --git a/views/api/foursquare.pug b/views/api/foursquare.pug
index ee5bc088e9..989369393a 100644
--- a/views/api/foursquare.pug
+++ b/views/api/foursquare.pug
@@ -7,56 +7,48 @@ block content
| Foursquare API
.btn-group.mb-4.d-flex(role='group')
- a.btn.btn-primary.w-100(href='https://location.foursquare.com/developer', target='_blank')
+ a.btn.btn-primary.w-100(href='https://foursquare.com/developer', target='_blank')
i.far.fa-check-square.fa-sm.me-2
| Developer Info
a.btn.btn-primary.w-100(href='https://docs.foursquare.com/', target='_blank')
i.fas.fa-code-branch.fa-sm.me-2
| API Docs
- h3.text-primary Trending Venues
- p Near longitude: -122.342148, latitude: 47.609657
- table.table.table-striped.table-bordered
- thead
- tr
- th.d-xs
- th Name
- th.d-xs.d-sm Category
- th.d-xs Address
- th.d-xs Distance (meters)
- th.d-xs Open Now ?
- tbody
- each venue in trendingVenues
+ if error
+ .alert.alert-danger.mt-3 #{ error }
+ else
+ h3.text-primary Trending Venues
+ p Near longitude: -122.342148, latitude: 47.609657
+ table.table.table-striped.table-bordered
+ thead
tr
- td.d-xs
- if venue.categories && venue.categories.length > 0
- img(src=venue.categories[0].icon.prefix + '32' + venue.categories[0].icon.suffix, alt=venue.categories[0].name, width='32', height='32')
- else
- | N/A
- td= venue.name
- td.d-xs.d-sm= venue.categories && venue.categories.length > 0 ? venue.categories[0].name : 'N/A'
- td.d-xs= venue.location.formatted_address || 'N/A'
- td.d-xs= venue.distance
- td.d-xs= venue.closed_bucket || 'Unknown'
- br
- h3.text-primary Venue Details
- p
- i
- u #{ venueDetail.name }
- if venueDetail.categories && venueDetail.categories.length > 0
+ th.d-xs
+ th Name
+ th.d-xs.d-sm Category
+ th.d-xs Address
+ th.d-xs Distance (meters)
+ tbody
+ each venue in trendingVenues
+ tr
+ td.d-xs
+ if venue.categories && venue.categories.length > 0
+ img(src=venue.categories[0].icon.prefix + '32' + venue.categories[0].icon.suffix, alt=venue.categories[0].name, width='32', height='32')
+ else
+ | N/A
+ td= venue.name
+ td.d-xs.d-sm= venue.categories && venue.categories.length > 0 ? venue.categories[0].name : 'N/A'
+ td.d-xs= venue.location.formatted_address || 'N/A'
+ td.d-xs= venue.distance
+ br
+ h3.text-primary Venue Details
+ p
+ i
+ u #{ venueDetail.name }
+ if venueDetail.categories && venueDetail.categories.length > 0
+ |
+ | is a #{ venueDetail.categories[0].name }
|
- | is a #{ venueDetail.categories[0].name }
- |
- | located at #{ venueDetail.location.address || 'N/A' }, #{ venueDetail.location.locality || 'N/A' }, #{ venueDetail.location.region || 'N/A' }. (longitude: #{ venueDetail.geocodes.main.longitude }, latitude: #{ venueDetail.geocodes.main.latitude })
- if venueDetail.related_places
- if venueDetail.related_places.children && venueDetail.related_places.children.length > 0
- p Related venues or businesses to #{ venueDetail.name }, which are mostly in the same building or the immediate area are:
- p(style='margin-left: 20px; white-space: pre-wrap') #{ venueDetail.related_places.children.map(place => place.name).join(', ') }
- if venuePhotos && venuePhotos.length > 0
- h4.text-secondary Photo Gallery
- | #{ venueDetail.name }
- .row
- each photo in venuePhotos
- .col-md-4
- img.img-thumbnail(src=photo.prefix + '400x400' + photo.suffix, alt=venueDetail.name, width='100%')
- else
- p No photos available.
+ | located at #{ venueDetail.location.address || 'N/A' }, #{ venueDetail.location.locality || 'N/A' }, #{ venueDetail.location.region || 'N/A' }. (longitude: #{ venueDetail.longitude }, latitude: #{ venueDetail.latitude })
+ if venueDetail.related_places
+ if venueDetail.related_places.children && venueDetail.related_places.children.length > 0
+ p Related venues or businesses to #{ venueDetail.name }, which are mostly in the same building or the immediate area are:
+ p(style='margin-left: 20px; white-space: pre-wrap') #{ venueDetail.related_places.children.map(place => place.name).join(', ') }