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>
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
string
Required
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.
example
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Not Found
The requested listing, agency or seller does not exist upstream. Non-billable, and not retryable: a different exit returns the same 404.
{
"meta": {
"billable": false,
"retryable": false
},
"error": {
"code": "NOT_FOUND",
"message": "The requested Willhaben resource was not found.",
"failure_type": "not_found"
},
"success": false
}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.
{
"errors": {
"adId": [
"The adId field is required."
]
},
"message": "The request validation failed"
}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.
{
"meta": {
"billable": false,
"retryable": false
},
"error": {
"code": "UPSTREAM_REJECTED",
"message": "Willhaben could not accept this request. Please check the filters and retry.",
"failure_type": "invalid_request"
},
"success": false
}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.
{
"meta": {
"billable": false,
"retryable": true
},
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The Willhaben API is temporarily unavailable. Please retry.",
"failure_type": "transport_error"
},
"success": false
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.