# Willhaben Seller Trust Signals API Documentation

<p>Scrappa's `GET /api/willhaben/agency/trust-signals` endpoint is the Willhaben Trust Signals API documentation page for developers who need seller rating summaries as structured JSON.

    ## What this endpoint returns

    The response carries the average rating, how many ratings exist, a human-readable rating summary, and the seller's reply time. Most sellers have no rating yet: in that case `averageRating` is null and `numberOfRatings` is 0. Treat an absent rating as unrated rather than as a zero score.

    ## How to use it

    Read this beside [Agency Profile](/docs/willhaben-api/willhaben_agency) when you display advertiser information, and use [Agency Listings](/docs/willhaben-api/willhaben_agency_listings) to see what the seller is currently offering.</p>

- **Documentation:** [https://scrappa.co/docs/willhaben-api/willhaben_agency_trust_signals](https://scrappa.co/docs/willhaben-api/willhaben_agency_trust_signals)
- **API group:** Willhaben API
- **Endpoint:** `GET https://scrappa.co/api/willhaben/agency/trust-signals`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `userId` | string | Yes | Seller user id, as published on the listing's organisationDetails. The example value is illustrative; a real seller id returns that seller's own summary. |

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 404 | Not Found | The requested listing, agency or seller does not exist upstream. Non-billable, and not retryable: a different exit returns the same 404. |
| 422 | Validation Error | A query parameter failed validation — a missing required id, an unknown vertical, or a value outside the documented range. Messages are per field in Laravel's standard wording, so the accepted vertical ids are published on the `vertical` parameter of each page rather than repeated in the message. Non-billable. |
| 503 | Upstream Rejected The Request | Willhaben answered with a JSON application error — an invalid filter, or a sort id that the vertical does not offer. Non-billable, and not retryable: the same request fails the same way on every exit. Published as 503 because SanitizeApiErrorResponse rewrites every upstream 502 before the response leaves the app; branch on `meta.retryable` rather than on the status code. |
| 503 | Temporarily Unavailable | Willhaben could not be reached at all: no exit was available, the transport failed, the edge refused every exit, or every exit was rate limited. All of these rotate and retry, so this row is always retryable. The `failure_type` says which one happened — `upstream_unreachable`, `transport_error`, `edge_blocked`, `rate_limited` or `attempts_exhausted` — so a caller can tell a dead provider from a throttled one. Non-billable; a later request with a fresh pool fetch is worth making. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
