{"openapi":"3.1.0","info":{"title":"Hondenraswijzer Content API","version":"1.0.0","summary":"Openbare, alleen-lezen API met Nederlandstalige informatie over hondenrassen.","description":"Gratis te gebruiken, zonder API-sleutel. Maximaal 120 verzoeken per minuut per IP-adres. Alle teksten zijn Nederlandstalig. De informatie is algemeen en geen dierenartsadvies. Documentatie: https://hondenraswijzer.nl/developers","contact":{"name":"Hondenraswijzer","url":"https://hondenraswijzer.nl/developers"}},"servers":[{"url":"https://hondenraswijzer.nl/api/v1"}],"externalDocs":{"description":"Documentatie voor ontwikkelaars","url":"https://hondenraswijzer.nl/developers"},"tags":[{"name":"Rassen","description":"Hondenrassen en hun kenmerken"},{"name":"Overzichten","description":"Overzichtspagina's zoals kleine hondenrassen"},{"name":"Blog","description":"Artikelen"}],"paths":{"/breeds":{"get":{"operationId":"listBreeds","tags":["Rassen"],"summary":"Hondenrassen zoeken en filteren","description":"Alle gepubliceerde rassen, alfabetisch. Combineer filters om rassen te vinden die bij iemands situatie passen, bijvoorbeeld een klein, rustig ras dat geschikt is voor een appartement.","parameters":[{"name":"q","in":"query","required":false,"description":"Zoek op (een deel van) de rasnaam","schema":{"type":"string","maxLength":100}},{"name":"size","in":"query","required":false,"description":"Formaat","schema":{"type":"string","enum":["klein","middel","groot"]}},{"name":"kids","in":"query","required":false,"description":"ja = alleen kindvriendelijke rassen","schema":{"type":"string","enum":["ja","ouder"]}},{"name":"apartment_friendly","in":"query","required":false,"description":"Alleen rassen die (niet) geschikt zijn voor een appartement","schema":{"type":"boolean"}},{"name":"max_energy","in":"query","required":false,"description":"Maximale energie (1 tot 3)","schema":{"type":"integer","minimum":1,"maximum":3}},{"name":"max_shedding","in":"query","required":false,"description":"Maximaal verharen (1 tot 3)","schema":{"type":"integer","minimum":1,"maximum":3}},{"name":"max_grooming","in":"query","required":false,"description":"Maximale vachtverzorging (1 tot 3)","schema":{"type":"integer","minimum":1,"maximum":3}},{"name":"max_experience","in":"query","required":false,"description":"Maximaal benodigde ervaring (1 tot 3)","schema":{"type":"integer","minimum":1,"maximum":3}}],"responses":{"200":{"description":"Lijst met rassen.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BreedSummary"}}}}}}},"422":{"description":"Ongeldig filter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}}}}},"/breeds/{slug}":{"get":{"operationId":"getBreed","tags":["Rassen"],"summary":"Eén hondenras met alle details","description":"Karakter, voor wie het ras past en niet past, verzorging, veelgestelde vragen en kosten.","parameters":[{"name":"slug","in":"path","required":true,"description":"Slug van het ras, bijvoorbeeld kooikerhondje","schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}],"responses":{"200":{"description":"Het ras.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Breed"}}}}}},"404":{"description":"Niet gevonden of niet gepubliceerd.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/filter-pages":{"get":{"operationId":"listFilterPages","tags":["Overzichten"],"summary":"Overzichtspagina's met hun rassen","description":"Thematische overzichten zoals kleine hondenrassen of honden die niet verharen, met de slugs van de rassen erop.","responses":{"200":{"description":"Lijst met overzichten.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FilterPage"}}}}}}}}}},"/posts":{"get":{"operationId":"listPosts","tags":["Blog"],"summary":"Blogartikelen","description":"Gepubliceerde artikelen, nieuwste eerst, 20 per pagina.","parameters":[{"name":"page","in":"query","required":false,"description":"Paginanummer","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Een pagina artikelen.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PostSummary"}},"links":{"type":"object"},"meta":{"type":"object"}}}}}}}}},"/posts/{slug}":{"get":{"operationId":"getPost","tags":["Blog"],"summary":"Eén blogartikel met de volledige tekst","description":"De tekst staat als Markdown in body_markdown.","parameters":[{"name":"slug","in":"path","required":true,"description":"Slug van het artikel","schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}}],"responses":{"200":{"description":"Het artikel.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Post"}}}}}},"404":{"description":"Niet gevonden of niet gepubliceerd.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"BreedSummary":{"type":"object","required":["slug","name","summary","size","energy","shedding","grooming","kids","experience","apartment_friendly","url"],"properties":{"slug":{"type":"string","example":"kooikerhondje"},"name":{"type":"string","example":"Kooikerhondje"},"summary":{"type":"string","description":"Eén zin over het ras"},"size":{"type":"string","enum":["klein","middel","groot"]},"energy":{"type":"integer","minimum":1,"maximum":3,"description":"Energie: 1 laag, 2 gemiddeld, 3 hoog"},"shedding":{"type":"integer","minimum":1,"maximum":3,"description":"Verharen: 1 weinig, 3 veel"},"grooming":{"type":"integer","minimum":1,"maximum":3,"description":"Vachtverzorging: 1 weinig, 3 veel"},"kids":{"type":"string","enum":["ja","ouder"],"description":"ja = kindvriendelijk, ouder = beter bij oudere kinderen"},"experience":{"type":"integer","minimum":1,"maximum":3,"description":"Benodigde ervaring: 1 geen, 3 veel"},"apartment_friendly":{"type":"boolean"},"image_url":{"type":["string","null"],"format":"uri"},"url":{"type":"string","format":"uri","description":"Rasfiche (HTML)"},"markdown_url":{"type":"string","format":"uri","description":"Rasfiche als Markdown"}}},"Breed":{"allOf":[{"$ref":"#/components/schemas/BreedSummary"},{"type":"object","properties":{"trainability":{"type":["integer","null"],"minimum":1,"maximum":3},"barking":{"type":["integer","null"],"minimum":1,"maximum":3},"lead":{"type":["string","null"]},"character":{"type":"array","items":{"type":"string"}},"suits":{"type":"array","items":{"type":"string"}},"not_suits":{"type":"array","items":{"type":"string"}},"care":{"type":"array","items":{"type":"string"}},"faq":{"type":"array","items":{"type":"object","properties":{"q":{"type":"string"},"a":{"type":"string"}}}},"popularity":{"type":["string","null"]},"cost_per_year":{"type":["string","null"]},"puppy_price":{"type":["string","null"]},"similar_slugs":{"type":"array","items":{"type":"string"}},"image_alt":{"type":["string","null"]},"updated_at":{"type":["string","null"],"format":"date-time"}}}]},"FilterPage":{"type":"object","required":["slug","title","breed_slugs","url"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"intro":{"type":"string"},"criteria":{"type":"object"},"breed_slugs":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"markdown_url":{"type":"string","format":"uri"}}},"PostSummary":{"type":"object","required":["slug","title","excerpt","url"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"image_url":{"type":["string","null"],"format":"uri"},"published_at":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","format":"uri"},"markdown_url":{"type":"string","format":"uri"}}},"Post":{"allOf":[{"$ref":"#/components/schemas/PostSummary"},{"type":"object","properties":{"body_markdown":{"type":"string"},"breed_slugs":{"type":"array","items":{"type":"string"}},"updated_at":{"type":["string","null"],"format":"date-time"}}}]},"Error":{"type":"object","properties":{"message":{"type":"string"}}},"ValidationError":{"type":"object","properties":{"message":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}}}