{"id":2172,"date":"2025-03-20T11:46:45","date_gmt":"2025-03-20T10:46:45","guid":{"rendered":"https:\/\/masero.nl\/?p=2172"},"modified":"2025-11-27T11:08:53","modified_gmt":"2025-11-27T10:08:53","slug":"een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1","status":"publish","type":"post","link":"https:\/\/masero.nl\/en\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/","title":{"rendered":"Een Codeless Connector Platform (CCP) data-connector bouwen: deel 1"},"content":{"rendered":"<p><strong>In deze blogserie neem ik je stap voor stap mee in het proces om je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel te bouwen. Als je niet bekend bent met CCP, raad ik je om mijn vorige blog te lezen: <a href=\"https:\/\/masero.nl\/en\/1284-2\/\">Microsoft Sentinel Codeless Connector Platform (CCP)<\/a>. De korte samenvatting: het is de meest effici\u00ebnte manier om loggegevens in Sentinel te importeren.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Het Codeless Connector Platform (CCP) is een vrij complex onderwerp, dus wees je ervan bewust dat deze blogserie behoorlijk uitgebreid zal worden. Maar als je samen met mij door honderden regels ARM-templates werkt, zul je uiteindelijk uitgroeien tot een echte CCP-expert. Laten we aan de slag gaan!<\/p>\n<p>&nbsp;<\/p>\n<h2 data-start=\"389\" data-end=\"419\"><strong data-start=\"393\" data-end=\"417\">Benodigdheden voor een Codeless Connector Platform (CCP) data-connector<\/strong><\/h2>\n<p data-start=\"421\" data-end=\"573\">Om een data-connector te bouwen, moeten we een toepassing vinden die we kunnen onboarden. De toepassing moet voldoen aan de volgende criteria:<\/p>\n<ul>\n<li data-start=\"421\" data-end=\"573\">Een openbaar toegankelijke API aanbieden (internet-facing API).<\/li>\n<li data-start=\"421\" data-end=\"573\">Authenticatie, verzoekafhandeling en paginering ondersteunen volgens de CCP-vereisten.<\/li>\n<li data-start=\"421\" data-end=\"573\">Idealiter beveiligingsgerelateerde gegevens blootstellen.<\/li>\n<\/ul>\n<p data-start=\"809\" data-end=\"1212\">Voor deze blogserie gaan we 1Password gebruiken als de applicatie die we onboarden. Dit komt doordat 1Password beveiligings-gerelateerde gegevens, zoals aanmeldingslogboeken, via een API beschikbaar stelt. Daarnaast vind ik het gewoon een geweldig product. Je kunt hier een gratis proefperiode van 2 weken krijgen, waarmee je kunt meedoen, bouwen en testen zonder verplichtingen (geen creditcard nodig).<\/p>\n<p data-start=\"1256\" data-end=\"1376\">Om onze CCP-connector voor 1Password te schrijven, moeten we de API volledig doorgronden. We moeten weten:<\/p>\n<ul data-start=\"1378\" data-end=\"1550\">\n<li data-start=\"1378\" data-end=\"1428\">Welke authenticatiemethode wordt gebruikt.<\/li>\n<li data-start=\"1429\" data-end=\"1504\">Welk pagineringsmechanisme de API hanteert (indien van toepassing).<\/li>\n<li data-start=\"1505\" data-end=\"1550\">Hoe de API-respons is gestructureerd.<\/li>\n<\/ul>\n<p data-start=\"1552\" data-end=\"1773\">Later in deze blogserie zullen we onze connector ook implementeren en testen. Hiervoor heb je toegang nodig tot een Sentinel-werkruimte. De stappen om een Sentinel-werkruimte in te richten vind je <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/sentinel\/quickstart-onboard\">hier<\/a>.<\/p>\n<h2 data-start=\"1780\" data-end=\"1814\"><strong data-start=\"1784\" data-end=\"1812\">De API verkennen<\/strong><\/h2>\n<p data-start=\"1816\" data-end=\"2002\">Als je je hebt aangemeld voor de 1Password-proefversie, kom je terecht op de 1Password startpagina. Om de API aan te roepen, hebben we eerst een geldig API-token nodig. Laten we er een verkrijgen door naar het &#8220;Integrations&#8221;-gedeelte te navigeren.<\/p>\n<figure id=\"attachment_2173\" aria-describedby=\"caption-attachment-2173\" style=\"width: 221px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2173\" src=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-1.webp\" alt=\"Navigatiemenu \" width=\"221\" height=\"410\" srcset=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-1.webp 221w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-1-162x300.webp 162w\" sizes=\"auto, (max-width: 221px) 100vw, 221px\" \/><figcaption id=\"caption-attachment-2173\" class=\"wp-caption-text\">Navigeer naar &#8216;integrations&#8217;.<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>Kies vervolgens voor &#8216;Sentinel&#8217; onder &#8216;Events Reporting&#8217;:<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_2174\" aria-describedby=\"caption-attachment-2174\" style=\"width: 1100px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2174\" src=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-2.webp\" alt=\"\" width=\"1100\" height=\"131\" srcset=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-2.webp 1100w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-2-300x36.webp 300w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-2-1024x122.webp 1024w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-2-768x91.webp 768w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><figcaption id=\"caption-attachment-2174\" class=\"wp-caption-text\">Selecteer Sentinel<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>Navigeer naar de sectie &#8220;Set up token&#8221; en maak je API-token aan.<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_2175\" aria-describedby=\"caption-attachment-2175\" style=\"width: 970px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2175\" src=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-3.webp\" alt=\"Events Reporting\" width=\"970\" height=\"828\" srcset=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-3.webp 970w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-3-300x256.webp 300w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-3-768x656.webp 768w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><figcaption id=\"caption-attachment-2175\" class=\"wp-caption-text\">Genereer je token.<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>Klik op &#8220;Issue Token&#8221; en zorg ervoor dat je het token opslaat, aangezien het slechts \u00e9\u00e9n keer wordt weergegeven.<\/p>\n<p>&nbsp;<\/p>\n<h2 data-start=\"129\" data-end=\"158\"><strong data-start=\"133\" data-end=\"156\">Onze tests starten<\/strong><\/h2>\n<p data-start=\"160\" data-end=\"367\">Nu we een geldige API-token hebben, kunnen we beginnen met het verkennen van de API. Hiervoor raadplegen we de API-referentie. Bij een snelle blik op de documentatie vallen de volgende zaken op:<\/p>\n<ul>\n<li data-start=\"160\" data-end=\"367\">Aangezien onze proefversie een 1Password for Business-licentie gebruikt, moeten we API-aanroepen doen naar <code data-start=\"513\" data-end=\"543\">https:\/\/events.1password.com<\/code>. Let op: als we willen dat onze connector alle licentietypen ondersteunt, moeten we dit eindpunt later parameteriseren in onze connector.<\/li>\n<li data-start=\"160\" data-end=\"367\">Authenticatie wordt uitgevoerd via een Authorization-header met een unieke token. We moeten de gebruiker een manier bieden om deze token in onze connector in te voeren. Daarnaast moeten we een Content-Type-header toevoegen.<\/li>\n<li data-start=\"160\" data-end=\"367\">We moeten de POST methode gebruiken om aanmeldingsgebeurtenissen op te halen.<\/li>\n<li data-start=\"160\" data-end=\"367\">In het eerste verzoek geven we een cursor op die bepaalt hoeveel gebeurtenissen we per verzoek willen ontvangen. We geven ook een starttijd mee om te specificeren vanaf welk moment we gebeurtenissen willen ophalen. Optioneel kunnen we een eindtijd toevoegen.<\/li>\n<\/ul>\n<p data-start=\"1396\" data-end=\"1574\" data-is-last-node=\"\" data-is-only-node=\"\">Ik heb al deze informatie samengevoegd in een klein PowerShell-script, waarmee we interactief met de API kunnen werken en aanmeldingsgebeurtenissen kunnen ophalen:<\/p>\n<p data-start=\"1396\" data-end=\"1574\" data-is-last-node=\"\" data-is-only-node=\"\"><span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$token<\/span> = <span class=\"hljs-string\">&#8220;&lt;your token here&gt;&#8221;<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$headers<\/span> = @{<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-string\">&#8220;Authorization&#8221;<\/span>= <span class=\"hljs-string\">&#8220;Bearer <span class=\"hljs-variable\">$token<\/span>&#8220;<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-string\">&#8220;Content-Type&#8221;<\/span>= <span class=\"hljs-string\">&#8220;application\/json&#8221;<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small>}<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$lastHour<\/span> = (get-date).AddHours(-1).ToUniversalTime().ToString(<span class=\"hljs-string\">&#8220;yyyy-MM-ddTHH:mm:ssZ&#8221;<\/span>)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$body<\/span> = @{<span class=\"hljs-string\">&#8220;limit&#8221;<\/span> = 200; <span class=\"hljs-string\">&#8220;start_time&#8221;<\/span> = <span class=\"hljs-string\">&#8220;<span class=\"hljs-variable\">$lastHour<\/span>&#8220;<\/span>} | ConvertTo-Json<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\">### Getting signinattempts<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$uri<\/span> = <span class=\"hljs-string\">&#8220;https:\/\/events.1password.com\/api\/v1\/signinattempts&#8221;<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$response<\/span> = Invoke-WebRequest -Method Post -Uri <span class=\"hljs-variable\">$uri<\/span> -Headers <span class=\"hljs-variable\">$headers<\/span> -Body <span class=\"hljs-variable\">$body<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span> = (<span class=\"hljs-variable\">$response<\/span>.Content | ConvertFrom-Json)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span><\/small><\/span><\/p>\n<p data-start=\"1396\" data-end=\"1574\" data-is-last-node=\"\" data-is-only-node=\"\">Als je geen gebeurtenissen ontvangt, controleer dan of je in het afgelopen uur hebt ingelogd in 1Password. Als dat niet het geval is, probeer dan een paar keer in en uit te loggen &#8211; dit zou binnen 5 minuten enkele gebeurtenissen moeten genereren.<\/p>\n<figure id=\"attachment_2176\" aria-describedby=\"caption-attachment-2176\" style=\"width: 424px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2176\" src=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-4.webp\" alt=\"De eigenschappen van ons object.\" width=\"424\" height=\"46\" srcset=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-4.webp 424w, https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-4-300x33.webp 300w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><figcaption id=\"caption-attachment-2176\" class=\"wp-caption-text\">De eigenschappen van ons object.<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p data-start=\"49\" data-end=\"140\">Bij het inspecteren van het geretourneerde object komen we tot de volgende inzichten:<\/p>\n<ul>\n<li data-start=\"49\" data-end=\"140\">De respons bevat een cursor, die we kunnen gebruiken voor paginering.<\/li>\n<li data-start=\"49\" data-end=\"140\">De respons bevat een <code data-start=\"249\" data-end=\"259\">has_more<\/code>-vlag, die aangeeft of er meer gebeurtenissen beschikbaar zijn. Als de vlag True is, moeten we blijven verzoeken sturen totdat deze False wordt. Anders missen we mogelijk gebeurtenissen!<\/li>\n<li data-start=\"49\" data-end=\"140\">De daadwerkelijke gebeurtenissen bevinden zich onder de eigenschap <code data-start=\"542\" data-end=\"549\">items<\/code>.<\/li>\n<\/ul>\n<p data-start=\"556\" data-end=\"849\">Misschien vind je het nog wat verwarrend hoe paginering werkt\u2014dat vond ik ook toen ik er voor het eerst mee werkte. Als je dat nog niet hebt gedaan, log dan een paar keer in en uit bij 1Password. Dit genereert extra gebeurtenissen, zodat we een dataset hebben om doorheen te pagineren. Nu je extra gebeurtenissen hebt gegenereerd, gaan we het pagineringsysteem stap voor stap ontleden. We stellen de &#8220;limit&#8221; op onze cursor in op <code data-start=\"1047\" data-end=\"1050\">1<\/code>, wat betekent dat we per API-aanroep slechts 1 gebeurtenis terugkrijgen. Dit dwingt ons om meerdere verzoeken te sturen en zorgt ervoor dat we de paginering correct implementeren.<\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># Token \/ header definition here, see first script snippet<\/span><\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$lastHour<\/span> = (get-date).AddHours(-1).ToUniversalTime().ToString(<span class=\"hljs-string\">&#8220;yyyy-MM-ddTHH:mm:ssZ&#8221;<\/span>)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$body<\/span> = @{<span class=\"hljs-string\">&#8220;limit&#8221;<\/span> = 1; <span class=\"hljs-string\">&#8220;start_time&#8221;<\/span> = <span class=\"hljs-string\">&#8220;<span class=\"hljs-variable\">$lastHour<\/span>&#8220;<\/span>} | ConvertTo-Json<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\">### Getting signinattempts<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$uri<\/span> = <span class=\"hljs-string\">&#8220;https:\/\/events.1password.com\/api\/v1\/signinattempts&#8221;<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$response<\/span> = Invoke-WebRequest -Method Post -Uri <span class=\"hljs-variable\">$uri<\/span> -Headers <span class=\"hljs-variable\">$headers<\/span> -Body <span class=\"hljs-variable\">$body<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span> = (<span class=\"hljs-variable\">$response<\/span>.Content | ConvertFrom-Json)<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># printing the cursor. this will be a long string.<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.cursor<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-comment\">#printing the has_more flag. This is a boolean, and it&#8217;ll be True.<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.has_more<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># printing the single log entry which we&#8217;ve retrieved.<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.items<\/small><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Om het volgende logbestand op te halen, moeten we de cursor doorgeven die we hebben ontvangen van het vorige verzoek. Dit kunnen we doen door ons script uit te breiden, zodat het er als volgt uitziet:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># Token \/ header definition here, see first script snippet<\/span><\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$lastHour<\/span> = (get-date).AddHours(-1).ToUniversalTime().ToString(<span class=\"hljs-string\">&#8220;yyyy-MM-ddTHH:mm:ssZ&#8221;<\/span>)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$body<\/span> = @{<span class=\"hljs-string\">&#8220;limit&#8221;<\/span> = 1; <span class=\"hljs-string\">&#8220;start_time&#8221;<\/span> = <span class=\"hljs-string\">&#8220;<span class=\"hljs-variable\">$lastHour<\/span>&#8220;<\/span>} | ConvertTo-Json<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\">### Getting signinattempts<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$uri<\/span> = <span class=\"hljs-string\">&#8220;https:\/\/events.1password.com\/api\/v1\/signinattempts&#8221;<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$response<\/span> = Invoke-WebRequest -Method Post -Uri <span class=\"hljs-variable\">$uri<\/span> -Headers <span class=\"hljs-variable\">$headers<\/span> -Body <span class=\"hljs-variable\">$body<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span> = (<span class=\"hljs-variable\">$response<\/span>.Content | ConvertFrom-Json)<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># printing the cursor. this will be a long string.<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.cursor<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-comment\">#printing the has_more flag. This is a boolean, and it&#8217;ll be True.<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.has_more<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># printing the single log entry which we&#8217;ve retrieved.<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.items<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># Using the response&#8217;s cursor object to create our new request:<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$new_cursor<\/span> = <span class=\"hljs-variable\">$content<\/span>.cursor<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$new_body<\/span> = @{<span class=\"hljs-string\">&#8220;cursor&#8221;<\/span> = <span class=\"hljs-variable\">$new_cursor<\/span>;} | ConvertTo-Json<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$response<\/span> = Invoke-WebRequest -Method Post -Uri <span class=\"hljs-variable\">$uri<\/span> -Headers <span class=\"hljs-variable\">$headers<\/span> -Body <span class=\"hljs-variable\">$new_body<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span> = (<span class=\"hljs-variable\">$response<\/span>.Content | ConvertFrom-Json)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span>.items<\/small><\/span><\/p>\n<p>&nbsp;<\/p>\n<p data-start=\"0\" data-end=\"253\">Je zult zien dat je nu ook de tweede gebeurtenis hebt ontvangen, welke verschilt van de eerste. Dit script is natuurlijk nog geen effici\u00ebnte implementatie van paginering, maar door het stap voor stap op te bouwen, wordt het principe duidelijker. Hier is een meer elegante implementatie:<\/p>\n<p data-start=\"0\" data-end=\"253\"><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># Token \/ header definition here, see first script snippet<\/span><\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$lastHour<\/span> = (get-date).AddHours(-1).ToUniversalTime().ToString(<span class=\"hljs-string\">&#8220;yyyy-MM-ddTHH:mm:ssZ&#8221;<\/span>)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$body<\/span> = @{<span class=\"hljs-string\">&#8220;limit&#8221;<\/span> = 1; <span class=\"hljs-string\">&#8220;start_time&#8221;<\/span> = <span class=\"hljs-string\">&#8220;<span class=\"hljs-variable\">$lastHour<\/span>&#8220;<\/span>} | ConvertTo-Json<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$uri<\/span> = <span class=\"hljs-string\">&#8220;https:\/\/events.1password.com\/api\/v1\/signinattempts&#8221;<\/span><\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\">### Getting signinattempts<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$collected_events<\/span> = @()<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># has_more is true untill proven otherwise<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$has_more<\/span> = <span class=\"hljs-variable\">$true<\/span><\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-keyword\">while<\/span>(<span class=\"hljs-variable\">$has_more<\/span>){<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small>Write-Host <span class=\"hljs-string\">&#8220;Getting events&#8230;&#8221;<\/span> -ForegroundColor Yellow<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$response<\/span> = Invoke-WebRequest -Method Post -Uri <span class=\"hljs-variable\">$uri<\/span> -Headers <span class=\"hljs-variable\">$headers<\/span> -Body <span class=\"hljs-variable\">$body<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$content<\/span> = (<span class=\"hljs-variable\">$response<\/span>.Content | ConvertFrom-Json)<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$collected_events<\/span> += <span class=\"hljs-variable\">$content<\/span>.items<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$body<\/span> = @{<span class=\"hljs-string\">&#8220;cursor&#8221;<\/span> = <span class=\"hljs-variable\">$content<\/span>.cursor;} | ConvertTo-Json<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$has_more<\/span> = <span class=\"hljs-variable\">$content<\/span>.has_more<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small>}<\/small><\/span><\/p>\n<p><span style=\"color: #999999;\"><small><span class=\"hljs-comment\"># print all events<\/span><\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small>Write-Host <span class=\"hljs-string\">&#8220;Collected <span class=\"hljs-subst\">$($collected_events.Count)<\/span> events!&#8221;<\/span> -ForegroundColor Green<\/small><\/span><br \/>\n<span style=\"color: #999999;\"><small><span class=\"hljs-variable\">$collected_events<\/span><\/small><\/span><\/p>\n<p>&nbsp;<\/p>\n<p data-start=\"0\" data-end=\"253\">Afhankelijk van het aantal beschikbare gebeurtenissen, wordt er iets weergegeven zoals in de onderstaande afbeelding.<\/p>\n<figure id=\"attachment_2177\" aria-describedby=\"caption-attachment-2177\" style=\"width: 148px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2177\" src=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Blog-8.webp\" alt=\"Paginering in actie\" width=\"148\" height=\"55\" \/><figcaption id=\"caption-attachment-2177\" class=\"wp-caption-text\">Paginering in actie<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<h2 data-start=\"0\" data-end=\"19\">Conclusie<\/h2>\n<p data-start=\"21\" data-end=\"125\">We kunnen nu met zekerheid stellen dat we een diepgaand begrip van de API hebben. We weten ondertussen:<\/p>\n<ul>\n<li data-start=\"21\" data-end=\"125\">Hoe we authenticatieheaders moeten implementeren.<\/li>\n<li data-start=\"21\" data-end=\"125\">Welke eindpunten we moeten aanroepen.<\/li>\n<li data-start=\"21\" data-end=\"125\">Paginering correct toe te passen.<\/li>\n<li data-start=\"21\" data-end=\"125\">Hoe de API-respons eruitziet.<\/li>\n<\/ul>\n<p data-start=\"308\" data-end=\"513\">Het belangrijkste is dat we twee essenti\u00eble invoervelden hebben gedefinieerd die per gebruiker zullen verschillen:<\/p>\n<ul>\n<li data-start=\"308\" data-end=\"513\">De API-token.<\/li>\n<li data-start=\"308\" data-end=\"513\">De basis-URL (afhankelijk van het type licentie).<\/li>\n<\/ul>\n<p data-start=\"515\" data-end=\"613\">Dit betekent dat we klaar zijn om te beginnen met het bouwen van onze codeless connector!\u00a0In de volgende blog laat ik je zien hoe we deze API-kennis vertalen naar een CCP-GUI, zodat we de benodigde gebruikersinvoer kunnen verzamelen. Zodra dat op zijn plaats staat, kunnen we verder met het bouwen van de logica van onze connector.<\/p>\n<p data-start=\"515\" data-end=\"613\">\n<p data-start=\"515\" data-end=\"613\">Klik hier om verder te lezen: <a href=\"https:\/\/masero.nl\/en\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-2\/\">Een Codeless Connector Platform data-connector bouwen: deel 2<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>In deze blogserie neem ik je stap voor stap mee in het proces om je eigen Codeless Connector Platform (CCP)<\/p>","protected":false},"author":5,"featured_media":2179,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2172","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Een Codeless Connector Platform data-connector bouwen: deel 1<\/title>\n<meta name=\"description\" content=\"In deze blogserie legt Tim uit hoe je je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel bouwt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/masero.nl\/en\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Een Codeless Connector Platform data-connector bouwen: deel 1\" \/>\n<meta property=\"og:description\" content=\"In deze blogserie legt Tim uit hoe je je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel bouwt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/masero.nl\/en\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Masero\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-20T10:46:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-27T10:08:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Sentinel.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tim Groothuis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tim Groothuis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/\"},\"author\":{\"name\":\"Tim Groothuis\",\"@id\":\"https:\\\/\\\/masero.nl\\\/#\\\/schema\\\/person\\\/253f4280be6f54af76d51185ed3ff27d\"},\"headline\":\"Een Codeless Connector Platform (CCP) data-connector bouwen: deel 1\",\"datePublished\":\"2025-03-20T10:46:45+00:00\",\"dateModified\":\"2025-11-27T10:08:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/\"},\"wordCount\":1397,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/masero.nl\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Sentinel.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/\",\"url\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/\",\"name\":\"Een Codeless Connector Platform data-connector bouwen: deel 1\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/masero.nl\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Sentinel.png\",\"datePublished\":\"2025-03-20T10:46:45+00:00\",\"dateModified\":\"2025-11-27T10:08:53+00:00\",\"description\":\"In deze blogserie legt Tim uit hoe je je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel bouwt.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/masero.nl\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Sentinel.png\",\"contentUrl\":\"https:\\\/\\\/masero.nl\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/Sentinel.png\",\"width\":1000,\"height\":750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/masero.nl\\\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/masero.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Een Codeless Connector Platform (CCP) data-connector bouwen: deel 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/masero.nl\\\/#website\",\"url\":\"https:\\\/\\\/masero.nl\\\/\",\"name\":\"Masero\",\"description\":\"Cyber Security\",\"publisher\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/masero.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/masero.nl\\\/#organization\",\"name\":\"Masero\",\"url\":\"https:\\\/\\\/masero.nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/masero.nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/masero.nl\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/cropped-MSO003-Logo-RGB.png\",\"contentUrl\":\"https:\\\/\\\/masero.nl\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/cropped-MSO003-Logo-RGB.png\",\"width\":10019,\"height\":2840,\"caption\":\"Masero\"},\"image\":{\"@id\":\"https:\\\/\\\/masero.nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/masero.nl\\\/#\\\/schema\\\/person\\\/253f4280be6f54af76d51185ed3ff27d\",\"name\":\"Tim Groothuis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cdeb82b5b2b55957d1df149ba5c434975c414db80cca296043bcd96c540cba6?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cdeb82b5b2b55957d1df149ba5c434975c414db80cca296043bcd96c540cba6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cdeb82b5b2b55957d1df149ba5c434975c414db80cca296043bcd96c540cba6?s=96&d=mm&r=g\",\"caption\":\"Tim Groothuis\"},\"url\":\"https:\\\/\\\/masero.nl\\\/en\\\/author\\\/tim\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Een Codeless Connector Platform data-connector bouwen: deel 1","description":"In deze blogserie legt Tim uit hoe je je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel bouwt.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/masero.nl\/en\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/","og_locale":"en_GB","og_type":"article","og_title":"Een Codeless Connector Platform data-connector bouwen: deel 1","og_description":"In deze blogserie legt Tim uit hoe je je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel bouwt.","og_url":"https:\/\/masero.nl\/en\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/","og_site_name":"Masero","article_published_time":"2025-03-20T10:46:45+00:00","article_modified_time":"2025-11-27T10:08:53+00:00","og_image":[{"width":1000,"height":750,"url":"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Sentinel.png","type":"image\/png"}],"author":"Tim Groothuis","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tim Groothuis","Estimated reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#article","isPartOf":{"@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/"},"author":{"name":"Tim Groothuis","@id":"https:\/\/masero.nl\/#\/schema\/person\/253f4280be6f54af76d51185ed3ff27d"},"headline":"Een Codeless Connector Platform (CCP) data-connector bouwen: deel 1","datePublished":"2025-03-20T10:46:45+00:00","dateModified":"2025-11-27T10:08:53+00:00","mainEntityOfPage":{"@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/"},"wordCount":1397,"commentCount":0,"publisher":{"@id":"https:\/\/masero.nl\/#organization"},"image":{"@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#primaryimage"},"thumbnailUrl":"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Sentinel.png","articleSection":["Blog"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/","url":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/","name":"Een Codeless Connector Platform data-connector bouwen: deel 1","isPartOf":{"@id":"https:\/\/masero.nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#primaryimage"},"image":{"@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#primaryimage"},"thumbnailUrl":"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Sentinel.png","datePublished":"2025-03-20T10:46:45+00:00","dateModified":"2025-11-27T10:08:53+00:00","description":"In deze blogserie legt Tim uit hoe je je eigen Codeless Connector Platform (CCP) data-connector voor Microsoft Sentinel bouwt.","breadcrumb":{"@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#primaryimage","url":"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Sentinel.png","contentUrl":"https:\/\/masero.nl\/wp-content\/uploads\/2025\/03\/Sentinel.png","width":1000,"height":750},{"@type":"BreadcrumbList","@id":"https:\/\/masero.nl\/een-codeless-connector-platform-ccp-data-connector-bouwen-deel-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/masero.nl\/"},{"@type":"ListItem","position":2,"name":"Een Codeless Connector Platform (CCP) data-connector bouwen: deel 1"}]},{"@type":"WebSite","@id":"https:\/\/masero.nl\/#website","url":"https:\/\/masero.nl\/","name":"Masero","description":"Cyber Security","publisher":{"@id":"https:\/\/masero.nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/masero.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/masero.nl\/#organization","name":"Masero","url":"https:\/\/masero.nl\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/masero.nl\/#\/schema\/logo\/image\/","url":"https:\/\/masero.nl\/wp-content\/uploads\/2023\/01\/cropped-MSO003-Logo-RGB.png","contentUrl":"https:\/\/masero.nl\/wp-content\/uploads\/2023\/01\/cropped-MSO003-Logo-RGB.png","width":10019,"height":2840,"caption":"Masero"},"image":{"@id":"https:\/\/masero.nl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/masero.nl\/#\/schema\/person\/253f4280be6f54af76d51185ed3ff27d","name":"Tim Groothuis","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9cdeb82b5b2b55957d1df149ba5c434975c414db80cca296043bcd96c540cba6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9cdeb82b5b2b55957d1df149ba5c434975c414db80cca296043bcd96c540cba6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9cdeb82b5b2b55957d1df149ba5c434975c414db80cca296043bcd96c540cba6?s=96&d=mm&r=g","caption":"Tim Groothuis"},"url":"https:\/\/masero.nl\/en\/author\/tim\/"}]}},"_links":{"self":[{"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/posts\/2172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/comments?post=2172"}],"version-history":[{"count":9,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/posts\/2172\/revisions"}],"predecessor-version":[{"id":3283,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/posts\/2172\/revisions\/3283"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/media\/2179"}],"wp:attachment":[{"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/media?parent=2172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/categories?post=2172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/masero.nl\/en\/wp-json\/wp\/v2\/tags?post=2172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}