GET /api/maps/search/quickQuick place search
Up to 20 ranked places with available details. Supports query-only search, text location, coordinates, country, language, zoom and start offsets.
Search ranked local places, fetch one richest-available business record, or page through public reviews. Every response uses one normalized JSON contract and reports partial detail honestly.
Search by query and location, identify one place, or retrieve reviews without mixing contracts.
GET /api/maps/search/quickUp to 20 ranked places with available details. Supports query-only search, text location, coordinates, country, language, zoom and start offsets.
GET /api/maps/searchAttempts positions 1–100, preserves discovered rank order, and returns unfinished records as explicit core_only entries rather than dropping them.
GET /api/maps/placeOne richest-available record selected by exactly one place_id, data_id, or Google Maps URL.
GET /api/maps/reviewsUp to 20 reviews per call with reviewer fields, owner responses and an opaque token for the next page. Sort by relevant, newest, highest or lowest.
This cURL shape was tested against the local API on 2026-07-02. Set the base URL explicitly so the same command works during local validation.
BASE_URL="${SERPENT_BASE_URL:-http://localhost:3001}"
curl --get "$BASE_URL/api/maps/search/quick" \
-H "X-API-Key: YOUR_API_KEY" \
--data-urlencode "q=coffee" \
--data-urlencode "location=New York, NY" \
--data-urlencode "country=us"The eventual public route is the same path on https://apiserpent.com. Verify production availability in the playground before changing the base URL.
{
"success": true,
"type": "maps",
"endpoint": "quick",
"places": [{
"rank": 1,
"name": "Example Coffee",
"website": "https://example.com",
"rating": 4.6,
"detail_status": "complete"
}],
"counts": {
"requested": 20,
"returned": 20,
"fully_enriched": 19,
"core_only": 1
},
"meta": { "partial": true }
}Search preserves the ranked core record when full detail does not finish within the request window.
core_only. This is a development measurement, not a production latency promise. Treat nullable detail fields on core_only records as unknown—not absent.Richest-available means some fields are nullable. Consumers can depend on field names while checking each record’s detail status.
rank · place_id · data_id · maps_url · name · description · categories · business_statusaddress.* · coordinates.latitude · coordinates.longitude · phone · website · timezone · plus_coderating · review_count · review_distribution · price_range · opening_hourspopular_times · amenities · service_options · links.booking · links.menu · links.order_onlinecover_image · image_count · images[] · ownership.claimed · ownership.owner_namereview_id · rating · text.* · published_at · images[] · detailed_ratings · owner_response · reviewer.*Maps does not use the 10×/20× discount schedule applied to the core SERP categories.
| Endpoint | Default | Growth (2× off) | Scale (4× off) |
|---|---|---|---|
| Quickup to 20 places | $0.015/call$15/1K calls | $0.0075/call$7.50/1K | $0.00375/call$3.75/1K |
| Deepup to 100 places | $0.075/call$75/1K calls | $0.0375/call$37.50/1K | $0.01875/call$18.75/1K |
| Placeone place | $0.0015/call$1.50/1K calls | $0.00075/call$0.75/1K | $0.000375/call$0.375/1K |
| Reviewsup to 20 reviews | $0.003/call$3/1K calls | $0.0015/call$1.50/1K | $0.00075/call$0.75/1K |
New accounts receive 10 separate lifetime Quick calls. Deep, Place and Reviews are paid from call one. Valid empty results and successful partial results are billable calls.
core_only fields must not be interpreted as confirmed absence. Review order can change over time; follow the returned opaque page token instead of manufacturing offsets.meta.partial to true.