The SDK exposes two complementary endpoints for finding places:
Search — returns full SearchResponse results directly for a text query.
Autocomplete — returns lightweight completion suggestions; you resolve them separately to get full place details.
Text search
Call api.search() with a SearchInput to find addresses and points of interest. You get back a SearchResponse containing a list of SearchResponsePlace results.
try ( AppleMaps api = new AppleMaps (token)) {
SearchResponse response = api . search (
SearchInput . builder ( "coffee" ). build ()
);
response . results (). forEach (place -> System . out . println ( place . name ()));
}
SearchInput.builder(q) accepts the following optional configuration:
Method Type Description .language(String)BCP 47 tag Response language, e.g. "en-US". .userLocation(UserLocation)UserLocationHint the user’s position for better relevance. .searchLocation(SearchLocation)SearchLocationBias results toward a coordinate. .searchRegion(SearchRegion)SearchRegionConstrain results to a bounding region. .searchRegionPriority(SearchRegionPriority)SearchRegionPriorityControls how strongly the region hint is weighted. .limitToCountries(List<String>)ISO 3166-1 alpha-2 codes Restrict to one or more countries. .resultTypeFilter(List<SearchResultType>)SearchResultTypeFilter by result type (address or POI). .includePoiCategories(List<PoiCategory>)PoiCategoryInclude only specific POI categories. .excludePoiCategories(List<PoiCategory>)PoiCategoryExclude specific POI categories. .includeAddressCategories(List<AddressCategory>)AddressCategoryInclude specific address categories. .excludeAddressCategories(List<AddressCategory>)AddressCategoryExclude specific address categories. .enablePagination(Boolean)BooleanEnable paginated results. .pageToken(String)StringPage token from a previous paginated response.
Example — name + city query with a location hint:
SearchResponse response = api . search (
SearchInput . builder ( "Stripe San Francisco" )
. userLocation ( UserLocation . fromLatitudeLongitude ( 37.7796095 , - 122.4016725 ))
. build ()
);
Autocomplete
Autocomplete returns fast, lightweight completions suited for typeahead UIs. Each AutocompleteResult includes displayLines for rendering and a completionUrl for resolving to full place details.
SearchAutocompleteResponse response = api . autocomplete (
SearchAutocompleteInput . builder ( "Apple Park" ). build ()
);
SearchAutocompleteInput.builder(q) supports:
Method Type Description .language(String)BCP 47 tag Response language. .userLocation(UserLocation)UserLocationHint the user’s position. .searchLocation(SearchLocation)SearchLocationBias results toward a coordinate. .searchRegion(SearchRegion)SearchRegionConstrain results to a bounding region. .searchRegionPriority(SearchRegionPriority)SearchRegionPriorityControls region hint weighting. .limitToCountries(List<String>)ISO 3166-1 alpha-2 codes Restrict to one or more countries. .resultTypeFilter(List<SearchACResultType>)SearchACResultTypeFilter completion result types. .includePoiCategories(List<PoiCategory>)PoiCategoryInclude specific POI categories. .excludePoiCategories(List<PoiCategory>)PoiCategoryExclude specific POI categories. .includeAddressCategories(List<AddressCategory>)AddressCategoryInclude specific address categories. .excludeAddressCategories(List<AddressCategory>)AddressCategoryExclude specific address categories.
Resolving completions
An AutocompleteResult carries a completionUrl that points to a full Search response. You can resolve a single URL or the entire list at once.
Resolve a single completion URL:
SearchResponse details = api . resolveCompletionUrl ( result . completionUrl ());
Resolve all completions from a response (parallel):
SearchAutocompleteResponse autocomplete = api . autocomplete (
SearchAutocompleteInput . builder ( "Stripe" ). build ()
);
List < SearchResponse > resolved = api . resolveCompletionUrls (autocomplete);
resolveCompletionUrls dispatches one HTTP request per completion result in parallel and returns results in the same order as the input list.
resolveCompletionUrls makes one Search API call per completion result . If the autocomplete response returns 10 completions, this counts as 10 additional service calls against your daily quota. Use it when you need full place details for every suggestion; otherwise use resolveCompletionUrl for a single selection.
Choosing the right API
Name only Use Autocomplete for typeahead, then resolveCompletionUrls when the user selects a result. api . autocomplete (
SearchAutocompleteInput . builder ( "Stripe" ). build ()
)
Name + city Use Search when the user provides extra context. api . search (
SearchInput . builder ( "Stripe San Francisco" ). build ()
)
Full address Use Geocode when you already have a complete street address. api . geocode (
GeocodeInput . builder ( "880 Harrison St, SF, CA" ). build ()
)
Adding location hints for better relevance
For name-only queries, passing a UserLocation significantly improves result ordering. Construct one from latitude/longitude coordinates:
SearchResponse response = api . search (
SearchInput . builder ( "Stripe" )
. userLocation ( UserLocation . fromLatitudeLongitude ( 37.7796095 , - 122.4016725 ))
. build ()
);
The same .userLocation() method is available on both SearchInput.Builder and SearchAutocompleteInput.Builder.
Response structure
SearchResponse contains:
Field Type Description results()List<SearchResponsePlace>Matched places. displayMapRegion()Optional<SearchMapRegion>Suggested map region to display. paginationInfo()Optional<PaginationInfo>Pagination details when enabled.
SearchAutocompleteResponse contains:
Field Type Description results()List<AutocompleteResult>Completion suggestions.
Each AutocompleteResult carries:
Field Type Description completionUrl()StringURL to resolve for full place details. displayLines()List<String>Lines to display in a suggestion list. location()Optional<Location>Approximate coordinate, if available. structuredAddress()Optional<StructuredAddress>Parsed address, if available.