{"openapi":"3.1.0","info":{"title":"LMAA Public API","version":"1.1.0","description":"Public REST API for [lmaa.space](https://lmaa.space), a curated directory of independent online shops in Europe. The backend serves this document itself, so it ships with every deployment. Only externally useful public endpoints are listed, and dashboard endpoints, website-internal runtime endpoints, and side-effect endpoints are deliberately excluded.\n\nAll documented API responses return JSON wrapped in a `{ \"data\": ... }` envelope. Errors use `{ \"error\": { \"message\": \"...\" } }`. Rate-limited endpoints allow 100 read requests per minute per IP and include `X-RateLimit-*` response headers.","contact":{"name":"LMAA","url":"https://lmaa.space"}},"servers":[{"url":"https://api.lmaa.space","description":"Production"}],"tags":[{"name":"Shops","description":"Public shop catalogue endpoints."},{"name":"Categories","description":"Public shop category endpoints."},{"name":"Search","description":"Catalogue search endpoints."},{"name":"Filters","description":"Location and shipping filter endpoints."},{"name":"Submission Checks","description":"Read-only checks for submission forms."},{"name":"Content","description":"Externally shareable public content endpoints."}],"paths":{"/api/v1/shops":{"get":{"tags":["Shops"],"summary":"List public shops","description":"Returns all active, publicly listed shops with their categories, shipping regions, public description, social profiles, and like count. Cached for 60 seconds.","operationId":"listPublicShops","responses":{"200":{"description":"Public shop list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopListEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/shops' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/shops')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/shops\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/shops', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/shops\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/shops\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/shops\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/shops\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/shops\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/shops\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/shops' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/shops')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/shops\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/shops', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/shops\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/shops\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/shops\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/shops\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/shops\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/shops\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/shops/{token}":{"get":{"tags":["Shops"],"summary":"Get one public shop","description":"Returns a single public shop by its URL token, enriched with headquarters data and a short-lived like challenge token.","operationId":"getPublicShop","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"},"description":"Public token from the lmaa.space URL. This is not the raw numeric shop ID."}],"responses":{"200":{"description":"Public shop detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetailEnvelope"}}}},"400":{"description":"Invalid shop token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Shop not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/shops/layered-work' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/shops/layered-work')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/shops/layered-work\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/shops/layered-work', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/shops/layered-work\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/shops/layered-work\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/shops/layered-work\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/shops/layered-work\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/shops/layered-work\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/shops/layered-work\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/shops/layered-work' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/shops/layered-work')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/shops/layered-work\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/shops/layered-work', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/shops/layered-work\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/shops/layered-work\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/shops/layered-work\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/shops/layered-work\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/shops/layered-work\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/shops/layered-work\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/categories":{"get":{"tags":["Categories"],"summary":"List public categories","description":"Returns all shop categories with image metadata and the number of public shops assigned to each category. Cached privately for 30 seconds.","operationId":"listPublicCategories","responses":{"200":{"description":"Category list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryListEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/categories' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/categories')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/categories\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/categories', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/categories\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/categories\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/categories\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/categories\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/categories\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/categories\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/categories' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/categories')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/categories\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/categories', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/categories\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/categories\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/categories\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/categories\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/categories\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/categories\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/categories/{slug}":{"get":{"tags":["Categories"],"summary":"Get category shops","description":"Returns one category and the public shops assigned to it. Use slugs from the category list endpoint.","operationId":"getPublicCategory","parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"},"description":"URL-safe category slug."}],"responses":{"200":{"description":"Category detail with shops.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDetailEnvelope"}}}},"404":{"description":"Category not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/categories/fair-fashion' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/categories/fair-fashion')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/categories/fair-fashion\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/categories/fair-fashion', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/categories/fair-fashion\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/categories/fair-fashion\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/categories/fair-fashion\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/categories/fair-fashion\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/categories/fair-fashion\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/categories/fair-fashion\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/categories/fair-fashion' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/categories/fair-fashion')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/categories/fair-fashion\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/categories/fair-fashion', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/categories/fair-fashion\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/categories/fair-fashion\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/categories/fair-fashion\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/categories/fair-fashion\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/categories/fair-fashion\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/categories/fair-fashion\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/search":{"get":{"tags":["Search"],"summary":"Search shops and categories","description":"Searches public shops and categories. Shop matches are ranked by name, URL, postal-code prefix, imported shop-check notes, and description. Category matches are limited to five items.","operationId":"searchPublicCatalog","parameters":[{"in":"query","name":"q","required":false,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Search term. Missing values or values shorter than two characters return an empty result set."}],"responses":{"200":{"description":"Search result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResultEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/search?q=kaffee' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/search?q=kaffee')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/search?q=kaffee\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/search?q=kaffee', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/search?q=kaffee\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/search?q=kaffee\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/search?q=kaffee\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/search?q=kaffee\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/search?q=kaffee\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/search?q=kaffee\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/search?q=kaffee' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/search?q=kaffee')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/search?q=kaffee\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/search?q=kaffee', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/search?q=kaffee\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/search?q=kaffee\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/search?q=kaffee\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/search?q=kaffee\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/search?q=kaffee\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/search?q=kaffee\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/check-url":{"get":{"tags":["Submission Checks"],"summary":"Check shop URL availability","description":"Checks whether a shop domain is unknown, blocked by a managed domain alert, already listed, previously rejected, queued for review, or invalid. Domain extraction uses the Public Suffix List via `tldts`.","operationId":"checkShopUrl","parameters":[{"in":"query","name":"url","required":true,"schema":{"type":"string"},"description":"Shop URL or hostname to check. Missing schemes are accepted by backend normalization."}],"responses":{"200":{"description":"URL availability result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckUrlEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/check-url?url=https%3A%2F%2Fexample-shop.de\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/rejected/{token}":{"get":{"tags":["Content"],"summary":"Get public rejection notice","description":"Returns the public rejection notice for a rejected shop or submission. Tokens are 32-character lowercase hex strings.","operationId":"getPublicRejectionNotice","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{32}$"},"description":"Rejection notice token."}],"responses":{"200":{"description":"Rejection notice.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectionPageEnvelope"}}}},"400":{"description":"Invalid token format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Rejection notice not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/rejected/0123456789abcdef0123456789abcdef\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/filtered/shops":{"get":{"tags":["Filters"],"summary":"List filtered public shops","description":"Returns public shops filtered by city and radius, headquarters country, and shipping region. Results include latitude and longitude when headquarters coordinates are known.","operationId":"listFilteredPublicShops","parameters":[{"in":"query","name":"city","required":false,"schema":{"type":"string","maxLength":200},"description":"City name used for distance filtering. When set, `radius` limits shops around the geocoded city."},{"in":"query","name":"radius","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"description":"Distance radius in kilometres for `city` filtering."},{"in":"query","name":"country","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated ISO 3166-1 alpha-2 country codes, for example `DE,AT`."},{"in":"query","name":"region","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated shipping region codes, for example `DE,EU`."}],"responses":{"200":{"description":"Filtered shop list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilteredShopListEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/shops?city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/filtered/categories":{"get":{"tags":["Filters"],"summary":"List filtered categories","description":"Returns categories with filtered shop counts plus the total number of shops matching the active filters.","operationId":"listFilteredPublicCategories","parameters":[{"in":"query","name":"city","required":false,"schema":{"type":"string","maxLength":200},"description":"City name used for distance filtering. When set, `radius` limits shops around the geocoded city."},{"in":"query","name":"radius","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"description":"Distance radius in kilometres for `city` filtering."},{"in":"query","name":"country","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated ISO 3166-1 alpha-2 country codes, for example `DE,AT`."},{"in":"query","name":"region","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated shipping region codes, for example `DE,EU`."}],"responses":{"200":{"description":"Filtered categories.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilteredCategoriesEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/categories?city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/filtered/categories/{slug}":{"get":{"tags":["Filters"],"summary":"Get filtered category shops","description":"Returns one category and only those shops in the category that match the active filters.","operationId":"getFilteredPublicCategory","parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"},"description":"URL-safe category slug."},{"in":"query","name":"city","required":false,"schema":{"type":"string","maxLength":200},"description":"City name used for distance filtering. When set, `radius` limits shops around the geocoded city."},{"in":"query","name":"radius","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"description":"Distance radius in kilometres for `city` filtering."},{"in":"query","name":"country","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated ISO 3166-1 alpha-2 country codes, for example `DE,AT`."},{"in":"query","name":"region","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated shipping region codes, for example `DE,EU`."}],"responses":{"200":{"description":"Filtered category detail with shops.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilteredCategoryDetailEnvelope"}}}},"404":{"description":"Category not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/categories/fair-fashion?city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/filtered/search":{"get":{"tags":["Filters"],"summary":"Search within filtered shops","description":"Searches public shops within the active filters, including imported shop-check notes, and returns matching categories for the query.","operationId":"searchFilteredPublicCatalog","parameters":[{"in":"query","name":"q","required":false,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Search term. Missing values or values shorter than two characters return an empty result set."},{"in":"query","name":"city","required":false,"schema":{"type":"string","maxLength":200},"description":"City name used for distance filtering. When set, `radius` limits shops around the geocoded city."},{"in":"query","name":"radius","required":false,"schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"description":"Distance radius in kilometres for `city` filtering."},{"in":"query","name":"country","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated ISO 3166-1 alpha-2 country codes, for example `DE,AT`."},{"in":"query","name":"region","required":false,"schema":{"type":"string","maxLength":50},"description":"Comma-separated shipping region codes, for example `DE,EU`."}],"responses":{"200":{"description":"Filtered search result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilteredSearchResultEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filtered/search?q=kaffee&city=Berlin&radius=50&country=DE&region=EU\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}},"/api/v1/filter-options":{"get":{"tags":["Filters"],"summary":"List available filter options","description":"Returns currently available filter values derived from public shop headquarters. At the moment this contains countries.","operationId":"getPublicFilterOptions","responses":{"200":{"description":"Available filter options.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterOptionsEnvelope"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-codeSamples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filter-options' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filter-options')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filter-options\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filter-options', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filter-options\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filter-options\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filter-options\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filter-options\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filter-options\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filter-options\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}],"x-code-samples":[{"lang":"Curl","label":"cURL","source":"curl --request GET \\\n  --url 'https://api.lmaa.space/api/v1/filter-options' \\\n  --header 'Accept: application/json'"},{"lang":"Shell","label":"POSIX","source":"#!/usr/bin/env sh\nset -eu\n\nresponse=\"$(curl --fail --silent --show-error \\\n  --header 'Accept: application/json' \\\n  'https://api.lmaa.space/api/v1/filter-options')\"\n\nprintf '%s\\n' \"$response\""},{"lang":"Node.js","label":"Fetch","source":"const response = await fetch(\"https://api.lmaa.space/api/v1/filter-options\", {\n  headers: { Accept: \"application/json\" },\n});\n\nif (!response.ok) {\n  throw new Error(`LMAA API request failed: ${response.status}`);\n}\n\nconst payload = await response.json();\nconsole.log(payload.data);"},{"lang":"PHP","label":"Guzzle","source":"<?php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.lmaa.space/api/v1/filter-options', [\n    'headers' => ['Accept' => 'application/json'],\n]);\n$payload = json_decode((string) $response->getBody(), true);\nprint_r($payload['data']);"},{"lang":"Python","label":"Requests","source":"import requests\n\nresponse = requests.get(\"https://api.lmaa.space/api/v1/filter-options\", headers={\"Accept\": \"application/json\"}, timeout=10)\nresponse.raise_for_status()\npayload = response.json()\nprint(payload[\"data\"])"},{"lang":"Ruby","label":"Net::HTTP","source":"require \"json\"\nrequire \"net/http\"\n\nuri = URI(\"https://api.lmaa.space/api/v1/filter-options\")\nrequest = Net::HTTP::Get.new(uri, \"Accept\" => \"application/json\")\nresponse = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == \"https\") do |http|\n  http.request(request)\nend\nresponse.value\npayload = JSON.parse(response.body)\nputs payload[\"data\"]"},{"lang":"Rust","label":"Reqwest","source":"#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let payload: serde_json::Value = reqwest::Client::new()\n        .get(\"https://api.lmaa.space/api/v1/filter-options\")\n        .header(\"Accept\", \"application/json\")\n        .send()\n        .await?\n        .error_for_status()?\n        .json()\n        .await?;\n    println!(\"{}\", payload[\"data\"]);\n    Ok(())\n}"},{"lang":"Swift","label":"URLSession","source":"let url = URL(string: \"https://api.lmaa.space/api/v1/filter-options\")!\nvar request = URLRequest(url: url)\nrequest.setValue(\"application/json\", forHTTPHeaderField: \"Accept\")\n\nlet (data, response) = try await URLSession.shared.data(for: request)\nguard let httpResponse = response as? HTTPURLResponse, (200..<300).contains(httpResponse.statusCode) else {\n  throw URLError(.badServerResponse)\n}\nlet payload = try JSONSerialization.jsonObject(with: data) as? [String: Any] ?? [:]\nprint(payload[\"data\"] ?? payload)"},{"lang":"ObjC","label":"NSURLSession","source":"NSURL *url = [NSURL URLWithString:@\"https://api.lmaa.space/api/v1/filter-options\"];\nNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];\n[request setValue:@\"application/json\" forHTTPHeaderField:@\"Accept\"];\n\nNSURLSessionDataTask *task = [[NSURLSession sharedSession]\n  dataTaskWithRequest:request\n  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n    if (error) { NSLog(@\"%@\", error); return; }\n    NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];\n    NSLog(@\"%@\", payload[@\"data\"] ?: payload);\n  }];\n[task resume];"},{"lang":"C","label":"libcurl","source":"#include <curl/curl.h>\n\nint main(void) {\n  CURL *curl = curl_easy_init();\n  if (!curl) return 1;\n\n  struct curl_slist *headers = NULL;\n  headers = curl_slist_append(headers, \"Accept: application/json\");\n  curl_easy_setopt(curl, CURLOPT_URL, \"https://api.lmaa.space/api/v1/filter-options\");\n  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n  CURLcode result = curl_easy_perform(curl);\n\n  curl_slist_free_all(headers);\n  curl_easy_cleanup(curl);\n  return result == CURLE_OK ? 0 : 1;\n}"}]}}},"components":{"schemas":{"ErrorEnvelope":{"type":"object","description":"Body of every error response. The HTTP status carries the outcome, this envelope carries the explanation.","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Human-readable explanation. Treat it as display text only, because its wording can change at any time. Unexpected server faults are reported as \"Internal Server Error\" so that internals never leak."},"code":{"type":"string","description":"Stable machine-readable error identifier. Reserved for future use, as no endpoint documented here sets it."},"issues":{"type":"array","description":"Per-field validation failures. Only write endpoints produce these, so no endpoint documented here returns them.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-joined path of the offending field."},"message":{"type":"string","description":"What is wrong with that field."}},"required":["path","message"]}}},"required":["message"]}},"required":["error"]},"RegionCode":{"type":"string","description":"Area a shop delivers to, not the area it is based in. DE, AT, and CH are the individual countries, EU is Europe, and WORLD is worldwide delivery.","enum":["DE","AT","CH","EU","WORLD"]},"ShopCategory":{"type":"object","description":"Category reference embedded in a shop payload.","properties":{"id":{"type":"integer"},"slug":{"type":"string","description":"URL-safe identifier, and the value to pass to the category endpoints."},"name":{"type":"string","description":"Display name, unique across all categories."}},"required":["id","slug","name"]},"SocialMedia":{"type":"object","description":"Social profiles of the shop, keyed by platform. Every value is a full canonical profile URL rather than a handle, because handles are expanded when a shop is saved. A shop without any profile yields an empty object.","properties":{"applepodcasts":{"type":["string","null"]},"mastodon":{"type":["string","null"]},"bluesky":{"type":["string","null"]},"instagram":{"type":["string","null"]},"facebook":{"type":["string","null"]},"whatsapp":{"type":["string","null"]},"signal":{"type":["string","null"]},"discord":{"type":["string","null"]},"threads":{"type":["string","null"]},"tiktok":{"type":["string","null"]},"x":{"type":["string","null"]},"youtube":{"type":["string","null"]},"twitch":{"type":["string","null"]},"tumblr":{"type":["string","null"]},"linkedin":{"type":["string","null"]},"pinterest":{"type":["string","null"]},"patreon":{"type":["string","null"]},"mixcloud":{"type":["string","null"]},"soundcloud":{"type":["string","null"]},"spotify":{"type":["string","null"]},"github":{"type":["string","null"]},"gitlab":{"type":["string","null"]},"codeberg":{"type":["string","null"]},"website":{"type":["string","null"]}},"additionalProperties":{"type":["string","null"]}},"Headquarters":{"type":"object","description":"Registered address of the shop. The record exists only when a country is known, so every other part may be missing individually while countryCode is always present.","properties":{"street":{"type":["string","null"]},"postalCode":{"type":["string","null"]},"city":{"type":["string","null"],"description":"City name resolved from the geo reference table, null when no city is linked."},"state":{"type":["string","null"],"description":"Region or state name resolved from the geo reference table, null when none is linked."},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code in upper case."},"latitude":{"type":["number","null"],"description":"Decimal degrees (WGS 84), null until the address has been geocoded. Used by the radius filter."},"longitude":{"type":["number","null"],"description":"Decimal degrees (WGS 84), null until the address has been geocoded."}},"required":["street","postalCode","city","state","countryCode","latitude","longitude"]},"PublicShopListItem":{"type":"object","description":"A shop as it appears in the public catalogue.","properties":{"id":{"type":"integer","description":"Numeric shop identifier. The shop detail endpoint takes the URL token instead, so this is only useful for correlating records."},"name":{"type":"string","description":"Shop name. All listings are sorted by it."},"url":{"type":"string","format":"uri","description":"Shop homepage, normalised when the shop is submitted: tracking parameters, fragments, a leading www, and a trailing slash are all removed."},"categories":{"type":"array","items":{"$ref":"#/components/schemas/ShopCategory"},"description":"Categories the shop is filed under. Empty when it has not been categorised yet."},"region":{"type":"array","items":{"$ref":"#/components/schemas/RegionCode"},"description":"Areas the shop delivers to. Empty when the shop has not declared any."},"pickup":{"type":"string","description":"Free-text note about collecting an order in person, written by the operator and usually in German. Frequently an empty string, which means no note rather than no collection."},"shipping":{"type":"string","description":"Free-text note about delivery terms, for example a threshold for free shipping. Says nothing about where the shop delivers, which is what region covers. Frequently an empty string."},"description":{"type":"string","description":"Public description of the shop, written in Markdown. May be an empty string."},"ogImage":{"type":["string","null"],"format":"uri","description":"Preview image taken from the shop's own website, discovered automatically from its touch icon, Open Graph tag, manifest, or logo. Hosted by the shop rather than by lmaa.space, so it is not guaranteed to stay reachable. Null when nothing suitable was found."},"contactEmail":{"type":["string","null"],"format":"email","description":"Public contact address of the shop, not the address of whoever submitted it."},"socialMedia":{"$ref":"#/components/schemas/SocialMedia"},"likeCount":{"type":"integer","minimum":0,"description":"Number of visitors who have liked the shop. A stored counter, kept in step with the like records, and never negative."}},"required":["id","name","url","categories","region","pickup","shipping","description","socialMedia","likeCount"]},"PublicShopDetail":{"description":"A single shop with the fields that only the detail endpoint returns, on top of everything in the catalogue listing.","allOf":[{"$ref":"#/components/schemas/PublicShopListItem"},{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time","description":"When the shop was added to the directory."},"updatedAt":{"type":"string","format":"date-time","description":"When the shop record last changed for any reason."},"headquarters":{"oneOf":[{"$ref":"#/components/schemas/Headquarters"},{"type":"null"}],"description":"Registered address of the shop, null when none has been recorded."},"likeToken":{"type":"string","description":"Short-lived challenge for the like endpoint, formatted as signature.timestamp and valid for 30 minutes from the moment this response was produced. It is tied to the shop rather than to a visitor, and a fresh one is issued on every detail request."}},"required":["createdAt","updatedAt","headquarters","likeToken"]}]},"CategoryShopItem":{"type":"object","description":"A shop inside a category response. Same as the catalogue entry without the category list, which the surrounding response already states, and without the contact address.","properties":{"id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"region":{"type":"array","items":{"$ref":"#/components/schemas/RegionCode"}},"pickup":{"type":"string"},"shipping":{"type":"string"},"description":{"type":"string"},"ogImage":{"type":["string","null"],"format":"uri"},"socialMedia":{"$ref":"#/components/schemas/SocialMedia"},"likeCount":{"type":"integer","minimum":0}},"required":["id","name","url","region","pickup","shipping","description","socialMedia","likeCount"]},"FilteredShopItem":{"description":"A shop returned by the filter endpoints, carrying the coordinates the map needs.","allOf":[{"$ref":"#/components/schemas/PublicShopListItem"},{"type":"object","properties":{"latitude":{"type":["number","null"],"description":"Latitude of the shop's registered address in decimal degrees, not of the place searched for. Null when the address is unknown or not yet geocoded."},"longitude":{"type":["number","null"],"description":"Longitude of the shop's registered address in decimal degrees."}},"required":["latitude","longitude"]}]},"RankedShopItem":{"description":"A search hit, which is a catalogue entry plus the reason it matched.","allOf":[{"$ref":"#/components/schemas/PublicShopListItem"},{"type":"object","properties":{"rank":{"type":"integer","minimum":1,"maximum":7,"description":"Which part of the shop matched, from 1 for the strongest to 6 for the weakest: 1 the name, 2 the URL, 3 the postcode of the registered address, 4 imported shop-check notes, 5 the description, 6 the name of one of its categories. Results are sorted by this value and then by name. It ranks the match, it does not score it."}},"required":["rank"]}]},"RankedFilteredShopItem":{"description":"A search hit within the active filters, ranked the same way as an unfiltered one.","allOf":[{"$ref":"#/components/schemas/FilteredShopItem"},{"type":"object","properties":{"rank":{"type":"integer","minimum":1,"maximum":7,"description":"Match class, identical in meaning to the one on RankedShopItem."}},"required":["rank"]}]},"CategorySummary":{"type":"object","description":"A category with its artwork and the number of public shops filed under it.","properties":{"id":{"type":"integer"},"name":{"type":"string","description":"Display name, unique across all categories."},"slug":{"type":"string","description":"URL-safe identifier, and the value the category endpoints expect."},"imageUrl":{"type":["string","null"],"format":"uri","description":"Header image of the category, null when none has been chosen."},"imagePhotographer":{"type":["string","null"],"description":"Name of the photographer, to be displayed wherever the image is shown."},"imagePhotographerUrl":{"type":["string","null"],"format":"uri","description":"Profile of the photographer, to be linked alongside the credit."},"imageFocalPointY":{"type":"number","minimum":0,"maximum":100,"description":"Vertical focal point of the header image as a percentage of its height, where 0 is the top edge and 100 the bottom. Use it when cropping the image so the subject stays visible. The horizontal focal point is always centred."},"shopCount":{"type":"integer","minimum":0,"description":"Number of public shops in this category, counted per request rather than stored. On the filter endpoints it counts only the shops matching the active filters, so it can be 0."}},"required":["id","name","slug","shopCount"]},"CategoryDetail":{"description":"A category together with every public shop filed under it.","allOf":[{"$ref":"#/components/schemas/CategorySummary"},{"type":"object","properties":{"shops":{"type":"array","items":{"$ref":"#/components/schemas/CategoryShopItem"},"description":"The shops, sorted by name."}},"required":["shops"]}]},"FilteredCategoryDetail":{"description":"A category together with only those of its shops that match the active filters. The category itself is unaffected by the filters.","allOf":[{"$ref":"#/components/schemas/CategorySummary"},{"type":"object","properties":{"shops":{"type":"array","items":{"$ref":"#/components/schemas/FilteredShopItem"},"description":"The matching shops, sorted by name."}},"required":["shops"]}]},"SearchResult":{"type":"object","description":"Shops and categories matching a search term.","properties":{"query":{"type":"string","description":"The search term as it was interpreted, trimmed."},"total":{"type":"integer","minimum":0,"description":"Number of items in this response, that is shops plus categories. Both lists are capped, at 40 and 5 respectively, so this is not a count of everything that matches and cannot be used for paging."},"shops":{"type":"array","items":{"$ref":"#/components/schemas/RankedShopItem"},"description":"Matching shops, best match first, at most 40."},"categories":{"type":"array","items":{"$ref":"#/components/schemas/CategorySummary"},"description":"Categories whose name contains the term, at most 5."}},"required":["query","total","shops","categories"]},"FilteredSearchResult":{"type":"object","description":"Search results restricted to the active filters. Note that the filters apply to the shops only; the category matches are the same ones an unfiltered search returns.","properties":{"query":{"type":"string","description":"The search term as it was interpreted, trimmed."},"total":{"type":"integer","minimum":0,"description":"Number of items in this response, that is shops plus categories, subject to the same caps of 40 and 5."},"shops":{"type":"array","items":{"$ref":"#/components/schemas/RankedFilteredShopItem"},"description":"Matching shops within the filters, best match first, at most 40."},"categories":{"type":"array","items":{"$ref":"#/components/schemas/CategorySummary"},"description":"Categories whose name contains the term, at most 5, not restricted by the filters."}},"required":["query","total","shops","categories"]},"CheckUrlResult":{"description":"What the directory already knows about a domain. The variants are checked in a fixed order, so a blocked domain is reported as blocked even when a shop for it exists.","oneOf":[{"type":"object","description":"The domain is unknown and can be submitted. Also returned when the url parameter is missing or empty, in which case nothing was checked.","properties":{"status":{"type":"string","const":"available"}},"required":["status"]},{"type":"object","description":"No registrable domain could be read from the input, so there was nothing to look up.","properties":{"status":{"type":"string","const":"invalid"}},"required":["status"]},{"type":"object","description":"The operator has barred this domain from the directory.","properties":{"status":{"type":"string","const":"blocked"},"messageMarkdown":{"type":"string","description":"The operator's explanation for the block, written in Markdown and meant to be shown to whoever tried to submit the shop."}},"required":["status","messageMarkdown"]},{"type":"object","description":"The shop is already listed.","properties":{"status":{"type":"string","const":"published"},"shopName":{"type":"string","description":"Name under which the shop is listed."},"shopUrl":{"type":"string","description":"Path of the shop page on lmaa.space, relative to the site root, for example /shop/ab12cd34. This is not the shop's own address."}},"required":["status","shopName","shopUrl"]},{"type":"object","description":"The shop or an earlier submission for it was turned down.","properties":{"status":{"type":"string","const":"rejected"},"shopName":{"type":"string"},"rejectionUrl":{"type":["string","null"],"description":"Path of the public notice explaining the decision, relative to the site root, for example /rejected/0123456789abcdef0123456789abcdef. Null for older decisions that were recorded without such a notice."}},"required":["status","shopName","rejectionUrl"]},{"type":"object","description":"A submission for this domain is waiting to be reviewed or has been put on hold.","properties":{"status":{"type":"string","const":"pending"},"shopName":{"type":"string","description":"Name given in the submission."}},"required":["status","shopName"]}]},"RejectionPage":{"type":"object","description":"Public notice explaining why a shop or a submission was turned down. Published so that decisions stay traceable.","properties":{"shopName":{"type":"string"},"shopUrl":{"type":"string","format":"uri","description":"Address of the shop concerned."},"rejectionLongText":{"type":["string","null"],"description":"The reasoning that is meant for the public. Internal review notes are never part of this response. Null when the decision was recorded without a public text."},"reviewedAt":{"type":["string","null"],"format":"date-time","description":"When the decision was made. For shops that were listed first and turned down later, this is the time of the last change to the record."}},"required":["shopName","shopUrl","rejectionLongText","reviewedAt"]},"FilteredCategoriesResult":{"type":"object","description":"Every category with its filtered shop count, plus the overall number of matches.","properties":{"categories":{"type":"array","items":{"$ref":"#/components/schemas/CategorySummary"},"description":"All categories, including those whose filtered count is 0, sorted by name."},"totalShops":{"type":"integer","minimum":0,"description":"Number of distinct shops matching the filters. This is not the sum of the counts above: a shop in several categories is counted once here but in each of its categories there, and a shop without any category is counted here only."}},"required":["categories","totalShops"]},"FilterOptions":{"type":"object","description":"Filter values that are worth offering, derived from the shops currently listed. Delivery regions are a fixed vocabulary and are therefore not part of this response.","properties":{"countries":{"type":"array","items":{"$ref":"#/components/schemas/FilterCountry"}}},"required":["countries"]},"FilterCountry":{"type":"object","description":"A country at least one listed shop is based in. Countries without a listed shop never appear.","properties":{"code":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 code in upper case, and the value the country filter expects."},"name":{"type":"string","description":"Stored country name. It falls back to the code itself where no name has been recorded, so treat it as a hint and localise from the code when you need a proper label."}},"required":["code","name"]},"ShopListEnvelope":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicShopListItem"}}},"required":["data"],"description":"The public shop catalogue, sorted by name."},"ShopDetailEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PublicShopDetail"}},"required":["data"],"description":"One shop with its details."},"CategoryListEnvelope":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CategorySummary"}}},"required":["data"],"description":"All categories, sorted by name."},"CategoryDetailEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CategoryDetail"}},"required":["data"],"description":"One category with its shops."},"SearchResultEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SearchResult"}},"required":["data"],"description":"Search results."},"CheckUrlEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CheckUrlResult"}},"required":["data"],"description":"What the directory knows about the domain that was checked."},"RejectionPageEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/RejectionPage"}},"required":["data"],"description":"A public rejection notice."},"FilteredShopListEnvelope":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FilteredShopItem"}}},"required":["data"],"description":"Shops matching the active filters, sorted by name."},"FilteredCategoriesEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FilteredCategoriesResult"}},"required":["data"],"description":"Categories with filtered shop counts."},"FilteredCategoryDetailEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FilteredCategoryDetail"}},"required":["data"],"description":"One category with the shops matching the active filters."},"FilteredSearchResultEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FilteredSearchResult"}},"required":["data"],"description":"Search results within the active filters."},"FilterOptionsEnvelope":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FilterOptions"}},"required":["data"],"description":"Filter values currently worth offering."}}}}