Volledige REST API voor blogs, topics, gerelateerde posts en Google Reviews
De Klusio API biedt toegang tot al je blog content, inclusief automatisch gegenereerde gerelateerde posts, topic clustering, en real-time Google Reviews data. Ideaal voor headless CMS implementaties en custom frontends.
De Klusio API is een RESTful API die JSON responses retourneert. Alle endpoints vereisen authenticatie
via een API key die je in je X-API-Key header meestuurt.
Elke request vereist een API key in de header:
X-API-Key: jouw_api_key_hier
De API biedt vier hoofdfuncties, allemaal via hetzelfde endpoint met verschillende parameters:
| Functie | Parameters | Beschrijving |
|---|---|---|
| Blog Listing | company_id | Haal alle blog posts op met paginering en filters |
| Single Post | company_id + slug | Haal een specifieke blog post op |
| Topic Posts | company_id + topic_id | Haal alle posts van een specifiek topic op |
| Related Posts | company_id + related_to | Haal gerelateerde posts op basis van topic clustering |
| View Tracking | post_id + company_id | Registreer pageviews, tijd op pagina en conversies (POST) |
GET Haal een lijst van alle blog posts op
| Parameter | Type | Beschrijving |
|---|---|---|
| company_idVERPLICHT | integer | Het unieke ID van je bedrijf |
| limitOPTIONEEL | integer | Aantal posts per pagina (max 100, default 20) |
| offsetOPTIONEEL | integer | Aantal posts om over te slaan (voor paginering) |
| searchOPTIONEEL | string | Zoekterm voor titel of content |
| sortOPTIONEEL | string | Sorteer op: recent, popular, oldest |
$ch = curl_init('https://klusio.nl/api/blog.php?company_id=123&limit=10');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: jouw_api_key_hier',
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
{
"success": true,
"total": 47,
"limit": 10,
"offset": 0,
"posts": [
{
"id": 123,
"title": "Hoe kies je de juiste dakpannen?",
"slug": "hoe-kies-je-de-juiste-dakpannen",
"excerpt": "Een korte samenvatting van de post...",
"content": "Volledige HTML content...",
"featured_image": "https://...",
"published_at": "2025-01-20 10:30:00",
"views": 342,
"topic_id": 5,
"topic_name": "Dakbedekking"
}
],
"reviews": {
"google_rating": 4.8,
"total_reviews": 47,
"rating_distribution": {
"5": 42,
"4": 3,
"3": 1,
"2": 0,
"1": 1
},
"business_name": "Jouw Bedrijf BV",
"latest_reviews": [
{
"reviewer_name": "Jan Janssen",
"author_image_url": "https://...",
"rating": 5,
"review_text": "Uitstekende service!",
"review_timestamp": "2025-01-15 14:30:00",
"time_ago": "5 dagen geleden",
"review_link": "https://g.page/..."
}
]
}
}
GET Haal een specifieke blog post op via de slug
| Parameter | Type | Beschrijving |
|---|---|---|
| company_idVERPLICHT | integer | Het unieke ID van je bedrijf |
| slugVERPLICHT | string | De URL-vriendelijke slug van de blog post |
{
"success": true,
"post": {
"id": 123,
"title": "Hoe kies je de juiste dakpannen?",
"slug": "hoe-kies-je-de-juiste-dakpannen",
"excerpt": "Een korte samenvatting...",
"content": "<p>Volledige HTML content...</p>",
"featured_image": "https://...",
"published_at": "2025-01-20 10:30:00",
"views": 342,
"topic_id": 5,
"topic_name": "Dakbedekking"
},
"reviews": { ... },
"tracking_script": "<script>...</script>"
}
tracking_script die automatisch pageviews registreert.
Plaats deze in je HTML voor accurate statistieken.
GET Haal alle blog posts van een specifiek topic/cluster op
| Parameter | Type | Beschrijving |
|---|---|---|
| company_idVERPLICHT | integer | Het unieke ID van je bedrijf |
| topic_idVERPLICHT | integer | Het ID van het topic/cluster |
| limitOPTIONEEL | integer | Aantal posts (default 20) |
| offsetOPTIONEEL | integer | Offset voor paginering |
{
"success": true,
"total": 8,
"posts": [ ... ],
"topic": {
"id": 5,
"name": "Dakbedekking",
"slug": "dakbedekking",
"status": "active",
"pillar_type": "pillar"
},
"pillar": {
"url": "https://voorbeeld.nl/dakbedekking",
"title": "Alles over dakbedekking",
"type": "page"
},
"reviews": { ... }
}
De Klusio API biedt ingebouwde view tracking voor blog posts. Hiermee worden pageviews, unieke bezoekers, tijd op pagina, scroll diepte en conversies automatisch bijgehouden in je Klusio dashboard.
Wanneer je een single post ophaalt via de API (met slug parameter), bevat de response
een tracking_script veld. Dit is een kant-en-klare <script> tag die je direct in je
blog detail pagina kunt plaatsen.
// Haal single post op
$response = file_get_contents('https://klusio.nl/api/blog.php?company_id=123&slug=mijn-post', false,
stream_context_create(['http' => ['header' => 'X-API-Key: jouw_key']])
);
$data = json_decode($response, true);
// Toon de post content
echo $data['post']['content'];
// Plaats het tracking script voor </body>
echo $data['tracking_script'];
visitor_id (opgeslagen in localStorage),
meet de tijd op de pagina, en stuurt de data via sendBeacon bij het verlaten van de pagina.
Er wordt exact 1 view per paginabezoek geregistreerd.
| Metric | Beschrijving |
|---|---|
| Pageview | Eenmalige registratie per paginabezoek |
| Unieke bezoeker | Op basis van visitor_id per dag (eerste bezoek = uniek) |
| Tijd op pagina | Seconden doorgebracht op de pagina (gemeten bij verlaten) |
| Scroll diepte | Maximaal scroll percentage (0-100%) |
| Bounce | Automatisch berekend: bezoek < 10 seconden = bounce |
| Referrer | De pagina van waaruit de bezoeker kwam |
POST Voor eigen implementaties kun je views ook handmatig registreren via het tracking endpoint.
| Parameter | Type | Beschrijving |
|---|---|---|
| post_idVERPLICHT | integer | Het ID van de blog post |
| company_idVERPLICHT | integer | Het ID van het bedrijf |
| visitor_idOPTIONEEL | string | Uniek bezoeker ID (voor unieke bezoeker tracking) |
| time_spentOPTIONEEL | integer | Tijd op pagina in seconden |
| scroll_depthOPTIONEEL | integer | Maximale scroll diepte in procenten (0-100) |
| referrerOPTIONEEL | string | Referrer URL |
| convertedOPTIONEEL | boolean | Of de bezoeker een conversie heeft gedaan (bijv. contactformulier) |
// Genereer of hergebruik een uniek visitor ID
let visitorId = localStorage.getItem('klusio_visitor_id');
if (!visitorId) {
visitorId = 'v_' + Math.random().toString(36).substr(2, 12)
+ '_' + Date.now().toString(36);
localStorage.setItem('klusio_visitor_id', visitorId);
}
// Track de view bij het verlaten van de pagina
const startTime = Date.now();
let maxScroll = 0;
window.addEventListener('scroll', () => {
const pct = Math.round(
(window.scrollY + window.innerHeight)
/ document.documentElement.scrollHeight * 100
);
if (pct > maxScroll) maxScroll = pct;
});
window.addEventListener('beforeunload', () => {
const data = JSON.stringify({
post_id: 123, // ID van de blog post
company_id: 456, // Jouw company ID
visitor_id: visitorId,
time_spent: Math.round((Date.now() - startTime) / 1000),
scroll_depth: maxScroll,
referrer: document.referrer || ''
});
navigator.sendBeacon(
'https://klusio.nl/api/track-blog-view.php',
data
);
});
{
"success": true,
"message": "View succesvol geregistreerd",
"is_unique": true
}
navigator.sendBeacon() bij het verlaten van de pagina
voor betrouwbare registratie zonder de gebruiker te vertragen.
Nieuw in v1.7! Alle API responses bevatten nu automatisch Google Reviews data. Dit stelt je in staat om je Google beoordeling en reviews te tonen op je website.
{
"reviews": {
"google_rating": 4.8,
"total_reviews": 47,
"rating_distribution": {
"5": 42,
"4": 3,
"3": 1,
"2": 0,
"1": 1
},
"business_name": "Jouw Bedrijf BV",
"latest_reviews": [
{
"reviewer_name": "Jan Janssen",
"author_image_url": "https://lh3.googleusercontent.com/...",
"rating": 5,
"review_text": "Uitstekende service! Zeer professioneel.",
"review_timestamp": "2025-01-15 14:30:00",
"time_ago": "5 dagen geleden",
"review_link": "https://g.page/..."
}
]
}
}
| Veld | Type | Beschrijving |
|---|---|---|
| google_rating | float | Gemiddelde Google rating (0-5) |
| total_reviews | integer | Totaal aantal Google reviews |
| rating_distribution | object | Verdeling van ratings per sterren (1-5) |
| business_name | string | Bedrijfsnaam zoals vermeld op Google |
| latest_reviews | array | Maximaal 10 meest recente zichtbare reviews |
// Fetch blog posts met reviews
const response = await fetch('https://klusio.nl/api/blog.php?company_id=123');
const data = await response.json();
if (data.reviews) {
const rating = data.reviews.google_rating;
const totalReviews = data.reviews.total_reviews;
// Toon rating
document.getElementById('rating').textContent = `${rating}/5`;
document.getElementById('count').textContent = `${totalReviews} reviews`;
// Toon reviews
data.reviews.latest_reviews.forEach(review => {
console.log(`${review.reviewer_name}: ${review.review_text}`);
});
}
De API gebruikt standaard HTTP status codes en retourneert error responses in JSON formaat.
| Code | Betekenis | Beschrijving |
|---|---|---|
| 200 | OK | Request succesvol verwerkt |
| 400 | Bad Request | Verplichte parameters ontbreken |
| 401 | Unauthorized | Ongeldige of ontbrekende API key |
| 404 | Not Found | Blog post niet gevonden |
| 405 | Method Not Allowed | Alleen GET requests zijn toegestaan |
| 500 | Internal Server Error | Server error opgetreden |
{
"error": "company_id is required",
"success": false
}
De API heeft momenteel geen harde rate limits, maar we raden aan om response caching te implementeren voor optimale performance.
If-Modified-Since headers en implementeer client-side caching voor de beste performance.
Probeer andere zoektermen of gebruik de snelle links in de sidebar.
Tips, inzichten en updates over SEO, AI en online groei.

Meer websitebezoekers krijgen? Vergelijk handmatige SEO met AI-gestuurde content en kies wat past...
Lees meer
Chatbot met dashboard voor mkb vergelijken? Leer het verschil met losse tools, welke aanpak past ...
Lees meer
SEO uitbesteden? Ontdek 10 cruciale checks om bureaus en tools te beoordelen, verborgen kosten te...
Lees meer
Bel mij terug
We bellen je terug om de groeikansen voor jouw bedrijf te bespreken.
Bedankt!
We bellen je zo snel mogelijk.