Endpoint
Autocomplete
Type-ahead op adres, straat of plaats. Gemaakt om rechtstreeks vanuit een checkout of zoekveld aangeroepen te worden.
Het verzoek
/v1/autocomplete
Type-ahead op adres, straat of plaats. Bedoeld voor een checkout of zoekveld.
| Parameter | Type | Verplicht | Omschrijving |
|---|---|---|---|
q
|
string | ja | Zoekterm, minimaal twee tekens. |
type
|
string | nee |
address, street of city. Standaard address.
|
limit
|
integer | nee | Aantal suggesties, 1 tot 25. Standaard 10. |
De response
Een geslaagde aanroep geeft 200 met
Content-Type: application/json en
Cache-Control: public, max-age=86400.
{
"data": [
{
"label": "Hamerstraat 19, 1021 JT Amsterdam",
"type": "address",
"postcode": "1021JT",
"number": 19,
"street": "Hamerstraat",
"city": "Amsterdam"
}
]
}
Voorbeelden
curl -sS \
-H "X-Api-Key: lat_test_demo_publiek_locatieapi_sandbox" \
-H "Accept: application/json" \
"https://api.locatieapi.nl/v1/autocomplete?q=hamerstr&type=address&limit=8"
Rechtstreeks vanuit de browser
Autocomplete is het endpoint waarbij een tussenlaag het meest in de weg zit: elke toetsaanslag zou dan
twee keer over het netwerk moeten. Daarom kun je bij ons een sleutel met alleen leesrechten maken en daar
de toegestane origins op zetten. De API stuurt dan de bijbehorende
Access-Control-Allow-Origin mee en de aanroep werkt
rechtstreeks vanuit je pagina.
Wel met een aparte sleutel
Zet nooit je gewone livesleutel in de browser. Maak een tweede sleutel, geef die alleen leesrechten, zet de toegestane origins erop en gebruik alleen die in frontend-code. Een sleutel zonder ingestelde origin werkt bewust alleen server-side./**
* Autocomplete rechtstreeks vanuit de browser. Dat mag met LocatieAPI,
* mits je de origin op de sleutel zet en een sleutel met alleen
* leesrechten gebruikt.
*/
const KEY = 'lat_test_demo_publiek_locatieapi_sandbox';
async function suggest(term) {
if (term.length < 2) return [];
const url = new URL('https://api.locatieapi.nl/v1/autocomplete');
url.searchParams.set('q', term);
url.searchParams.set('type', 'address');
url.searchParams.set('limit', '8');
const response = await fetch(url, { headers: { 'X-Api-Key': KEY } });
if (!response.ok) return [];
const { data } = await response.json();
return data.map((row) => row.label);
}
const input = document.querySelector('#adres');
let timer;
input.addEventListener('input', () => {
clearTimeout(timer);
timer = setTimeout(async () => {
const options = await suggest(input.value);
document.querySelector('#suggesties').replaceChildren(
...options.map((label) => Object.assign(document.createElement('option'), { value: label })),
);
}, 150);
});
Tips
- •Wacht 150 milliseconden na de laatste toetsaanslag voordat je aanroept. Dat scheelt gemiddeld twee derde van je calls.
- •Begin pas vanaf twee tekens. Bij minder is de lijst toch niet bruikbaar en kost het alleen bundel.
- •Breek een lopend verzoek af met een
AbortControllerzodra de gebruiker verder typt. - •Gebruik
type=cityvoor een plaatsveld entype=streetvoor een straatveld; dat geeft veel kortere en relevantere lijsten. - •Laat het adresveld altijd bewerkbaar. Een suggestielijst mag nooit de enige manier zijn om een adres in te vullen.