{"meta":{"title":"Skripterstellung mit der REST-API und JavaScript","intro":"Schreib ein Skript mit dem Octokit.js-SDK, um mit der REST-API zu interagieren.","product":"REST-API","breadcrumbs":[{"href":"/de/rest","title":"REST-API"},{"href":"/de/rest/guides","title":"Anleitungen"},{"href":"/de/rest/guides/scripting-with-the-rest-api-and-javascript","title":"Erstellen von Skripts mit JavaScript"}],"documentType":"article"},"body":"# Skripterstellung mit der REST-API und JavaScript\n\nSchreib ein Skript mit dem Octokit.js-SDK, um mit der REST-API zu interagieren.\n\n## Informationen zu Octokit.js\n\nWenn Sie ein Skript mit JavaScript für die Interaktion mit GitHubder REST-API schreiben möchten, empfiehlt es sich, GitHub das Octokit.js SDK zu verwenden. Octokit.js wird von GitHub gepflegt. Vom SDK werden bewährte Methoden implementiert, und es erleichtert dir, über JavaScript mit der REST-API zu interagieren. Octokit.js funktioniert mit allen modernen Browsern, Node.js und Deno. Weitere Informationen zu Octokit.js findest du in der [Octokit.js-Infodatei](https://github.com/octokit/octokit.js/#readme).\n\n## Voraussetzungen\n\nIn diesem Handbuch wird davon ausgegangen, dass Sie mit JavaScript und der GitHub REST-API vertraut sind. Weitere Informationen zur REST-API findest du unter [Erste Schritte mit der REST-API](/de/rest/using-the-rest-api/getting-started-with-the-rest-api).\n\nDu musst `octokit` installieren und importieren, um die Octokit.js-Bibliothek nutzen zu können. In diesem Leitfaden werden Importanweisungen gemäß ES6 verwendet. Weitere Informationen zu verschiedenen Installations- und Importmethoden findest du im [Abschnitt „Verwendung“ der Octokit.js-Infodatei](https://github.com/octokit/octokit.js/#usage).\n\n## Instanziieren und Authentifizieren\n\n> \\[!WARNING]\n> Verwende die Anmeldeinformationen für die Authentifizierung wie ein Kennwort.\n>\n> Um Ihre Anmeldeinformationen zu schützen, können Sie Ihre Anmeldeinformationen als Geheimnis speichern und Ihr Skript über GitHub Actions ausführen. Weitere Informationen finden Sie unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n> Sie können Ihre Anmeldeinformationen auch als Codespaces geheimes Geheimnis speichern und Ihr Skript in Codespacesausführen. Weitere Informationen finden Sie unter [Verwalten Ihrer kontospezifischen geheimen Schlüssel für GitHub Codespaces](/de/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces).\n\n> Wenn diese Optionen nicht möglich sind, sollten Sie einen anderen CLI-Dienst verwenden, um Ihre Anmeldeinformationen sicher zu speichern.\n\n### Authentifizieren mit einem personal access token\n\nWenn Sie die GitHub REST-API für den persönlichen Gebrauch nutzen möchten, können Sie ein personal access token erstellen. Weitere Informationen zum Erstellen eines personal access token finden Sie unter [Verwalten deiner persönlichen Zugriffstoken](/de/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\nImportiere zunächst `Octokit` aus `octokit`. Übergeben Sie dann Ihr personal access token beim Erstellen einer Instanz von `Octokit`. Ersetzen Sie `YOUR-TOKEN` im folgenden Beispiel durch einen Verweis auf Ihre personal access token.\n\n```javascript copy\nimport { Octokit } from \"octokit\";\n\nconst octokit = new Octokit({ \n  auth: 'YOUR-TOKEN',\n});\n```\n\n### Authentifizieren mit einem GitHub App\n\nWenn Sie die API im Namen einer Organisation oder eines anderen Benutzers verwenden möchten, GitHub empfiehlt die Verwendung einer GitHub App. Wenn ein Endpunkt für GitHub Apps verfügbar ist, gibt die REST-Referenzdokumentation für diesen Endpunkt an, welcher Typ von GitHub App-Token erforderlich ist. Weitere Informationen findest du unter [Registrieren einer GitHub-App](/de/apps/creating-github-apps/registering-a-github-app/registering-a-github-app) und [Informationen zur Authentifizierung mit einer GitHub-App](/de/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app).\n\nStatt `Octokit` aus `octokit` zu importieren, importiere `App`. Ersetze `APP_ID` im folgenden Beispiel durch einen Verweis auf die ID deiner App. Ersetze `PRIVATE_KEY` durch einen Verweis auf den privaten Schlüssel deiner App. Ersetze `INSTALLATION_ID` durch die ID der Installation der App, für die du dich authentifizieren möchtest. Auf der Einstellungsseite für die App findest du die ID der App und kannst einen privaten Schlüssel generieren. Weitere Informationen finden Sie unter [Verwalten privater Schlüssel für GitHub Apps](/de/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps). Eine Installations-ID kannst du mit den Endpunkten `GET /users/{username}/installation`, `GET /repos/{owner}/{repo}/installation` oder `GET /orgs/{org}/installation` abrufen. Weitere Informationen finden Sie unter [REST-API-Endpunkte für GitHub Apps](/de/rest/apps/apps).\n\n```javascript copy\nimport { App } from \"octokit\";\n\nconst app = new App({\n  appId: APP_ID,\n  privateKey: PRIVATE_KEY,\n});\n\nconst octokit = await app.getInstallationOctokit(INSTALLATION_ID);\n```\n\n### Authentifizieren in GitHub Actions\n\nWenn Sie die API in einem GitHub Actions Workflow verwenden möchten, empfiehlt GitHub, sich bei der integrierten `GITHUB_TOKEN` zu authentifizieren, anstatt ein Token zu erstellen. Sie können dem `GITHUB_TOKEN` mit dem Schlüssel `permissions` Berechtigungen erteilen. Weitere Informationen zu `GITHUB_TOKEN` findest du unter [GITHUB\\_TOKEN](/de/actions/concepts/security/github_token).\n\nWenn in deinem Workflow auf Ressourcen außerhalb des Repositorys des Workflows zugegriffen werden muss, kannst du `GITHUB_TOKEN` nicht verwenden. Speichere die Anmeldeinformationen in diesem Fall als Geheimnis und ersetze `GITHUB_TOKEN` in den folgenden Beispielen durch den Namen des Geheimnisses. Weitere Informationen zu Geheimnissen findest du unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\nWenn Sie das `run` Schlüsselwort verwenden, um Ihr JavaScript-Skript in Ihren GitHub Actions Workflows auszuführen, können Sie den Wert `GITHUB_TOKEN` als Umgebungsvariable speichern. Vom Skript kann als `process.env.VARIABLE_NAME` auf die Umgebungsvariable zugegriffen werden.\n\nBeispiel: In diesem Workflowschritt wird `GITHUB_TOKEN` in einer Umgebungsvariable mit der Bezeichnung `TOKEN` gespeichert:\n\n```yaml\n- name: Run script\n  env:\n    TOKEN: ${{ secrets.GITHUB_TOKEN }}\n  run: |\n    node .github/actions-scripts/use-the-api.mjs\n```\n\nVom Skript, das vom Workflow ausgeführt wird, wird `process.env.TOKEN` zur Authentifizierung verwendet:\n\n```javascript copy\nimport { Octokit } from \"octokit\";\n\nconst octokit = new Octokit({ \n  auth: process.env.TOKEN,\n});\n```\n\n### Instanziieren ohne Authentifizierung\n\nDu kannst die REST-API ohne Authentifizierung verwenden, obwohl du dann eine niedrigere Ratenbegrenzung hast und einige Endpunkte nicht verwenden kannst. Um eine Instanz von `Octokit` ohne Authentifizierung zu erstellen, übergeben Sie das `auth`-Argument nicht.\n\n```javascript copy\nimport { Octokit } from \"octokit\";\n\nconst octokit = new Octokit({ );\n```\n\n## Anfragen stellen\n\nOctokit unterstützt mehrere Möglichkeiten, Anforderungen auszuführen. Du kannst die `request`-Methode verwenden, um Anforderungen auszuführen, wenn du HTTP-Verb und -Pfad für den Endpunkt kennst. Du kannst die `rest`-Methode verwenden, wenn du die Vorteile der automatischen Vervollständigung in der IDE und bei der Eingabe nutzen möchtest. Für paginierte Endpunkte kannst du die `paginate`-Methode verwenden, um mehrere Datenseiten anzufordern.\n\n### Verwenden der `request`-Methode für das Ausführen von Anfragen\n\nUm Anforderungen mit der `request`-Methode auszuführen, übergib die HTTP-Methode und den Pfad als erstes Argument. Gib alle Text-, Abfrage- oder Pfadparameter als zweites Argument in einem Objekt an. Beispiel: Zum Ausführen einer `GET`-Anforderung an `/repos/{owner}/{repo}/issues` und Übergeben der Parameter `owner`, `repo` und `per_page`:\n\n```javascript copy\nawait octokit.request(\"GET /repos/{owner}/{repo}/issues\", {\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 2\n});\n```\n\nBei der `request`-Methode wird der Header `Accept: application/vnd.github+json` automatisch übergeben. Füge zum Übergeben zusätzlicher Header oder eines anderen `Accept`-Headers dem Objekt eine `headers`-Eigenschaft hinzu, die als zweites Argument übergeben wird. Der Wert der Eigenschaft `headers` ist ein Objekt mit den Headernamen als Schlüssel und den Headerwerten als Werte. Beispiel: Senden eines `content-type`-Headers mit dem Wert `text/plain` und eines `x-github-api-version`-Headers mit dem Wert `2026-03-10`:\n\n```javascript copy\nawait octokit.request(\"POST /markdown/raw\", {\n  text: \"Hello **world**\",\n  headers: {\n    \"content-type\": \"text/plain\",\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n});\n```\n\n### Verwendung von `rest`-Endpunktmethoden zum Ausführen von Anfragen\n\nJeder REST-API-Endpunkt verfügt über eine zugeordnete `rest`-Endpunktmethode in Octokit. Diese Methoden werden in der Regel in Ihrer IDE zur bequemen Nutzung automatisch vervollständigt. Du kannst beliebige Parameter als Objekt an die Methode übergeben.\n\n```javascript copy\nawait octokit.rest.issues.listForRepo({\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 2\n});\n```\n\nWenn du eine typisierte Sprache wie TypeScript verwendest, kannst du außerdem Typen für die Verwendung mit diesen Methoden importieren. Weitere Informationen findest du [im Abschnitt „TypeScript“ der plugin-rest-endpoint-methods.js-Infodatei](https://github.com/octokit/plugin-rest-endpoint-methods.js/#typescript).\n\n### Erstellen paginierter Anfragen\n\nWenn der Endpunkt paginiert ist und du mehr als eine Seite mit Ergebnissen abrufen möchtest, kannst du die `paginate`-Methode verwenden.\n`paginate` ruft die nächste Ergebnisseite ab, bis die letzte Seite erreicht ist, und gibt dann alle Ergebnisse als einzelnes Array zurück. Einige Endpunkte geben paginierte Ergebnisse als Array in einem Objekt zurück, anstatt die paginierten Ergebnisse als Array zurückzugeben.\n`paginate` gibt immer ein Array aus Elementen zurück, auch wenn das Rohergebnis ein Objekt war.\n\nSo werden im folgenden Beispiel alle Issues aus dem Repository `github/docs` abgerufen. Obwohl 100 Issues gleichzeitig angefordert werden, wird die Funktion erst zurückgegeben, wenn die letzte Datenseite erreicht ist.\n\n```javascript copy\nconst issueData = await octokit.paginate(\"GET /repos/{owner}/{repo}/issues\", {\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 100,\n  headers: {\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n});\n```\n\nDie `paginate`-Methode akzeptiert eine optionale Zuordnungsfunktion, die du verwenden kannst, um ausschließlich die Daten zu sammeln, die du aus der Antwort erhalten möchtest. Dadurch wird die Arbeitsspeicherauslastung des Skripts reduziert. In der Map-Funktion kann ein zweites Argument (`done`) verwendet werden, das du aufrufen kannst, um die Paginierung zu beenden, bevor die letzte Seite erreicht ist. Dadurch kannst du eine Teilmenge der Seiten abrufen. Im folgenden Beispiel werden beispielsweise weiterhin Ergebnisse abgerufen, bis ein Issue zurückgegeben wird, das im Titel „test“ enthält. Für die zurückgegebenen Datenseiten werden nur der Titel und der Autor des Issue gespeichert.\n\n```javascript copy\nconst issueData = await octokit.paginate(\"GET /repos/{owner}/{repo}/issues\", {\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 100,\n  headers: {\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n},\n    (response, done) => response.data.map((issue) => {\n    if (issue.title.includes(\"test\")) {\n      done()\n    }\n    return ({title: issue.title, author: issue.user.login})\n  })\n);\n```\n\nAnstatt alle Ergebnisse gleichzeitig abzurufen, kannst du `octokit.paginate.iterator()` verwenden, um jeweils eine einzelne Seite zu durchlaufen. So wird im folgenden Beispiel jeweils eine Seite mit Ergebnissen abgerufen und es wird jedes Objekt von der Seite verarbeitet, bevor die nächste Seite abgerufen wird. Sobald ein Issue erreicht ist, das im Titel „Test“ enthält, beendet das Skript die Iteration und gibt Titel und Autor des Issues für jedes verarbeitete Objekt zurück. Der Iterator ist die speichereffizienteste Methode zum Abrufen paginierter Daten.\n\n```javascript copy\nconst iterator = octokit.paginate.iterator(\"GET /repos/{owner}/{repo}/issues\", {\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 100,\n  headers: {\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n});\n\nlet issueData = []\nlet breakLoop = false\nfor await (const {data} of iterator) {\n  if (breakLoop) break\n  for (const issue of data) {\n    if (issue.title.includes(\"test\")) {\n      breakLoop = true\n      break\n    } else {\n      issueData = [...issueData, {title: issue.title, author: issue.user.login}];\n    }\n  }\n}\n```\n\nDu kannst die `paginate`-Methode auch mit den `rest`-Endpunktmethoden verwenden. Übergib die `rest`-Endpunktmethode als erstes Argument. Übergib alle Parameter als zweites Argument.\n\n```javascript copy\nconst iterator = octokit.paginate.iterator(octokit.rest.issues.listForRepo, {\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 100,\n  headers: {\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n});\n```\n\nWeitere Informationen zur Paginierung findest du unter [Verwenden der Paginierung in der REST-API](/de/rest/using-the-rest-api/using-pagination-in-the-rest-api).\n\n## Abfangen von Fehlern\n\n### Erfassung aller Fehler\n\nManchmal gibt die GitHub REST-API einen Fehler zurück. Beispielsweise erhältst du eine Fehlermeldung, wenn das Zugriffstoken abgelaufen ist oder wenn du einen erforderlichen Parameter ausgelassen hast. Von Octokit.js wird die Anforderung automatisch wiederholt, wenn ein anderer Fehler als `400 Bad Request`, `401 Unauthorized`, `403 Forbidden`, `404 Not Found`und `422 Unprocessable Entity` angezeigt wird. Wenn sogar nach wiederholten Versuchen ein API-Fehler auftritt, wird von Octokit.js eine Fehlermeldung ausgegeben, die den HTTP-Statuscode der Antwort (`response.status`) und die Antwortheader (`response.headers`) enthält. Du musst diese Fehler im Code behandeln. Du kannst beispielsweise einen try/catch-Block verwenden, um Fehler abzufangen:\n\n```javascript copy\nlet filesChanged = []\n\ntry {\n  const iterator = octokit.paginate.iterator(\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\", {\n    owner: \"github\",\n    repo: \"docs\",\n    pull_number: 22809,\n    per_page: 100,\n    headers: {\n      \"x-github-api-version\": \"2026-03-10\",\n    },\n  });\n\n  for await (const {data} of iterator) {\n    filesChanged = [...filesChanged, ...data.map(fileData => fileData.filename)];\n  }\n} catch (error) {\n  if (error.response) {\n    console.error(`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`)\n  }\n  console.error(error)\n}\n```\n\n### Handhabung von beabsichtigten Fehlercodes\n\nManchmal verwendet GitHub einen 4xx-Statuscode, um eine Antwort anzugeben, die keinen Fehler darstellt. Wenn der von dir verwendete Endpunkt dies tut, kannst du zusätzliche Behandlung für bestimmte Fehler hinzufügen. Beispielsweise wird vom Endpunkt `GET /user/starred/{owner}/{repo}` der Statuscode `404` zurückgegeben, wenn das Repository nicht mit einem Stern versehen ist. Im folgenden Beispiel wird die Antwort `404` verwendet, um anzugeben, dass das Repository nicht mit einem Stern versehen wurde. Alle anderen Fehlercodes werden als Fehler behandelt.\n\n```javascript copy\ntry {\n  await octokit.request(\"GET /user/starred/{owner}/{repo}\", {\n    owner: \"github\",\n    repo: \"docs\",\n    headers: {\n      \"x-github-api-version\": \"2026-03-10\",\n    },\n  });\n\n  console.log(`The repository is starred by me`);\n\n} catch (error) {\n  if (error.status === 404) {\n    console.log(`The repository is not starred by me`);\n  } else {\n    console.error(`An error occurred while checking if the repository is starred: ${error?.response?.data?.message}`);\n  }\n}\n```\n\n### Behandeln von Fehlern bei der Ratenbegrenzung\n\nWenn ein Ratenlimitfehler angezeigt wird, solltest du die Anforderung nach einer Wartezeit wiederholen. Wenn Sie von einer Ratenbegrenzung betroffen sind, gibt GitHub einen `403 Forbidden`-Fehler zurück, und der Wert des Antwortheaders `x-ratelimit-remaining` ist `\"0\"`. Die Antwortheader enthalten einen `x-ratelimit-reset`-Header, in dem der Zeitpunkt (in UTC-Epochensekunden) angegeben ist, zu dem das aktuelle Ratenlimitfenster zurückgesetzt wird. Du kannst die Anfrage nach der Zeit, die von `x-ratelimit-reset` angegeben wird, erneut versuchen.\n\n```javascript copy\nasync function requestRetry(route, parameters) {\n  try {\n    const response = await octokit.request(route, parameters);\n    return response\n  } catch (error) {\n    if (error.response && error.status === 403 && error.response.headers['x-ratelimit-remaining'] === '0') {\n      const resetTimeEpochSeconds = error.response.headers['x-ratelimit-reset'];\n      const currentTimeEpochSeconds = Math.floor(Date.now() / 1000);\n      const secondsToWait = resetTimeEpochSeconds - currentTimeEpochSeconds;\n      console.log(`You have exceeded your rate limit. Retrying in ${secondsToWait} seconds.`);\n      setTimeout(requestRetry, secondsToWait * 1000, route, parameters);\n    } else {\n      console.error(error);\n    }\n  }\n}\n\nconst response = await requestRetry(\"GET /repos/{owner}/{repo}/issues\", {\n    owner: \"github\",\n    repo: \"docs\",\n    per_page: 2\n  })\n```\n\n## Verwendung der Antwort\n\nBei der Methode `request` wird eine Zusage zurückgegeben, die in ein Objekt aufgelöst wird, wenn die Anforderung erfolgreich war. Die Objekteigenschaften sind `data` (der vom Endpunkt zurückgegebene Antworttext), `status` (der HTTP-Antwortcode), `url` (die URL der Anforderung) und `headers` (ein Objekt, das die Antwortheader enthält). Sofern nicht anders angegeben, verwendet der Antworttext das JSON-Format. Von einigen Endpunkten wird kein Antworttext zurückgegeben. In diesen Fällen wird die Eigenschaft `data` weggelassen.\n\n```javascript copy\nconst response = await octokit.request(\"GET /repos/{owner}/{repo}/issues/{issue_number}\", {\n  owner: \"github\",\n  repo: \"docs\",\n  issue_number: 11901,\n  headers: {\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n});\n\nconsole.log(`The status of the response is: ${response.status}`)\nconsole.log(`The request URL was: ${response.url}`)\nconsole.log(`The x-ratelimit-remaining response header is: ${response.headers[\"x-ratelimit-remaining\"]}`)\nconsole.log(`The issue title is: ${response.data.title}`)\n```\n\nAuf ähnliche Weise wird bei der Methode `paginate` eine Zusage zurückgegeben. Wenn die Anforderung erfolgreich war, wird die Zusage in ein Array von Daten aufgelöst, die vom Endpunkt zurückgegeben werden. Anders als bei der Methode `request` werden bei der Methode `paginate` Statuscode, URL oder Header nicht zurückgegeben.\n\n```javascript copy\nconst data = await octokit.paginate(\"GET /repos/{owner}/{repo}/issues\", {\n  owner: \"github\",\n  repo: \"docs\",\n  per_page: 100,\n  headers: {\n    \"x-github-api-version\": \"2026-03-10\",\n  },\n});\n\nconsole.log(`${data.length} issues were returned`)\nconsole.log(`The title of the first issue is: ${data[0].title}`)\n```\n\n## Beispielskript\n\nHier siehst du ein vollständiges Beispielskript, in dem Octokit.js verwendet wird. Durch das Skript wird `Octokit` importiert, und es wird eine neue Instanz von `Octokit` erstellt. Wenn Sie sich statt mit einer GitHub App mit einer personal access token authentifizieren möchten, würden Sie `App` anstelle von `Octokit` importieren und instanziieren. Weitere Informationen finden Sie unter [Authenticating with a GitHub App](#authenticating-with-a-github-app).\n\nDurch die Funktion `getChangedFiles` werden alle Dateien abgerufen, die für einen Pull Request geändert wurden. Durch die Funktion `commentIfDataFilesChanged` wird die Funktion `getChangedFiles` aufgerufen. Wenn eine der Dateien, die vom Pull Request geändert wurden, `/data/` im Dateipfad enthält, wird der Pull Request von der Funktion kommentiert.\n\n```javascript copy\nimport { Octokit } from \"octokit\";\n\nconst octokit = new Octokit({ \n  auth: 'YOUR-TOKEN',\n});\n\nasync function getChangedFiles({owner, repo, pullNumber}) {\n  let filesChanged = []\n\n  try {\n    const iterator = octokit.paginate.iterator(\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\", {\n      owner: owner,\n      repo: repo,\n      pull_number: pullNumber,\n      per_page: 100,\n      headers: {\n        \"x-github-api-version\": \"2026-03-10\",\n      },\n    });\n\n    for await (const {data} of iterator) {\n      filesChanged = [...filesChanged, ...data.map(fileData => fileData.filename)];\n    }\n  } catch (error) {\n    if (error.response) {\n      console.error(`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`)\n    }\n    console.error(error)\n  }\n\n  return filesChanged\n}\n\nasync function commentIfDataFilesChanged({owner, repo, pullNumber}) {\n  const changedFiles = await getChangedFiles({owner, repo, pullNumber});\n\n  const filePathRegex = new RegExp(/\\/data\\//, \"i\");\n  if (!changedFiles.some(fileName => filePathRegex.test(fileName))) {\n    return;\n  }\n\n  try {\n    const {data: comment} = await octokit.request(\"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\", {\n      owner: owner,\n      repo: repo,\n      issue_number: pullNumber,\n      body: `It looks like you changed a data file. These files are auto-generated. \\n\\nYou must revert any changes to data files before your pull request will be reviewed.`,\n      headers: {\n        \"x-github-api-version\": \"2026-03-10\",\n      },\n    });\n\n    return comment.html_url;\n  } catch (error) {\n    if (error.response) {\n      console.error(`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`)\n    }\n    console.error(error)\n  }\n}\n\nawait commentIfDataFilesChanged({owner: \"github\", repo: \"docs\", pullNumber: 191});\n```\n\n## Nächste Schritte\n\n* Weitere Informationen zu Octokit.js findest du in der [Dokumentation zu Octokit.js](https://github.com/octokit/octokit.js/#readme).\n* Sehen Sie sich einige Beispiele für das reale Leben an, wie GitHub Docs Octokit.js verwendet, indem [Sie das GitHub Docs-Repository durchsuchen](https://github.com/search?q=repo%3Agithub%2Fdocs%20path%3A.github%20octokit\\&type=code)."}