{"id":83147,"date":"2026-05-14T10:27:23","date_gmt":"2026-05-14T08:27:23","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=83147&#038;preview=true&#038;preview_id=83147"},"modified":"2026-05-19T08:28:41","modified_gmt":"2026-05-19T06:28:41","slug":"automatizar-entornos-staging-api-de-kinsta","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/","title":{"rendered":"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta"},"content":{"rendered":"<p>Cada sprint empieza con un tablero lleno de tickets y un equipo que necesita un espacio limpio donde trabajar. Para las agencias que gestionan proyectos de WordPress de clientes en ciclos de dos semanas, esto significa crear un <a href=\"https:\/\/kinsta.com\/es\/docs\/alojamiento-wordpress\/entorno-staging\/\">entorno staging<\/a> en MyKinsta antes de que se atienda el primer ticket.<\/p>\n<p>Esto lleva unos minutos, pero es el tipo de tarea que se olvida porque parece trivial.<\/p>\n<p>La <a href=\"https:\/\/kinsta.com\/es\/docs\/api-kinsta\/\">API de Kinsta<\/a> puede eliminar ese paso. Cuando se inicia un sprint en <a href=\"https:\/\/www.atlassian.com\/software\/jira\">Jira<\/a>, puedes configurar un webhook que active un evento en el middleware, el cual lee el payload, la asigna a un sitio de Kinsta y llama a la API para crear un nuevo entorno staging.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Por qu\u00e9 las agencias de WordPress deber\u00edan automatizar la creaci\u00f3n de entornos<\/h2>\n<p>Crear un entorno despu\u00e9s de planificar un sprint implica abrir MyKinsta, buscar el sitio del cliente adecuado entre una lista de docenas, crear y nombrar un entorno, y luego volver a <a href=\"https:\/\/www.atlassian.com\/software\/jira\">Jira<\/a>. Aunque no es complicado, hay que hacerlo en el momento adecuado, siempre, y para cada proyecto de cliente en ejecuci\u00f3n.<\/p>\n<p>Si te lo saltas, el equipo empieza a trabajar en el entorno del \u00faltimo sprint. A partir de ah\u00ed, los cambios se van acumulando unos sobre otros, y cuando surge un error, localizarlo se parece m\u00e1s a la arqueolog\u00eda que a la depuraci\u00f3n.<\/p>\n<h2>Lo que necesitas antes de empezar<\/h2>\n<p>Para conectar la API de Kinsta y Jira, necesitas una cuenta de Kinsta con al menos un sitio de WordPress en un entorno existente, una cuenta de Jira Cloud con acceso de administrador para configurar webhooks, y <a href=\"https:\/\/kinsta.com\/knowledgebase\/what-is-node-js\/\">Node.js<\/a> instalado localmente.<\/p>\n<p>Para autenticarte con la API de Kinsta, ve a <strong>[Tu empresa]<\/strong> &gt; <strong>Configuraci\u00f3n de la empresa<\/strong> &gt; <strong>Claves API<\/strong> en <a href=\"https:\/\/my.kinsta.com\/?lang=es\">MyKinsta<\/a> y haz clic en <strong>Crear clave API<\/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=\"El panel de control de MyKinsta muestra la pantalla de claves API, que incluye dos claves API existentes, junto con un bot\u00f3n para crear una nueva.\" width=\"1200\" height=\"441\"><figcaption id=\"caption-attachment-208873\" class=\"wp-caption-text\">El panel de MyKinsta mostrando las Claves API.<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, dale un nombre a la clave, establece una duraci\u00f3n de caducidad y haz clic en <strong>Generar<\/strong>. La clave se muestra una sola vez, as\u00ed que an\u00f3tala antes de continuar.<\/p>\n<p>Col\u00f3cala en un archivo <code>.env<\/code> en la ra\u00edz del proyecto junto al ID de tu empresa Kinsta, que encontrar\u00e1s en <strong>Configuraci\u00f3n de la empresa<\/strong> &gt; <strong>Detalles de facturaci\u00f3n<\/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>El nivel de acceso de una clave API de Kinsta y el rol que la cre\u00f3 coinciden. Por lo tanto, las claves de nivel de desarrollador tienen permisos m\u00e1s limitados que las generadas por los propietarios o administradores de la empresa. Es lo primero que debes comprobar si una solicitud devuelve un error de permiso.<\/p>\n<\/aside>\n\n<h3>Obt\u00e9n los IDs de tus sitios Jira y Kinsta<\/h3>\n<p>Necesitas el ID del sitio de Kinsta para cada proyecto de cliente en la automatizaci\u00f3n. Se trata de un UUID que Kinsta asigna al crear el sitio. Aparece en la URL de MyKinsta cuando abres un sitio o al realizar la llamada <code>GET \/sites<\/code> una vez que tengas tu clave API configurada:<\/p>\n<pre><code class=\"language-bash\">https:\/\/my.kinsta.com\/sites\/details\/fbab4927-e354-4044-b226-29ac0fbd20ca\/\u2026<\/code><\/pre>\n<p>En cuanto a Jira, necesitas el ID num\u00e9rico del tablero de cada proyecto que quieras conectar. Aparece en la URL (aqu\u00ed aparece como <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>Es el mismo valor que Jira incluye en el payload del webhook <code>sprint_started<\/code> como <code>originBoardId<\/code>. La asignaci\u00f3n de los IDs de tablero a los IDs de sitio se encuentra en tu archivo <code>.env<\/code>:<\/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>Adem\u00e1s, para el desarrollo local, Jira no puede conectarse directamente a <code>localhost<\/code>. Puedes usar <a href=\"https:\/\/ngrok.com\/\">Ngrok<\/a> para exponer un puerto local a Internet con una URL p\u00fablica temporal, que podr\u00e1s utilizar como endpoint de tu webhook durante el desarrollo. Una vez que tengas la direcci\u00f3n del middleware desplegada, podr\u00e1s sustituirla.<\/p>\n<h2>C\u00f3mo automatizar la configuraci\u00f3n del entorno de sprint con Jira y la API de Kinsta<\/h2>\n<p>Esta integraci\u00f3n se ejecuta a trav\u00e9s de dos sistemas. En Jira, un webhook se dispara cuando comienza un sprint y env\u00eda el payload del evento a tu middleware. En Kinsta, el middleware lee el ID del tablero incluido en el payload, lo asocia a un ID de sitio mediante el mapa de configuraci\u00f3n, y llama a la API de Kinsta para crear un entorno staging simple con el nombre del sprint.<\/p>\n<h3>1. Registra un webhook de Jira para eventos de sprint<\/h3>\n<p>Jira Cloud te ofrece dos formas de registrar un webhook. La opci\u00f3n m\u00e1s sencilla para la mayor\u00eda de los equipos es a trav\u00e9s de la interfaz de usuario de Jira. La opci\u00f3n <strong>Configuraci\u00f3n<\/strong> &gt; <strong>Sistema<\/strong> est\u00e1 dentro del men\u00fa superior derecho:<\/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=\"La opci\u00f3n Sistema de Jira Cloud dentro del men\u00fa de configuraci\u00f3n general de la interfaz de usuario de Jira.\" width=\"1200\" height=\"575\"><figcaption id=\"caption-attachment-208877\" class=\"wp-caption-text\">La opci\u00f3n Sistema de Jira Cloud dentro de la configuraci\u00f3n general.<\/figcaption><\/figure>\n<p>Desde ah\u00ed, elige <strong>Avanzado<\/strong> &gt; <strong>WebHooks<\/strong>, y luego haz clic en <strong>Crear un 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=\"El panel de administraci\u00f3n de Jira Cloud, en el que se ve la secci\u00f3n WebHooks con el bot\u00f3n Crear un WebHook en la esquina superior derecha.\" width=\"1200\" height=\"315\"><figcaption id=\"caption-attachment-208874\" class=\"wp-caption-text\">Secci\u00f3n de WebHooks con un bot\u00f3n Crear un WebHook en la parte superior derecha.<\/figcaption><\/figure>\n<p>Aqu\u00ed, escribe un nombre, pega una URL de middleware con <code>\/sprint<\/code> a\u00f1adido al final (por ahora basta con una opci\u00f3n ficticia) y, en <strong>Eventos<\/strong>, selecciona <strong>Sprint &gt; iniciado<\/strong>. Esto crea un webhook de administraci\u00f3n que se activa cada vez que se produce un evento <code>sprint_started<\/code> en toda tu instancia de Jira.<\/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=\"El formulario de creaci\u00f3n de webhooks de Jira, en el que se muestran los campos Nombre y URL, as\u00ed como la secci\u00f3n Eventos, con la opci\u00f3n Sprint iniciado seleccionada.\" width=\"1200\" height=\"646\"><figcaption id=\"caption-attachment-208875\" class=\"wp-caption-text\">El formulario de creaci\u00f3n del webhook de Jira.<\/figcaption><\/figure>\n<p>La segunda opci\u00f3n es la API REST, utilizando <code>POST \/rest\/webhooks\/1.0\/webhook<\/code>. Esto funciona bien cuando el registro de webhooks forma parte de un script de despliegue:<\/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>Al llamar a <code>PUT \/rest\/webhooks\/1.0\/webhook\/refresh<\/code>, se ampl\u00eda el plazo de caducidad de 30 d\u00edas del webhook. Cuando Jira activa <code>sprint_started<\/code>, el payload llega a tu endpoint como un POST JSON con la siguiente estructura:<\/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>El middleware utiliza <code>sprint.originBoardId<\/code> para buscar el ID del sitio Kinsta y <code>sprint.name<\/code> para nombrar el nuevo entorno: cada evento <code>sprint_started<\/code> dentro de tu instancia de Jira llega al endpoint. La b\u00fasqueda del ID del tablero en el mapa de configuraci\u00f3n es lo que asigna la automatizaci\u00f3n al proyecto cliente correcto e ignora todo lo dem\u00e1s.<\/p>\n<h3>2. Construye el endpoint del middleware<\/h3>\n<p>Una vez creado el webhook, debes inicializar un nuevo proyecto Node.js e instalar <a href=\"https:\/\/kinsta.com\/knowledgebase\/what-is-express-js\/\">Express.js<\/a> junto con <code>dotenv<\/code>:<\/p>\n<pre><code class=\"language-bash\">npm init -y\nnpm install express dotenv<\/code><\/pre>\n<p><code>express<\/code> se encarga del enrutamiento y de procesar las peticiones, mientras que <code>dotenv<\/code> carga tu archivo <code>.env<\/code>. Necesitas crear <code>app.js<\/code> para configurar el servidor. Aqu\u00ed tienes el archivo completo:<\/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>Para proteger el endpoint, debes generar una clave secreta durante la configuraci\u00f3n del webhook. Jira permite que esto sea opcional durante la configuraci\u00f3n, pero es pr\u00e1cticamente imprescindible para garantizar la seguridad de la instancia.<\/p>\n<h4>Seguridad del endpoint<\/h4>\n<p>Jira firma cada payload e incluye el resultado en el encabezado <code>X-Hub-Signature<\/code> como <code>sha256=&lt;hash&gt;<\/code>. A\u00f1ade el secreto a tu archivo <code>.env<\/code> junto con el resto de credenciales:<\/p>\n<pre><code class=\"language-bash\">JIRA_WEBHOOK_SECRET=your_webhook_secret_here<\/code><\/pre>\n<p>La funci\u00f3n de verificaci\u00f3n se encuentra en <b>app.js<\/b> y utiliza el m\u00f3dulo <code>crypto<\/code> integrado en Node. Lee la firma del encabezado de la solicitud, calcula el HMAC esperado a partir del cuerpo sin procesar de la solicitud y utiliza <code>timingSafeEqual<\/code> para compararlos de una forma que evite los ataques de sincronizaci\u00f3n. Aqu\u00ed tienes la parte relevante de 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>Esta funci\u00f3n es lo primero que se ejecuta dentro del controlador de ruta <code>POST \/sprint<\/code>. Si la verificaci\u00f3n falla, el middleware devuelve <code>401<\/code> inmediatamente y no se ejecuta nada m\u00e1s:<\/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>La ruta utiliza <code>express.raw()<\/code> en la ruta <code>\/sprint<\/code> porque <code>verifyJiraSignature<\/code> lo necesita para calcular el HMAC. Una vez pasada la verificaci\u00f3n, <code>JSON.parse(req.body)<\/code> da el mismo resultado que tendr\u00eda <code>express.json()<\/code>.<\/p>\n<h3>3. Autenticarse con la API de Kinsta y recuperar los entornos del sitio<\/h3>\n<p>Todas las solicitudes a la API de Kinsta usan autenticaci\u00f3n con token Bearer: la constante <code>headers<\/code> en <code>app.js<\/code> se encarga de eso en cada solicitud de la aplicaci\u00f3n. La l\u00ednea <code>require(\u201cdotenv\u201d).config()<\/code> al principio garantiza que la clave se cargue desde <code>.env<\/code> antes de que se ejecute nada m\u00e1s, as\u00ed que nunca aparece en el c\u00f3digo fuente propiamente dicho.<\/p>\n<p>Kinsta utiliza IDs de entorno en lugar de IDs de sitio para el endpoint de aprovisionamiento, as\u00ed que deber\u00edas a\u00f1adir la funci\u00f3n <code>getEnvironmentId<\/code> debajo de la constante <code>headers<\/code>:<\/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>Esto llama a <code>GET \/sites\/{siteId}\/environments<\/code> y devuelve el ID del primer entorno (es decir, en producci\u00f3n) en la respuesta. Si un sitio utiliza varios entornos y necesitas seleccionar uno en concreto, compara con el nombre del entorno en lugar de tomar el primer resultado.<\/p>\n<h3>4. Crea un entorno staging b\u00e1sico usando la API de Kinsta<\/h3>\n<p>Con los IDs del sitio y del entorno resueltos, el middleware llama a <code>POST \/sites\/{siteId}\/environments\/plain<\/code> para crear el entorno sprint. Esto se hace mediante la funci\u00f3n <code>createSprintEnvironment<\/code> que se encuentra debajo de <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> es lo que aparece en MyKinsta, mientras que si usas <code>sprint.name<\/code>directamente desde el payload de Jira, cada entorno del panel se corresponde con el sprint al que pertenece. El indicador <code>is_premium<\/code> determina si Kinsta lo configura como un entorno staging est\u00e1ndar o <a href=\"https:\/\/kinsta.com\/es\/blog\/entornos-staging-de-kinsta\/\">premium<\/a>. Si lo pones en <code>false<\/code>, se crea un entorno est\u00e1ndar.<\/p>\n<p>Cuando la solicitud llega a Kinsta, devuelve <code>202 Accepted<\/code> con un <code>operation_id<\/code> en lugar de un entorno completado:<\/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>El procesamiento <code>async<\/code> de Kinsta evita que el hilo de la solicitud se bloquee mientras se completa el aprovisionamiento. El <code>operation_id<\/code> es lo que debes pasar al endpoint para seguir el progreso. A continuaci\u00f3n, actualiza la ruta <code>POST \/sprint<\/code> para llamar a ambas funciones de forma secuencial:<\/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>Utilizar el bloque <code>try<\/code> es m\u00e1s limpio que depender de m\u00faltiples sentencias <code>if<\/code>. Sin embargo, mant\u00e9n la verificaci\u00f3n de la firma de Jira al principio del archivo, ya que debe ejecutarse antes que cualquier otro c\u00f3digo.<\/p>\n<h3>5. Consulta el estado de la operaci\u00f3n y confirma el aprovisionamiento<\/h3>\n<p>Para comprobar cu\u00e1ndo se ha completado, consulta peri\u00f3dicamente<code>\u00a0\/operations\/{operation_id}<\/code> hasta que el estado sea <code>200<\/code> utilizando una funci\u00f3n <code>pollOperation<\/code> debajo de <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>El bucle espera cinco segundos entre cada intento y cubre hasta un minuto de tiempo de aprovisionamiento. Mientras que <code>200<\/code> se\u00f1ala la finalizaci\u00f3n, cualquier estado <code>4xx<\/code> indica un fallo en la investigaci\u00f3n.<\/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=\"El panel de control de MyKinsta muestra la lista de entornos de un sitio de WordPress, con un entorno staging en blanco, identificado por el nombre de un sprint, visible junto al entorno en producci\u00f3n.\" width=\"1200\" height=\"442\"><figcaption id=\"caption-attachment-208876\" class=\"wp-caption-text\">El panel de MyKinsta muestra la lista de entornos de un sitio WordPress.<\/figcaption><\/figure>\n<p>Si ejecutas todo esto con <code>node app.js<\/code> e inicias un sprint en Jira, el entorno deber\u00eda aparecer en MyKinsta en uno o dos minutos.<\/p>\n<h2>Mant\u00e9n a tu agencia un paso por delante con los entornos de sprint<\/h2>\n<p>Esta integraci\u00f3n ofrece un entorno staging limpio y con un nombre espec\u00edfico dentro de MyKinsta, basado en el inicio de un sprint en Jira. Se activa el webhook, el middleware asocia el ID del tablero a un sitio, la API de Kinsta se encarga del resto y el equipo puede acceder a sus tickets en un entorno que ya les est\u00e1 esperando.<\/p>\n<p>Cuando el middleware est\u00e9 listo para entrar en producci\u00f3n, <a href=\"https:\/\/sevalla.com\/?__hstc=95980867.42a875ab7e5ab109c2bb9d1f0f4409eb.1764916269589.1778912575328.1779089629251.211&#038;__hssc=95980867.1.1779089629251&#038;__hsfp=7abf17e6dca9a8b7037fdca142dcab0b\">Sevalla<\/a> es un destino de despliegue muy sencillo. Solo tienes que subir el proyecto a un proveedor de Git, conectar el repositorio, a\u00f1adir las variables de entorno y actualizar la URL del webhook de Jira con la direcci\u00f3n de producci\u00f3n.<\/p>\n<p>Adem\u00e1s, el <a href=\"https:\/\/kinsta.com\/es\/programa-socios-agencia\/\">Programa para Socios de Agencias<\/a> de Kinsta es ideal para las agencias que gestionan proyectos de varios clientes. Te ofrece soporte dedicado, oportunidades de marketing conjunto y el tipo de asociaci\u00f3n de infraestructura que respalda la capa de automatizaci\u00f3n que est\u00e1s construyendo sobre la API de Kinsta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cada sprint empieza con un tablero lleno de tickets y un equipo que necesita un espacio limpio donde trabajar. Para las agencias que gestionan proyectos de &#8230;<\/p>\n","protected":false},"author":287,"featured_media":83148,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1270],"class_list":["post-83147","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>Automatiza los Entornos Staging con Jira y la API de Kinsta<\/title>\n<meta name=\"description\" content=\"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.\" \/>\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\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta\" \/>\n<meta property=\"og:description\" content=\"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-14T08:27:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-19T06:28:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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=\"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta\",\"datePublished\":\"2026-05-14T08:27:23+00:00\",\"dateModified\":\"2026-05-19T06:28:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\"},\"wordCount\":1877,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\",\"name\":\"Automatiza los Entornos Staging con Jira y la API de Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"datePublished\":\"2026-05-14T08:27:23+00:00\",\"dateModified\":\"2026-05-19T06:28:41+00:00\",\"description\":\"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"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\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatiza los Entornos Staging con Jira y la API de Kinsta","description":"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.","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\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta","og_description":"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.","og_url":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2026-05-14T08:27:23+00:00","article_modified_time":"2026-05-19T06:28:41+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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":"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Joel Olawanle","Tiempo de lectura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta","datePublished":"2026-05-14T08:27:23+00:00","dateModified":"2026-05-19T06:28:41+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/"},"wordCount":1877,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/","url":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/","name":"Automatiza los Entornos Staging con Jira y la API de Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","datePublished":"2026-05-14T08:27:23+00:00","dateModified":"2026-05-19T06:28:41+00:00","description":"Conecta la API de Kinsta y webhooks de Jira: crea entornos staging al inicio de cada sprint de forma autom\u00e1tica.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/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\/es\/blog\/automatizar-entornos-staging-api-de-kinsta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/es\/secciones\/api\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo automatizar la configuraci\u00f3n de entornos de sprint con Jira y la API de Kinsta"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","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\/es\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/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\/es\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/83147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=83147"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/83147\/revisions"}],"predecessor-version":[{"id":83200,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/83147\/revisions\/83200"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/83147\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/83148"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=83147"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=83147"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=83147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}