{"id":65598,"date":"2026-05-20T18:37:01","date_gmt":"2026-05-20T16:37:01","guid":{"rendered":"https:\/\/kinsta.com\/nl\/?p=65598&#038;preview=true&#038;preview_id=65598"},"modified":"2026-05-21T08:43:45","modified_gmt":"2026-05-21T06:43:45","slug":"automatiseren-testomgevingen-jira-kinsta-api","status":"publish","type":"post","link":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/","title":{"rendered":"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API"},"content":{"rendered":"<p>Elke sprint begint met een bord vol tickets en een team dat ergens schoon moet kunnen werken. Voor bureaus die WordPress projecten voor klanten uitvoeren met cycli van twee weken, betekent dit dat ze een <a href=\"https:\/\/kinsta.com\/nl\/docs\/wordpress-hosting\/testomgeving\/\">testomgeving<\/a> in MyKinsta moeten cre\u00ebren voordat het eerste ticket wordt opgehaald.<\/p>\n<p>Dit kost een paar minuten, maar het is het soort taak dat door de mazen van het net valt omdat het zo weinig lijkt.<\/p>\n<p>De <a href=\"https:\/\/kinsta.com\/nl\/docs\/kinsta-api\/\">Kinsta API<\/a> kan die stap voor je weghalen. Wanneer een sprint start in <a href=\"https:\/\/www.atlassian.com\/software\/jira\" target=\"_blank\" rel=\"noopener noreferrer\">Jira<\/a>, kun je een webhook instellen die een event in middleware triggert, die vervolgens de payload leest, deze koppelt aan een Kinsta site en de API aanroept om een nieuwe testomgeving te maken.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Waarom bureaus de provisioning van omgevingen zouden moeten automatiseren<\/h2>\n<p>Een omgeving aanmaken na het plannen van een sprint betekent MyKinsta openen, de juiste klantsite vinden uit een lijst van tientallen, een omgeving aanmaken en een naam geven en dan terugkeren naar <a href=\"https:\/\/www.atlassian.com\/software\/jira\" target=\"_blank\" rel=\"noopener noreferrer\">Jira<\/a>. Hoewel dit niet ingewikkeld is, moet het wel op het juiste moment gebeuren, elke keer weer, en voor elk klantproject dat loopt.<\/p>\n<p>Als je dit overslaat, begint een team te werken in de omgeving van de laatste sprint. Van daaruit stapelen de wijzigingen zich op en als er een bug is, lijkt het isoleren ervan meer op archeologie dan op debuggen.<\/p>\n<h2>Wat je nodig hebt voordat je begint<\/h2>\n<p>Om de Kinsta API en Jira te verbinden, heb je een Kinsta-account nodig met ten minste \u00e9\u00e9n WordPress site in een bestaande omgeving, een Jira Cloud account met beheerderstoegang om webhooks te configureren en <a href=\"https:\/\/kinsta.com\/knowledgebase\/what-is-node-js\/\">Node.js<\/a> lokaal ge\u00efnstalleerd.<\/p>\n<p>Om je te authenticeren met de Kinsta API, navigeer je naar <strong>[Jouw bedrijf]<\/strong> &gt; <strong>Bedrijfsinstellingen<\/strong> &gt; <strong>API-sleutels<\/strong> in <a href=\"https:\/\/my.kinsta.com\/?lang=nl\">MyKinsta<\/a> en klik je op <strong>API-sleutel aanmaken<\/strong>.<\/p>\n<figure id=\"attachment_208873\" aria-describedby=\"caption-attachment-208873\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208873 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/api-keys-1.png\" alt=\"Het MyKinsta-dashboard met het scherm API sleutels, waarop twee bestaande API sleutelszichtbaar zijn, samen met een knop om een nieuwe aan te maken.\" width=\"1200\" height=\"441\"><figcaption id=\"caption-attachment-208873\" class=\"wp-caption-text\">Het MyKinsta dashboard met de API sleutels.<\/figcaption><\/figure>\n<p>Geef de sleutel vervolgens een naam, stel een vervaldatum in en klik op <strong>Genereer<\/strong>. De sleutel wordt eenmalig weergegeven, dus noteer hem voordat je verder gaat.<\/p>\n<p>Je zet deze in een <code>.env<\/code> bestand in de project root naast je Kinsta bedrijfs-ID, die je kunt vinden onder <strong>Bedrijfsinstellingen<\/strong> &gt; <strong>Factureringsgegevens<\/strong>:<\/p>\n<pre><code class=\"language-bash\">KINSTA_API_KEY=your_api_key_here\nKINSTA_COMPANY_ID=your_company_id_here<\/code><\/pre>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Het toegangsniveau van een Kinsta API-sleutel en de rol die deze sleutel heeft aangemaakt komen overeen. Sleutels op ontwikkelaarsniveau hebben dus beperktere rechten dan sleutels die zijn gegenereerd door bedrijfseigenaren of admins. Dit is het eerste wat je moet controleren als een verzoek een toestemmingsfout oplevert.<\/p>\n<\/aside>\n\n<h3>Je Jira en Kinsta site ID&#8217;s ophalen<\/h3>\n<p>Je hebt de Kinsta site ID nodig voor elk klantproject in de automatisering. Dit is een UUID die Kinsta toekent bij het aanmaken van de site. Het verschijnt in de MyKinsta URL wanneer je een site opent of door <code>GET \/sites<\/code> aan te roepen zodra je API-sleutel is ingesteld:<\/p>\n<pre><code class=\"language-bash\">https:\/\/my.kinsta.com\/sites\/details\/fbab4927-e354-4044-b226-29ac0fbd20ca\/\u2026<\/code><\/pre>\n<p>Aan de Jira-kant heb je de numerieke board-ID nodig voor elk project dat je wilt verbinden. Deze verschijnt in de URL (hier als <code>2<\/code>):<\/p>\n<pre><code class=\"language-bash\">https:\/\/your-domain.atlassian.net\/jira\/software\/projects\/SCRUM\/boards\/2<\/code><\/pre>\n<p>Dit is dezelfde waarde die Jira opneemt in de <code>sprint_started<\/code> webhook payload als <code>originBoardId<\/code>. De mapping van board ID&#8217;s naar site ID&#8217;s staat in je <code>.env<\/code> bestand:<\/p>\n<pre><code class=\"language-bash\">BOARD_ID_CLIENT_A=2\nSITE_ID_CLIENT_A=fbab4927-e354-4044-b226-29ac0fbd20ca\nBOARD_ID_CLIENT_B=5\nSITE_ID_CLIENT_B=44b5a6d1-c83f-4b0e-9a1c-2e7dbc903fa1<\/code><\/pre>\n<p>Voor lokale ontwikkeling kan Jira ook niet direct <code>localhost<\/code> bereiken. <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ngrok<\/a> kan worden gebruikt om een lokale poort bloot te stellen aan het internet met een tijdelijke openbare URL, die je kunt gebruiken als je webhook endpoint tijdens de ontwikkeling. Zodra je een ingezet middleware adres hebt, kun je het vervangen.<\/p>\n<h2>Zo automatiseer je de sprintomgeving provisioning met Jira en de Kinsta API<\/h2>\n<p>Deze integratie gaat over twee systemen. In Jira vuurt een webhook wanneer een sprint start en levert de payload van de event aan je middleware. Voor Kinsta leest de middleware de board-ID uit de payload, zet deze om in een site-ID met behulp van de config map en roept de Kinsta API aan om een gewone testomgeving aan te maken met de naam van de sprint.<\/p>\n<h3>1. Registreer een Jira webhook voor sprintevents<\/h3>\n<p>Jira Cloud geeft je twee manieren om een webhook te registreren. De eenvoudigste optie voor de meeste teams is via de Jira UI. De optie <b>Settings <\/b>&gt; <strong>System<\/strong> staat in het menu rechtsboven:<\/p>\n<figure id=\"attachment_208877\" aria-describedby=\"caption-attachment-208877\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208877 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/system-settings.png\" alt=\"De optie Jira Cloud System in het menu met algemene instellingen van de Jira-interface.\" width=\"1200\" height=\"575\"><figcaption id=\"caption-attachment-208877\" class=\"wp-caption-text\">De Jira Cloud Systeem optie binnen de algemene instellingen.<\/figcaption><\/figure>\n<p>Kies van daaruit <b>Advanced <\/b>&gt; <strong>WebHooks<\/strong> en klik vervolgens op <strong>Create a webhook<\/strong>:<\/p>\n<figure id=\"attachment_208874\" aria-describedby=\"caption-attachment-208874\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208874 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/create-webhook-button.png\" alt=\"WebHooks sectie met een Maak een WebHook knop rechtsboven.\" width=\"1200\" height=\"315\"><figcaption id=\"caption-attachment-208874\" class=\"wp-caption-text\">WebHooks sectie met een Maak een WebHook knop rechtsboven.<\/figcaption><\/figure>\n<p>Voer hier een naam in, plak een middleware URL met <code>\/sprint<\/code> toegevoegd (een dummy optie is prima voor nu) en selecteer onder <strong>Events<\/strong>, dan <strong>Sprint<\/strong> &gt; <strong>started<\/strong>. Dit maakt een admin webhook aan, die vuurt voor elke <code>sprint_started<\/code> event in je hele Jira instance.<\/p>\n<figure id=\"attachment_208875\" aria-describedby=\"caption-attachment-208875\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208875 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/create-webhook-jira.png\" alt=\"Het formulier voor het aanmaken van een Jira-webhook, met het naamveld, URL-veld en de sectie Events waarin Sprint started is geselecteerd.\" width=\"1200\" height=\"646\"><figcaption id=\"caption-attachment-208875\" class=\"wp-caption-text\">Het Jira webhook aanmaakformulier.<\/figcaption><\/figure>\n<p>De tweede optie is de REST API, met <code>POST \/rest\/webhooks\/1.0\/webhook<\/code>. Dit werkt goed als de registratie van webhooks deel uitmaakt van een implementatiescript:<\/p>\n<pre><code class=\"language-bash\">curl -X POST \\\n\u00a0\u00a0https:\/\/your-domain.atlassian.net\/rest\/webhooks\/1.0\/webhook \\\n\u00a0\u00a0-u your-email@example.com:your-api-token \\\n\u00a0\u00a0-H 'Content-Type: application\/json' \\\n\u00a0\u00a0-d '{\n\u00a0\u00a0\u00a0\u00a0\"name\": \"Sprint provisioning webhook\",\n\u00a0\u00a0\u00a0\u00a0\"url\": \"https:\/\/your-middleware-url.com\/sprint\",\n\u00a0\u00a0\u00a0\u00a0\"events\": [\"sprint_started\"],\n\u00a0\u00a0\u00a0\u00a0\"filters\": {},\n\u00a0\u00a0\u00a0\u00a0\"excludeBody\": false\n\u00a0\u00a0}'<\/code><\/pre>\n<p>Het aanroepen van <code>PUT \/rest\/webhooks\/1.0\/webhook\/refresh<\/code> voegt een verlenging toe aan de 30-daagse verlooptijd voor de webhook. Wanneer Jira <code>sprint_started<\/code> afvuurt, komt de payload aan op je endpoint als een JSON POST met de volgende structuur:<\/p>\n<pre><code class=\"language-json\">{\n\u00a0\u00a0\"timestamp\": 1705431600000,\n\u00a0\u00a0\"webhookEvent\": \"sprint_started\",\n\u00a0\u00a0\"sprint\": {\n\u00a0\u00a0\u00a0\u00a0\"id\": 15,\n\u00a0\u00a0\u00a0\u00a0\"self\": \"https:\/\/your-domain.atlassian.net\/rest\/agile\/1.0\/sprint\/15\",\n\u00a0\u00a0\u00a0\u00a0\"state\": \"active\",\n\u00a0\u00a0\u00a0\u00a0\"name\": \"Sprint 12\",\n\u00a0\u00a0\u00a0\u00a0\"startDate\": \"2026-02-02T00:00:00.000Z\",\n\u00a0\u00a0\u00a0\u00a0\"endDate\": \"2026-02-27T00:00:00.000Z\",\n\u00a0\u00a0\u00a0\u00a0\"originBoardId\": 2,\n\u00a0\u00a0\u00a0\u00a0\"goal\": \"Complete payment processing improvements\"\n\u00a0\u00a0}\n}<\/code><\/pre>\n<p>De middleware gebruikt <code>sprint.originBoardId<\/code> om de Kinsta site ID op te zoeken en <code>sprint.name<\/code> om de nieuwe omgeving een naam te geven: elke <code>sprint_started<\/code> event binnen je Jira instance bereikt het endpoint. De board ID lookup in de config map scoopt de automatisering naar het juiste klantproject en negeert al het andere.<\/p>\n<h3>2. Bouw het middleware endpoint<\/h3>\n<p>Met de webhook op zijn plaats moet je nu een nieuw Node.js project initialiseren en <a href=\"https:\/\/kinsta.com\/knowledgebase\/what-is-express-js\/\">Express.js<\/a> installeren naast <code>dotenv<\/code>:<\/p>\n<pre><code class=\"language-bash\">npm init -y\nnpm install express dotenv<\/code><\/pre>\n<p><code>express<\/code> zorgt voor de routing en request parsing, terwijl <code>dotenv<\/code> je <code>.env<\/code> bestand laadt. Je moet <code>app.js<\/code> maken om de server in te stellen. Hier is het complete bestand:<\/p>\n<pre><code class=\"language-javascript\">\/\/ app.js\nconst express = require('express');\nconst crypto = require('crypto');\nrequire('dotenv').config();\nconst app = express();\n\n\/\/ Raw body parser on the \/sprint route enables HMAC signature verification\napp.use('\/sprint', express.raw({ type: 'application\/json' }));\napp.use(express.json());\n\nconst KinstaAPIUrl = 'https:\/\/api.kinsta.com\/v2';\nconst headers = {\n\u00a0\u00a0'Content-Type': 'application\/json',\n\u00a0\u00a0Authorization: `Bearer ${process.env.KINSTA_API_KEY}`\n};\n\n\/\/ Board ID to Kinsta site ID config map\nconst siteConfig = {\n\u00a0\u00a0[process.env.BOARD_ID_CLIENT_A]: process.env.SITE_ID_CLIENT_A,\n\u00a0\u00a0[process.env.BOARD_ID_CLIENT_B]: process.env.SITE_ID_CLIENT_B,\n};\n\nfunction verifyJiraSignature(req) {\n\u00a0\u00a0const signature = req.headers['x-hub-signature'];\n\u00a0\u00a0const secret = process.env.JIRA_WEBHOOK_SECRET;\n\u00a0\u00a0if (!signature || !secret) return false;\n\u00a0\u00a0const expected = 'sha256=' + crypto\n\u00a0\u00a0\u00a0\u00a0.createHmac('sha256', secret)\n\u00a0\u00a0\u00a0\u00a0.update(req.body)\n\u00a0\u00a0\u00a0\u00a0.digest('hex');\n\u00a0\u00a0return crypto.timingSafeEqual(\n\u00a0\u00a0\u00a0\u00a0Buffer.from(signature),\n\u00a0\u00a0\u00a0\u00a0Buffer.from(expected)\n\u00a0\u00a0);\n}\n\napp.post('\/sprint', async (req, res) =&gt; {\n\u00a0\u00a0if (!verifyJiraSignature(req)) {\n\u00a0\u00a0\u00a0\u00a0return res.status(401).json({ message: 'Invalid signature' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const body = JSON.parse(req.body);\n\u00a0\u00a0const { webhookEvent, sprint } = body;\n\n\u00a0\u00a0if (webhookEvent !== 'sprint_started') {\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Event ignored' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const boardId = String(sprint.originBoardId);\n\u00a0\u00a0const siteId = siteConfig[boardId];\n\n\u00a0\u00a0if (!siteId) {\n\u00a0\u00a0\u00a0\u00a0console.log(`No site configured for board ${boardId}`);\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Board not mapped' });\n\u00a0\u00a0}\n\n\u00a0\u00a0\/\/ Kinsta API calls added in the steps below\n\u00a0\u00a0res.status(200).json({ message: 'Received' });\n});\n\napp.listen(3000, () =&gt; console.log('Middleware running on port 3000'));<\/code><\/pre>\n<p>Om het endpoint te beschermen, genereer je een geheime sleutel tijdens het instellen van de webhook. Jira maakt dit optioneel tijdens het instellen, maar het is praktisch essentieel voor een veilige instance.<\/p>\n<h4>Beveiliging van het endpoint<\/h4>\n<p>Jira ondertekent elke payload en neemt het resultaat op in de <code>X-Hub-Signature<\/code> header als <code>sha256=&lt;hash&gt;<\/code>. Je voegt het geheim toe aan je <code>.env<\/code> bestand naast de andere referenties:<\/p>\n<pre><code class=\"language-bash\">JIRA_WEBHOOK_SECRET=your_webhook_secret_here<\/code><\/pre>\n<p>De verificatiefunctie leeft in <strong>app.js<\/strong> en gebruikt de ingebouwde <code>cryptomodule<\/code> van Node. Het leest de signature uit de request header, berekent de verwachte HMAC tegen de raw request body en gebruikt <code>timingSafeEqual<\/code> om ze te vergelijken op een manier die timing aanvallen voorkomt. Hier is het relevante gedeelte van app.js:<\/p>\n<pre><code class=\"language-javascript\">const crypto = require('crypto');\n\nfunction verifyJiraSignature(req) {\n\u00a0\u00a0const signature = req.headers['x-hub-signature'];\n\u00a0\u00a0const secret = process.env.JIRA_WEBHOOK_SECRET;\n\u00a0\u00a0if (!signature || !secret) return false;\n\u00a0\u00a0const expected = 'sha256=' + crypto\n\u00a0\u00a0\u00a0\u00a0.createHmac('sha256', secret)\n\u00a0\u00a0\u00a0\u00a0.update(req.body)\n\u00a0\u00a0\u00a0\u00a0.digest('hex');\n\u00a0\u00a0return crypto.timingSafeEqual(\n\u00a0\u00a0\u00a0\u00a0Buffer.from(signature),\n\u00a0\u00a0\u00a0\u00a0Buffer.from(expected)\n\u00a0\u00a0);\n}<\/code><\/pre>\n<p>Deze functie wordt als eerste aangeroepen in de <code>POST \/sprint<\/code> routeafhandeling. Als de verificatie mislukt, retourneert de middleware onmiddellijk <code>401<\/code> en wordt er verder niets uitgevoerd:<\/p>\n<pre><code class=\"language-javascript\">app.post('\/sprint', async (req, res) =&gt; {\n\u00a0\u00a0if (!verifyJiraSignature(req)) {\n\u00a0\u00a0\u00a0\u00a0return res.status(401).json({ message: 'Invalid signature' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const body = JSON.parse(req.body);\n\u00a0\u00a0\/\/ \u2026rest of the handler\n});<\/code><\/pre>\n<p>De route gebruikt <code>express.raw()<\/code> op het <code>\/sprint<\/code> pad omdat <code>verifyJiraSignature<\/code> dit nodig heeft om de HMAC te berekenen. Zodra de verificatie geslaagd is, geeft <code>JSON.parse(req.body)<\/code> hetzelfde resultaat als <code>express.json()<\/code> zou hebben.<\/p>\n<h3>3. Authenticeer met de Kinsta API en haal site-omgevingen op<\/h3>\n<p>Alle verzoeken aan de Kinsta API maken gebruik van Bearer token authenticatie: de <code>headers<\/code> constante in <code>app.js<\/code> handelt dat af voor elk verzoek in de applicatie. De regel <code>require('dotenv').config()<\/code> bovenaan zorgt ervoor dat de sleutel wordt geladen vanuit <code>.env<\/code> voordat er iets anders wordt uitgevoerd, dus het verschijnt nooit in de broncode zelf.<\/p>\n<p>Kinsta gebruikt omgeving ID&#8217;s in plaats van site ID&#8217;s voor het provisioning endpoint, dus je moet een <code>getEnvironmentId<\/code> functie toevoegen onder de <code>headers<\/code> constante:<\/p>\n<pre><code class=\"language-javascript\">const getEnvironmentId = async (siteId) =&gt; {\n\u00a0\u00a0const resp = await fetch(\n\u00a0\u00a0\u00a0\u00a0`${KinstaAPIUrl}\/sites\/${siteId}\/environments`,\n\u00a0\u00a0\u00a0\u00a0{ method: 'GET', headers }\n\u00a0\u00a0);\n\u00a0\u00a0const data = await resp.json();\n\u00a0\u00a0return data.site.environments[0].id;\n};<\/code><\/pre>\n<p>Dit roept <code>GET \/sites\/{siteId}\/omgevingen<\/code> aan en retourneert de ID van de eerste (d.w.z. live) omgeving in de respons. Als een site meerdere omgevingen gebruikt en je moet je richten op een specifieke, match dan met de omgevingsnaam in plaats van het eerste resultaat te nemen.<\/p>\n<h3>4. Maak een standaard testomgeving met de Kinsta API<\/h3>\n<p>Met de site- en omgevings-ID&#8217;s in kannen en kruiken, roept de middleware <code>POST \/sites\/{siteId}\/environments\/plain<\/code> aan om de sprintomgeving te maken. Je doet dit via een functie <code>createSprintEnvironment<\/code> onder <code>getEnvironmentId<\/code>:<\/p>\n<pre><code class=\"language-javascript\">const createSprintEnvironment = async (siteId, sprintName) =&gt; {\n\u00a0\u00a0const resp = await fetch(\n\u00a0\u00a0\u00a0\u00a0`${KinstaAPIUrl}\/sites\/${siteId}\/environments\/plain`,\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0method: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0headers,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: JSON.stringify({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0display_name: sprintName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0is_premium: false\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0);\n\u00a0\u00a0const data = await resp.json();\n\u00a0\u00a0return data;\n};<\/code><\/pre>\n<p><code>display_name<\/code> verschijnt in MyKinsta, terwijl het rechtstreeks gebruik van <code>sprint.name<\/code> uit de Jira payload betekent dat elke omgeving in het dashboard overeenkomt met de sprint waar deze bij hoort. De flag <code>is_premium<\/code> bepaalt of Kinsta dit als een standaard of <a href=\"https:\/\/kinsta.com\/nl\/blog\/kinsta-testomgevingen\/\">premium testomgeving<\/a> beschouwt. Als deze op <code>false<\/code> wordt gezet, wordt een standaardomgeving gecre\u00eberd.<\/p>\n<p>Wanneer het verzoek Kinsta bereikt, retourneert het <code>202 Accepted<\/code> met een <code>operation_id<\/code> in plaats van een voltooide omgeving:<\/p>\n<pre><code class=\"language-json\">{\n\u00a0\u00a0\"operation_id\": \"environments:add-plain-54fb80af-576c-4fdc-ba4f-b596c83f15a1\",\n\u00a0\u00a0\"message\": \"Adding plain environment in progress\",\n\u00a0\u00a0\"status\": 202\n}<\/code><\/pre>\n<p>Kinsta&#8217;s <code>async<\/code> verwerking voorkomt een geblokkeerde request thread terwijl de provisioning wordt voltooid. De <code>operation_id<\/code> is wat je doorgeeft aan het endpoint om de voortgang bij te houden. Werk vervolgens de <code>POST \/sprint<\/code> route bij om beide functies achter elkaar aan te roepen:<\/p>\n<pre><code class=\"language-javascript\">app.post('\/sprint', async (req, res) =&gt; {\n\u00a0\u00a0if (!verifyJiraSignature(req)) {\n\u00a0\u00a0\u00a0\u00a0return res.status(401).json({ message: 'Invalid signature' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const body = JSON.parse(req.body);\n\u00a0\u00a0const { webhookEvent, sprint } = body;\n\n\u00a0\u00a0if (webhookEvent !== 'sprint_started') {\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Event ignored' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const boardId = String(sprint.originBoardId);\n\u00a0\u00a0const siteId = siteConfig[boardId];\n\n\u00a0\u00a0if (!siteId) {\n\u00a0\u00a0\u00a0\u00a0console.log(`No site configured for board ${boardId}`);\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Board not mapped' });\n\u00a0\u00a0}\ntry {\n\u00a0\u00a0\u00a0\u00a0const envId = await getEnvironmentId(siteId);\n\u00a0\u00a0\u00a0\u00a0const result = await createSprintEnvironment(siteId, sprint.name);\n\u00a0\u00a0\u00a0\u00a0res.status(200).json(result);\n\u00a0\u00a0} catch (err) {\n\u00a0\u00a0\u00a0\u00a0console.error(err);\n\u00a0\u00a0\u00a0\u00a0res.status(500).json({ message: 'Environment creation failed' });\n\u00a0\u00a0}\n});<\/code><\/pre>\n<p>Het gebruik van het <code>try<\/code> block is schoner dan vertrouwen op meerdere <code>if<\/code> statements. Houd de verificatie van de Jira signature echter bovenaan het bestand, omdat deze v\u00f3\u00f3r alle andere code moet worden uitgevoerd.<\/p>\n<h3>5. Controleer de status van de operatie en bevestig de provisioning<\/h3>\n<p>Om de voltooiing te volgen, peil je <code>GET \/operations\/{operation_id}<\/code> totdat de status <code>200<\/code> is met behulp van een <code>pollOperation<\/code>-functie onder <code>createSprintEnvironment<\/code>:<\/p>\n<pre><code class=\"language-javascript\">const pollOperation = async (operationId, intervalMs = 5000, maxAttempts = 12) =&gt; {\n\u00a0\u00a0for (let attempt = 0; attempt &lt; maxAttempts; attempt++) {\n\u00a0\u00a0\u00a0\u00a0await new Promise(resolve =&gt; setTimeout(resolve, intervalMs));\n\u00a0\u00a0\u00a0\u00a0const resp = await fetch(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0`${KinstaAPIUrl}\/operations\/${operationId}`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ method: 'GET', headers }\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0const data = await resp.json();\n\u00a0\u00a0\u00a0\u00a0if (data.status === 200) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(`Environment ready: ${operationId}`);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return data;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0if (data.status &gt;= 400) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw new Error(`Operation failed: ${data.message}`);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0}\n\u00a0\u00a0throw new Error('Operation timed out after maximum attempts');\n};<\/code><\/pre>\n<p>De loop wacht vijf seconden tussen elke poging en bevat maximaal een minuut aan provisioningtijd. Terwijl <code>200<\/code> de voltooiing aangeeft, geeft elke <code>4xx<\/code> status aan dat het onderzoek is mislukt.<\/p>\n<figure id=\"attachment_208876\" aria-describedby=\"caption-attachment-208876\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208876 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/mykinsta-environments.png\" alt=\"Het MyKinsta-dashboard met de omgevingenlijst van een WordPress site, waarbij een eenvoudige testomgeving met sprintnaam zichtbaar is naast de live omgeving.\" width=\"1200\" height=\"442\"><figcaption id=\"caption-attachment-208876\" class=\"wp-caption-text\">Het MyKinsta dashboard met de omgevingenlijst voor een WordPress site.<\/figcaption><\/figure>\n<p>Als je dit allemaal uitvoert met <code>node app.js<\/code> en een sprint start in Jira, zou de omgeving binnen een minuut of twee in MyKinsta moeten verschijnen.<\/p>\n<h2>Sprint met je bureau voorbij de concurrentie<\/h2>\n<p>Deze integratie zorgt voor een schone, gelabelde testomgeving binnen MyKinsta op basis van het starten van een sprint in Jira. De webhook gaat af, de middleware zet de board-ID om naar een site, de Kinsta API regelt de rest en het team haalt hun tickets op met een omgeving die al op hen wacht.<\/p>\n<p>Als de middleware klaar is om live te gaan, is <a href=\"https:\/\/sevalla.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sevalla<\/a> een eenvoudig implementatiedoel. Je pusht het project naar een Git provider, verbindt de repo, voegt de omgevingsvariabelen toe en werkt de Jira webhook URL bij naar het live adres.<\/p>\n<p>Bovendien is het <a href=\"https:\/\/kinsta.com\/nl\/agency-partner-programma\/\">Agency Partner Programma<\/a> van Kinsta ideaal voor bureaus die meerdere klantprojecten beheren. Het geeft je toegewijde ondersteuning, co-marketingmogelijkheden en het soort infrastructuurpartnerschap dat de automatiseringslaag ondersteunt die je bouwt bovenop de Kinsta API.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Elke sprint begint met een bord vol tickets en een team dat ergens schoon moet kunnen werken. Voor bureaus die WordPress projecten voor klanten uitvoeren met &#8230;<\/p>\n","protected":false},"author":287,"featured_media":65599,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[911],"class_list":["post-65598","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Automatiseer testomgevingen met Jira en de Kinsta API<\/title>\n<meta name=\"description\" content=\"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API\" \/>\n<meta property=\"og:description\" content=\"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-20T16:37:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-21T06:43:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_NL\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API\",\"datePublished\":\"2026-05-20T16:37:01+00:00\",\"dateModified\":\"2026-05-21T06:43:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\"},\"wordCount\":1630,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"inLanguage\":\"nl-NL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\",\"name\":\"Automatiseer testomgevingen met Jira en de Kinsta API\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"datePublished\":\"2026-05-20T16:37:01+00:00\",\"dateModified\":\"2026-05-21T06:43:45+00:00\",\"description\":\"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/nl\/onderwerpen\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/nl\/#website\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Snelle, veilige, premium hostingoplossingen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/nl\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/\",\"https:\/\/x.com\/Kinsta_NL\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/nl\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatiseer testomgevingen met Jira en de Kinsta API","description":"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.","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:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/","og_locale":"nl_NL","og_type":"article","og_title":"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API","og_description":"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.","og_url":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","article_published_time":"2026-05-20T16:37:01+00:00","article_modified_time":"2026-05-21T06:43:45+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.","twitter_image":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_NL","twitter_misc":{"Geschreven door":"Joel Olawanle","Geschatte leestijd":"12 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API","datePublished":"2026-05-20T16:37:01+00:00","dateModified":"2026-05-21T06:43:45+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/"},"wordCount":1630,"publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","inLanguage":"nl-NL"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/","url":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/","name":"Automatiseer testomgevingen met Jira en de Kinsta API","isPartOf":{"@id":"https:\/\/kinsta.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","datePublished":"2026-05-20T16:37:01+00:00","dateModified":"2026-05-21T06:43:45+00:00","description":"Gebruik de Kinsta API en Jira-webhooks om automatisch testomgevingen aan te maken aan het begin van een sprint en je WordPress workflows overzichtelijk te houden.","breadcrumb":{"@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#primaryimage","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/nl\/blog\/automatiseren-testomgevingen-jira-kinsta-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/nl\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/nl\/onderwerpen\/api\/"},{"@type":"ListItem","position":3,"name":"Hoe je het provisionen van sprintomgevingen automatiseert met Jira en de Kinsta API"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/nl\/#website","url":"https:\/\/kinsta.com\/nl\/","name":"Kinsta\u00ae","description":"Snelle, veilige, premium hostingoplossingen","publisher":{"@id":"https:\/\/kinsta.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/nl\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/nl\/wp-content\/uploads\/sites\/7\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/nl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Nederland-476213452787823\/","https:\/\/x.com\/Kinsta_NL","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/kinsta.com\/nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/nl\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/65598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/comments?post=65598"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/65598\/revisions"}],"predecessor-version":[{"id":65655,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/posts\/65598\/revisions\/65655"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/en"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/nl"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/translations\/es"},{"href":"https:\/\/kinsta.com\/nl\/wp-json\/kinsta\/v1\/posts\/65598\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media\/65599"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/media?parent=65598"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/tags?post=65598"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/nl\/wp-json\/wp\/v2\/topic?post=65598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}