Read API
Public endpoints
The same search and compare APIs that power the acousticindex.com website, exposed without authentication. Built for AI agents, MCP servers, and Custom GPTs that cannot carry an API key.
When to use them
The lowest-friction entry point to Acoustic Index
Public endpoints skip the beta approval and API key flow entirely. If you are building an agent that needs to answer acoustic questions on behalf of a user, or prototyping a tool that calls our data, start here.
No API key
Send a plain `GET` request. The server never checks `Authorization` on these paths, so you do not need an account, a token, or a beta approval to call them.
Same data as the website
`/public/search` returns the exact result set the /suche page renders, including facet counts and query metadata. `/public/compare-products` returns the records used by the in-page comparison sheet.
Per-IP rate limits
120 requests per minute per IP, no daily cap. You get `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` on every response. On 429 you also get `Retry-After`.
When NOT to use them
Choose the authenticated Read API if you need more
The public endpoints are intentionally a superset of what the website shows. If you need fields the website does not render, or per-account rate limits, use the authenticated `/v1/materials/*` endpoints instead.
Use authenticated for
High-volume sync jobs, simulation pipelines, any workflow where you need the full ISO 354 variant payload, or any case where you want a stable account-level rate limit budget (1,000/day).
Use public for
Agent-driven lookups, conversational AI tools, MCP servers, lightweight integrations, demos, and anything where shipping an API key into the client is not an option.
GET /api/public/search
Search published products
The search endpoint that powers /suche. Same filters, same sort order, same pagination. Returns the same `SearchProductsResult` shape the website consumes internally.
Query parameters mirror the site URL state. You can combine `q` with any of the filters below. All parameters are optional; sending no parameters returns the most recently updated products.
Free-text filters
`q` searches product name, manufacturer, and description. `kaufbar=true` limits to commercial products (excludes PTB reference data). `epd=true` limits to products with an EPD.
Facet filters
`categories`, `characters`, `manufacturers`, and `type` accept comma-separated lists. `min` and `max` bracket the weighted absorption coefficient (`alpha_w`).
Sort + paging
`sort` accepts `relevance`, `alphaW_desc`, `alphaW_asc`, `date_desc`, and `name_asc`. `page` is zero-based. Page size is fixed.
Result metadata
Use `total` and `hasMore` to paginate. `facets` gives you counts for every filter. `queryMeta.matchedStrategy` tells you whether the top hit was exact, phrase, FTS, or fuzzy.
Request example
# Plain HTTP GET, no Authorization header curl "https://acousticindex.com/api/public/search?q=holz&min=0.8" \ -H "Accept: application/json"
Response shape (abridged)
{
"products": [
{
"id": "PRODUCT_ID",
"slug": "amp-p",
"label": "FURAL Akustikdecke AMP-P",
"manufacturerName": "FURAL Systeme in Metall GmbH",
"alphaW": 0.85,
"alphaWMin": 0.75,
"material_category": "metal",
"installation_types": ["ceiling"],
"has_epd": true,
"data_source": "manufacturer"
}
],
"total": 142,
"hasMore": true,
"page": 0,
"facets": { "materialCategories": [...], "manufacturers": [...] },
"queryMeta": { "normalizedQuery": "holz", "matchedStrategy": "fuzzy", "zeroResults": false }
}GET /api/public/compare-products
Compare up to four products side by side
Accepts up to four product UUIDs and returns a compact comparable record for each. The shape is identical to what the in-page compare sheet uses, including ISO 354 absorption measurements.
Input
Pass `id` one or more times (or once with a comma-separated list). Anything beyond the first four IDs is dropped. At least one ID is required, otherwise you get `400 missing_ids`.
Output
Each product record includes label, manufacturer, `alphaW` / `alphaWMin`, installation types, structured meta, EPD status, and the full `absorption_iso354` variant list.
# Compare up to four products side by side curl "https://acousticindex.com/api/public/compare-products?id=UUID_1&id=UUID_2&id=UUID_3"
Discovery
How agents find these endpoints
We publish an OpenAPI 3.1 description at /api/v1/openapi.json (and at /.well-known/openapi.json). Every API response also carries a Link: </api/v1/openapi.json>; rel=service-desc header, so a tool that hits any endpoint once can discover the full schema.
OpenAPI spec
`GET /api/v1/openapi.json` returns the canonical OpenAPI 3.1 description. Public and authenticated endpoints are tagged separately so you can filter by access level.
.well-known alias
`GET /.well-known/openapi.json` returns byte-identical content. This is the path that a growing number of MCP clients probe by convention.
Interactive reference
`/api/reference` renders the spec with Scalar: copy-paste request builders, schema browser, and try-it-now for every endpoint.