# Autocomplete på tværs

`GET /v1/autocomplete` · DAWA-kompatibel

Samlet type-ahead over adgangsadresser, vejnavne eller postnumre, med en ensartet liste af tekst og værdi.

Erstatter DAWA’s `/autocomplete`. `type` vælger, hvad der søges i; hvert hit er `{ type, tekst, vaerdi }`, hvor `vaerdi` er nøglen: adgangsadressens UUID, vejnavnet eller postnummeret. Svaret er pakket ind i `{ type, antal, resultater }` i stedet for et bart array, og der returneres højst 20 hits.

`type=adresse` går trinvis fra vej over husnummer til enhed, som DAWA’s autocomplete gjorde: så længe teksten passer på flere adgangsadresser, er hittene `type: "adgangsadresse"`; når den peger på én, kommer dens enheder med etage og dør som `type: "adresse"`. Svarets egen `type` følger trinnet, så en klient, der kun kender adgangsadresser, ser intet nyt, før den når en enhed. Har brugeren valgt en adgangsadresse, så send dens UUID som `adgangsadresseid`, og du får dens enheder direkte. Et enhedshit har `vaerdi` = enhedens UUID plus `adgangsadresse_id`, `etage` og `doer`.

Svarformen er ikke den samme som DAWA’s (`forslagstekst`, `caretpos`, `data` findes ikke), så en klient, der læser `tekst` og `vaerdi`, virker — en widget, der er bygget til DAWA’s svar, gør ikke. Et adgangsadresse-hit bliver til et BFE via [`/v1/jordstykker/reverse`](https://grundfast.dk/docs/api/jordstykker-reverse), eller brug [`/v1/adresse/search`](https://grundfast.dk/docs/api/adresse-search), som har `bfe_nummer` med i hvert hit.

**Godkendelse:** `Authorization: Bearer gf_live_…` (eller `gf_test_…`)

**Afregning:** Ét kald pr. forespørgsel — også pr. tastetryk, hvis du kalder ved hvert tryk.

## Parametre

| Navn | Placering | Type | Påkrævet | Beskrivelse |
| --- | --- | --- | --- | --- |
| `q` | query | string | ja | Søgetekst, mindst 2 tegn efter trim. Kun de første 64 tegn bruges. |
| `type` | query | string | nej | Hvad der søges i. `adresse` er det trinvise forløb vej → husnummer → enhed (etage og dør). |
| `adgangsadresseid` | query | string (UUID) | nej | Kun ved `type=adresse`: en valgt adgangsadresse. Svaret er så dens enheder, indsnævret af `q`, når teksten indsnævrer dem. |
| `kommunekode` | query | string | nej | Afgrænser vejnavne til én kommune, fx `0101` (1–4 cifre; `101` læses som `0101`). Bruges kun ved `type=vejnavn`, men valideres altid. |

## Eksempel

```bash
curl -G "https://api.grundfast.dk/v1/autocomplete" \
  --data-urlencode "q=rådhuspladsen 1, 1550" \
  -H "Authorization: Bearer $GRUNDFAST_API_KEY"
```

## Svar (200)

```json
{
  "type": "adgangsadresse",
  "antal": 20,
  "resultater": [
    {
      "type": "adgangsadresse",
      "tekst": "Rådhuspladsen 1, 1550 København V",
      "vaerdi": "0a3f507a-ec01-32b8-e044-0003ba298018"
    },
    {
      "type": "adgangsadresse",
      "tekst": "Rådhuspladsen 2, 1550 København V",
      "vaerdi": "39ece5fb-ee06-0ee2-e044-0003ba298018"
    },
    {
      "type": "adgangsadresse",
      "tekst": "Rådhuspladsen 3, 1550 København V",
      "vaerdi": "0a3f507a-ec03-32b8-e044-0003ba298018"
    }
  ]
}
```

## Vigtige felter

| Felt | Type | Betydning |
| --- | --- | --- |
| `resultater[].tekst` | string | Teksten, du viser i listen — for et postnummer fx "8000 Aarhus C". |
| `resultater[].vaerdi` | string | Nøglen for det valgte hit: enhedens UUID, adgangsadressens UUID, vejnavnet eller det firecifrede postnummer. |
| `resultater[].type` | string | Hvad hittet er: `adresse` (enhed), `adgangsadresse`, `vejnavn` eller `postnummer`. Ved `type=adresse` skifter det undervejs. |
| `resultater[].etage` | string \| null | Kun på enhedshit: etagen, fx `"st"`, `"2"` eller `"kl"`. Sammen med `doer` og `adgangsadresse_id`. |
| `antal` | integer | Antal hits, højst 20. |

## Fejl

| Status | Betydning |
| --- | --- |
| 400 | `q` mangler eller er kortere end 2 tegn, `type` er ukendt, `kommunekode` er ikke 1–4 cifre, eller `adgangsadresseid` er ikke et UUID. |
| 401 | Nøglen mangler eller er ugyldig. |
| 429 | Burst-grænsen eller månedskvoten er nået. Se `Retry-After`. |
| 503 | Kun ved adgangsadresser og adresser: adresseindekset er ikke slået til eller endnu ikke indlæst. Mangler kun enhedsindekset, svarer `type=adresse` med adgangsadresser i stedet for at fejle. |
