---
title: "Reviews"
icon: "star"
visibility: "public"
---

Klantbeoordelingen per vestiging, gebundeld uit meerdere externe bronnen.

De volledige responsestructuur staat in de [API-referentie](/api/vakgarage), onder Reviews.

Deze endpoints staan onder `/api/{franchiseId}/reviews/...`; zie [Client types](/apiportaal/api/client-types) voor hoe je een vestiging aanspreekt.

---

## Endpoints

| Methode | Pad | Bron |
|---|---|---|
| `GET` | `/reviews/all` | alle bronnen in één antwoord |
| `GET` | `/reviews/klantenvertellen` | alleen Klantenvertellen |
| `GET` | `/reviews/google` | alleen Google |

---

## Alle bronnen

### Verzoek

```
GET /api/{franchiseId}/reviews/all
```

### Antwoord

Eén object met per bron een sleutel. **Een bron die niet gekoppeld is, levert een tekst op in plaats van een object** — het verzoek als geheel slaagt gewoon.

```json
{
  "google": "Google Place ID not configured for this franchise",
  "klantenvertellen": {
    "id": 1048648,
    "totalScore": 9.4,
    "totalReviews": 283,
    "twelveMonthScore": 9.3,
    "twelveMonthReviews": 41,
    "countFiveStarRatings": 233,
    "countFourStarRatings": 45,
    "countThreeStarRatings": 3,
    "countTwoStarRatings": 0,
    "countOneStarRatings": 2,
    "reviews": []
  }
}
```

Controleer daarom per bron of je een object of een tekst terugkrijgt voordat je velden uitleest.

---

## Klantenvertellen

Vereist een Klantenvertellen-koppeling op de vestiging. Ontbreekt die, dan krijg je in plaats van het object een tekst terug.

### Cijfers

| Veld | Beschrijving |
|---|---|
| `totalScore` | gemiddeld cijfer over alle reviews, schaal 1–10 |
| `totalReviews` | totaal aantal reviews |
| `twelveMonthScore` · `twelveMonthReviews` | hetzelfde, maar over de laatste twaalf maanden |
| `countFiveStarRatings` … `countOneStarRatings` | verdeling over één tot vijf sterren |

Voor een actueel beeld op een website is `twelveMonthScore` meestal bruikbaarder dan `totalScore`: dat laatste bevat ook beoordelingen van jaren geleden.

### De reviews zelf

Onder `reviews` staan de losse beoordelingen:

```json
{
  "reviewId": "916273fc-906b-4f7c-bd79-4ef497b71c82",
  "reviewAuthor": "JVM Zaat",
  "city": "Bunnik",
  "rating": 10,
  "reviewContent": [
    {
      "questionGroup": "DEFAULT_OVERALL",
      "questionType": "INT",
      "rating": "10",
      "order": 0,
      "questionTranslation": "Totaal score"
    }
  ]
}
```

`reviewContent` is een lijst van deelvragen; elke garage kan een andere vragenset hebben. Gebruik `questionGroup` om te herkennen waar een regel over gaat:

| `questionGroup` | Wat het is |
|---|---|
| `DEFAULT_OVERALL` | het totaalcijfer |
| `DEFAULT_ONELINER` | de korte samenvatting van de klant |

Let op dat `rating` binnen `reviewContent` een **string** is, terwijl `rating` op het review zelf een getal is.

---

## Google

Vereist een Google Place ID op de vestiging.

Dat veld is nog niet uitgerold, dus dit endpoint levert voorlopig overal dezelfde tekst op:

```json
"Google Place ID not configured for this franchise"
```

Bouw hier dus geen functionaliteit op zonder eerst met Problicity af te stemmen of en wanneer die koppeling er komt.
