API Documentation

ScopeMatch provides a public JSON API for accessing our directory of 10,017+ ISO 17025 accredited testing laboratories across Europe. Free for developers, AI agents, and integrators. 1 active API keys in use today.

Get a free API key

1,000 requests/day with higher burst limits. Upgrade to Pro for coordinates and capabilities.

Get Your Free API Key

Interactive API Reference →  ·  OpenAPI Spec (JSON)

Base URL

https://scopematch.eu/api/v1

All endpoints return JSON with Content-Type: application/json. CORS is enabled for all origins.

Authentication

Pass your API key in the X-Api-Key header:

curl -H "X-Api-Key: YOUR_KEY" https://scopematch.eu/api/v1/labs
Deprecated: The ?api_key= query parameter is deprecated and will be removed after 2026-06-01. Requests using the query parameter will receive Deprecation: true and Sunset: 2026-06-01 response headers. Please migrate to the X-Api-Key header.

Anonymous requests are accepted at reduced rate limits. Invalid or inactive keys return 401 Unauthorized.

Tiers & Capabilities

Anonymous
100
requests / day · 10/min burst
  • Lab name, status, country, city
  • Categories
  • Coordinates (lat/lng)
  • Capabilities list
Free
1,000
requests / day · 60/min burst
  • All anonymous fields
  • Coordinates (lat/lng)
  • Capabilities list
Pro
10,000
requests / day · 200/min burst
  • All free fields
  • Coordinates (lat/lng)
  • Full capabilities list
Enterprise
100,000
requests / day · 500/min burst
  • All pro fields
  • Priority support
  • Custom SLA

Contact us to upgrade to Pro or Enterprise.

Endpoints

List Labs

GET /api/v1/labs

Paginated listing of accredited laboratories with optional filters.

ParameterTypeDescription
countrystring2-letter country code (e.g. DE, GB, FR)
categorystringCategory slug (e.g. mechanical-testing)
bodystringAccreditation body code (e.g. DAkkS, UKAS)
qstringSearch by lab name or city
statusstringactive (default), suspended, withdrawn, or all
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 25, max: 100)
Example — anonymous request (no coordinates)
curl https://scopematch.eu/api/v1/labs?country=DE

{
  "data": [{
    "slug": "ptb-braunschweig",
    "name": "PTB Braunschweig",
    "accreditation_number": "D-K-15201-01-00",
    "accreditation_body": "DAkkS",
    "accreditation_status": "active",
    "country": "DE",
    "city": "Braunschweig",
    "postcode": "38116",
    "latitude": null,
    "longitude": null,
    "categories": ["calibration", "mechanical-testing"],
    "_links": {
      "self": "https://scopematch.eu/api/v1/labs/ptb-braunschweig",
      "html": "https://scopematch.eu/labs/ptb-braunschweig/"
    }
  }],
  ...
}
Example — authenticated request (with coordinates)
curl -H "X-Api-Key: YOUR_KEY" \
  https://scopematch.eu/api/v1/labs?country=DE

{
  "data": [{
    ...
    "latitude": 52.29,
    "longitude": 10.46,
    ...
  }],
  ...
}

Lab Detail

GET /api/v1/labs/{slug}

Full detail for a single laboratory. Capabilities list requires Pro tier.

Example — free key (no capabilities)
{
  "slug": "ptb-braunschweig",
  "capabilities": null,
  "_meta": {
    "capabilities_available": false,
    "upgrade_url": "https://scopematch.eu/labs/api-docs/#pricing"
  }
}
Example — pro key (with capabilities)
{
  "slug": "ptb-braunschweig",
  "capabilities": [
    {
      "canonical_id": "iso-6892-1",
      "name": "Tensile testing of metallic materials",
      "category_slug": "mechanical-testing",
      "category_name": "Mechanical Testing"
    }
  ]
}

Categories

GET /api/v1/categories

List of test categories with lab counts.

Data Freshness

GET /api/v1/metadata/freshness

Shows when each accreditation body was last scraped, how many labs it contains, and the overall total. No API key required. Response is cached for 1 hour.

Example response
{
  "bodies": {
    "DAkkS": {
      "country": "DE",
      "last_scraped": "2026-02-21T14:30:00+00:00",
      "labs_count": 6186,
      "age_days": 28
    },
    "UKAS": {
      "country": "GB",
      "last_scraped": "2026-02-18T09:15:00+00:00",
      "labs_count": 4200,
      "age_days": 31
    }
  },
  "total_labs": 13707,
  "generated_at": "2026-03-21T12:00:00+00:00"
}

Rate Limits

Rate limits are enforced per key (authenticated) or per IP (anonymous). Two tiers of limits apply:

  • Burst limit — requests per minute (enforced in memory)
  • Daily limit — requests per UTC day (enforced in database)
TierDailyBurst/min
Anonymous (no key)10010
Free1,00060
Pro10,000200
Enterprise100,000500

Rate limit headers are included in every response:

HeaderDescription
X-RateLimit-LimitBurst limit per minute
X-RateLimit-RemainingBurst requests remaining this minute
X-RateLimit-ResetUnix timestamp when burst window resets
X-RateLimit-Daily-LimitDaily request quota
X-RateLimit-Daily-RemainingDaily requests remaining
X-Api-TierYour resolved tier (anonymous, free, pro, enterprise)

When the limit is exceeded, the API returns 429 Too Many Requests with a Retry-After header.

Attribution

All API responses include X-Attribution-Required: true.

Any public product or service using ScopeMatch data must display visible attribution linking to scopematch.eu. Examples:

Data from ScopeMatch (scopematch.eu)

<a href="https://scopematch.eu">Lab data: ScopeMatch</a>

Attribution is not required for internal or private use. See full terms.

Other Machine-Readable Resources

  • /llms.txt — Markdown site summary for LLMs
  • /sitemap.xml — Full sitemap with 10,017+ URLs
  • /robots.txt — Crawler directives (all AI crawlers welcome)
  • JSON-LD — Every page includes structured data

CORS & Caching

All API responses include Access-Control-Allow-Origin: *. Responses are cached for 5 minutes (Cache-Control: public, max-age=300).

GDPR

The API does not expose personal email addresses. Only business contact emails (e.g. info@) are included. Personal names are never returned.

Ready to start building?

Free API key — no credit card required. Terms of use.

Get Your Free API Key
0 labs selected
Compare