Erste SchritteAnleitung
Einen API-Schlüssel sicher speichern: Umgebungsvariable, .gitignore, Leak beheben
Halte deinen CheapTokens-Schlüssel aus Code und git heraus: Setze eine Umgebungsvariable, füge .env zu .gitignore hinzu und wisse, was zu tun ist, wenn der Schlüssel leakt.

Auf dieser Seite
Bewahre den Schlüssel in einer Umgebungsvariable auf, nicht in deinem Code, und halte jede .env-Datei mit einer Zeile in .gitignore aus git heraus. Wenn ein Schlüssel bereits irgendwo öffentlich gelandet ist, kümmere dich zuerst um den Schlüssel und räume danach auf: Die Git-Historie zu bereinigen, während der Schlüssel noch in deinem Code und deinen Tools steckt, bringt nichts.
Das ist die ganze Idee. Dieser Leitfaden ist die praktische Version (die Grundlagen stehen in What is an API key): drei Befehle, eine funktionierende Anfrage und ein kurzer Plan für den schlechten Tag.
Warum der Schlüssel nicht in deinen Code gehört#
Ein API-Schlüssel ist ein Passwort, das dein Geld ausgibt. Wer ihn hat, kann Anfragen auf deine Kosten senden, und der Dienst kann ihn nicht von dir unterscheiden.
Der übliche Weg, auf dem es schiefgeht, ist langweilig. Du fügst den Schlüssel in ein Skript ein, um die erste Anfrage zum Laufen zu bringen, das Skript funktioniert, du machst git push, und das Repository ist öffentlich. Oder du schickst einem Kollegen deine Konfigurationsdatei. Oder du machst einen Screenshot von einem Fehler, bei dem der Schlüssel in der Ecke sichtbar ist. Jedes Mal dasselbe Ergebnis.
GitHub kennt dieses Muster gut. Das Secret Scanning (GitHub-Dokumentation, geprüft am 29. Oktober 2026) durchsucht die gesamte Git-Historie auf allen Branches nach fest eingebetteten Zugangsdaten und ebenso Issues, Pull Requests, Diskussionen, Wikis und geheime Gists und löst einen Alarm aus, wenn es einen findet. Das heißt: Die Zeile im nächsten Commit zu löschen, ändert nichts: Der alte Commit enthält sie noch.
Hier ist dasselbe Skript vorher und nachher.
Vergleichen
Dasselbe Skript, Schlüssel aus dem Code entfernt
Schlüssel im Code
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key="<your-key>", # pasted here: ends up in git
)Schlüssel aus der Umgebung
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)Die zweite Version kann so wie sie ist zu GitHub, in einen Chat oder in ein Code-Review. Der Schlüssel lebt auf deiner Maschine, außerhalb der Datei.
Schritt 1: Den Schlüssel in eine Umgebungsvariable legen#
Eine Umgebungsvariable ist ein benannter Wert, den dein Terminal jedem Programm übergibt, das es startet. Das Skript fragt nach CHEAPTOKENS_ über den Namen und sieht nie, woher er kommt.
Unter macOS und Linux:
export CHEAPTOKENS_API_KEY="<your-key>"Unter Windows PowerShell:
setx CHEAPTOKENS_API_KEY "<your-key>"Zwei Details bringen Leute zum Stolpern. export gilt nur für dieses Terminalfenster; um ihn zu behalten, füge die Zeile zu deinem Shell-Profil hinzu (~/.zshrc oder ~/.bashrc). Und setx ändert nicht das Fenster, in dem du es eingegeben hast: Öffne ein neues Terminal, bevor du testest.
Jetzt eine vollständige Anfrage. Sie nutzt den OpenAI-kompatiblen Endpunkt https:/ und DeepSeek-V4-Flash mit seiner vollständigen ID (deepseek-; nimm IDs aus der CheapTokens-Dokumentation, da sich die Namen zwischen Anbietern unterscheiden):
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)
print(resp.usage)Eine kurze Begrüßung ist eine Anfrage von etwa 20 Tokens rein und 20 raus, was zu aktuellen Preisen $0.0000023 entspricht (die vollständige Liste steht auf der Preisseite). Wenn du noch keine erste Anfrage gesendet hast, führt dich Your first API request with CheapTokens von null an durch.
Die Antwort des Modells kommt in choices[0]. zurück, und usage zeigt die gezählten Tokens. Der Schlüssel erscheint nie in der Datei.

Schritt 2: Eine .env-Datei verwenden, ohne sie zu committen#
export in jedem neuen Fenster einzutippen, wird lästig. Eine .env-Datei hält den Wert an einer Stelle, neben dem Projekt:
CHEAPTOKENS_API_KEY=<your-key>Python liest sie mit python-dotenv (pip install python-):
from dotenv import load_dotenv
load_dotenv() # fills os.environ from .envDie Datei ist nur sicher, wenn git sie nie sieht. Füge sie vor dem ersten Commit zu .gitignore hinzu:
echo ".env" >> .gitignore
git check-ignore -v .envWenn alles stimmt, gibt der zweite Befehl etwas wie . aus: git sagt dir, welche Regel die Datei ignoriert. Wenn er nichts ausgibt, funktioniert die Regel nicht. Erstelle unter Windows .gitignore in einem Editor mit einer Zeile .env oder verwende Add-: PowerShells >> kann UTF-16 schreiben, was git möglicherweise ignoriert.
Eine Falle: .gitignore wirkt nur auf Dateien, die git noch nicht verfolgt. Wenn .env bereits einmal committet wurde, führe git rm - aus, damit git aufhört, sie zu verfolgen, und behandle den darin enthaltenen Schlüssel als offengelegt (mehr dazu unten). Eine saubere Angewohnheit ist, eine .env.example mit dem Variablennamen und einem Platzhalter statt des Werts zu committen, damit ein Teammitglied weiß, was es setzen muss.
Wenn der Schlüssel geleakt ist: Was zu tun ist, in welcher Reihenfolge#
Vielleicht ist der Schlüssel in ein öffentliches Repo gelangt, vielleicht stand er in einem Screenshot, vielleicht hast du die ganze Konfiguration in einen Forumsthread eingefügt. Die Reihenfolge ist wichtiger als die Geschwindigkeit eines einzelnen Schritts.
GitHubs eigene Empfehlung (dieselbe Seite, geprüft am 29. Oktober 2026) ist, die Zugangsdaten sofort zu rotieren; die Git-Historie umzuschreiben ist optional und oft unnötig, sobald die Zugangsdaten widerrufen sind. Leute neigen dazu, es umgekehrt zu machen: Sie verbringen eine Stunde mit dem Bereinigen der Historie, während der Schlüssel noch funktioniert. Tu das nicht.
Wähle deinen Fall
Was ist mit deinem Schlüssel passiert? Wähle den nächstliegenden Fall
Wähle eine Option, um die Antwort zu sehen
Der Schlüssel war in einem Commit, der jetzt öffentlich ist
Entferne den Schlüssel zuerst aus dem Code, wechsle zur Umgebungsvariable, füge .env zu .gitignore hinzu und prüfe dein Guthaben auf Anfragen, die du nicht gesendet hast. Die Historie zu bereinigen ist danach ein Nice-to-have, nicht der dringende Teil.
Der Schlüssel war in einem Screenshot oder einer geteilten Datei
Gleiche Reihenfolge: Höre auf, diesen Schlüssel in deinen Tools zu verwenden, und wechsle zur Umgebungsvariable, dann lösche den Beitrag oder die Datei, wenn du kannst. Ein gelöschter Screenshot wurde möglicherweise bereits kopiert, also verlass dich nicht allein auf das Löschen.
Derselbe Schlüssel wird in mehreren Tools verwendet
Gehe jeden Ort durch, an dem der Schlüssel lag: dein Shell-Profil, .env-Dateien, Editor- und Terminal-Tools, und richte jedes auf die Umgebungsvariable aus, sodass es nur eine Stelle zum Ändern gibt. Wenn ein Tool die Variable nicht lesen kann, zeigt der 401/404-Fehlerbehebungsleitfaden, wie der Fehler aussieht.

Sende nach der Bereinigung eine kleine Testanfrage wie in Schritt 1 und prüfe dein Guthaben. Wenn sie antwortet und Guthaben und Anfragen normal aussehen, ist die Bereinigung abgeschlossen; behalte das Guthaben in den nächsten Tagen im Auge. Ein Schlüssel, der öffentlich war, sollte als offengelegt behandelt werden, auch nachdem du ihn aus dem Code entfernt hast, also achte auf Guthaben und Anfragezahl auf alles, was du nicht gesendet hast, und verwende diesen Schlüssel nicht an neuen Stellen wieder. Zu den Orten, an denen ein Schlüssel typischerweise lebt, siehe Where to plug in your own API key.
Prüf dich selbst#
Probier es selbstProbier es aus: Hebe die Variable auf und führe das Skript aus. Was siehst du?Antwort anzeigen
Python bricht mit KeyError: 'CHEAPTOKENS_ ab, bevor eine Anfrage deine Maschine verlässt. Das ist der gute Fehlerfall: Das Skript weigert sich, ohne den Schlüssel zu laufen, statt still einen eingefügten zu verwenden. Wenn du stattdessen einen 401 siehst, ist die Variable gesetzt, aber der Schlüssel falsch; prüfe den Schlüssel und die Adresse anhand des 401/404-Leitfadens.



