Початок роботиПосібник
Безпечне зберігання API-ключа: змінна середовища, .gitignore, виправлення витоку
Тримайте свій ключ CheapTokens поза кодом і git: задайте змінну середовища, додайте .env до .gitignore і знайте, що робити, якщо ключ витече.

На цій сторінці
Тримайте ключ у змінній середовища, а не в коді, і не додавайте файл .env до git — додайте рядок у .gitignore. Якщо ключ уже потрапив у публічний доступ, спершу розберіться з ключем, а прибирання робіть після: чистити історію git, поки ключ досі лежить у вашому коді та інструментах, нічого не виправляє.
Ось і вся ідея. Цей посібник — практична версія (основи — у What is an API key): три команди, один робочий запит і короткий план на поганий день.
Чому ключу не місце в коді#
API-ключ — це пароль, який витрачає ваші гроші. Будь-хто, хто його має, може надсилати запити за ваш рахунок, і сервіс не відрізнить їх від вас.
Зазвичай усе ламається нудно. Ви вставляєте ключ у скрипт, щоб отримати перший робочий запит, скрипт працює, ви робите git push, і репозиторій стає публічним. Або надсилаєте колезі свій файл конфігурації. Або робите скриншот помилки, де ключ видно в кутку. Результат щоразу той самий.
GitHub добре знає цей патерн. Його сканування секретів (GitHub docs, перевірено 29 жовтня 2026) переглядає всю історію Git на всіх гілках у пошуках захардкоджених облікових даних, а також issues, pull requests, discussions, вікі та секретні gists, і піднімає тривогу, коли щось знаходить. Тобто видалення рядка в наступному коміті нічого не змінює: у старому коміті він досі є.
Ось той самий скрипт до і після.
Порівняйте
Той самий скрипт, ключ винесено з коду
Ключ у коді
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key="<your-key>", # pasted here: ends up in git
)Ключ зі змінної середовища
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
)Другу версію можна як є відправити на GitHub, у чат чи на код-рев'ю. Ключ живе на вашій машині, поза файлом.
Крок 1: покладіть ключ у змінну середовища#
Змінна середовища — це іменоване значення, яке ваш термінал передає кожній програмі, яку запускає. Скрипт запитує CHEAPTOKENS_ за назвою і ніколи не бачить, звідки воно взялося.
На macOS і Linux:
export CHEAPTOKENS_API_KEY="<your-key>"У Windows PowerShell:
setx CHEAPTOKENS_API_KEY "<your-key>"Дві деталі найчастіше збивають з пантелику. export діє лише для цього вікна терміналу, тож щоб зберегти його, додайте рядок у свій профіль оболонки (~/.zshrc або ~/.bashrc). А setx не змінює вікно, у якому ви його ввели: відкрийте новий термінал перед перевіркою.
Тепер повний запит. Він використовує OpenAI-сумісний ендпоінт https:/ і DeepSeek-V4-Flash з повним id (deepseek-; беріть id з документації CheapTokens, бо назви різняться між провайдерами):
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)Коротке привітання — це запит приблизно на 20 токенів на вході й 20 на виході, що за поточними цінами становить $0.0000023 (повний список — на сторінці цін). Якщо ви ще не надсилали першого запиту, Your first API request with CheapTokens проведе вас від нуля.
Відповідь моделі повертається в choices[0]., а usage показує пораховані токени. Ключ у файлі не з'являється.

Крок 2: використовуйте файл .env, не комітячи його#
Вводити export у кожному новому вікні набридає. Файл .env тримає значення в одному місці, поруч із проєктом:
CHEAPTOKENS_API_KEY=<your-key>Python читає його через python-dotenv (pip install python-):
from dotenv import load_dotenv
load_dotenv() # fills os.environ from .envФайл безпечний лише тоді, коли git його ніколи не бачить. Додайте його до .gitignore до першого коміту:
echo ".env" >> .gitignore
git check-ignore -v .envЯкщо все правильно, друга команда виведе щось на кшталт .: git підкаже, яке правило ігнорує файл. Якщо вона нічого не виводить, правило не працює. У Windows створіть .gitignore у редакторі з рядком .env або скористайтеся Add-: >> у PowerShell може записати UTF-16, який git може проігнорувати.
Одна пастка: .gitignore впливає лише на файли, які git ще не відстежує. Якщо .env уже колись було закомічено, виконайте git rm -, щоб git перестав його відстежувати, і вважайте ключ усередині скомпрометованим (докладніше нижче). Корисна звичка — комітити .env.example з назвою змінної та плейсхолдером замість значення, щоб колега знав, що треба встановити.
Якщо ключ витік: що робити, по порядку#
Можливо, ключ потрапив у публічний репозиторій, можливо, засвітився на скриншоті, можливо, ви вставили весь конфіг у гілку форуму. Порядок важливіший за швидкість будь-якого окремого кроку.
Власна настанова GitHub (та сама сторінка, перевірено 29 жовтня 2026) — негайно відкликати облікові дані; переписування історії Git необов'язкове і часто непотрібне, щойно облікові дані відкликано. Люди зазвичай роблять навпаки: витрачають годину на чищення історії, поки ключ досі працює. Не робіть так.
Оберіть свій випадок
Що сталося з вашим ключем? Виберіть найближчий випадок
Виберіть варіант, щоб побачити відповідь
Ключ був у коміті, який тепер публічний
Спершу приберіть ключ з коду, перейдіть на змінну середовища, додайте .env до .gitignore і перегляньте баланс на предмет запитів, яких ви не надсилали. Чищення історії — приємний бонус потім, а не нагальна частина.
Ключ був на скриншоті або в поширеному файлі
Той самий порядок: припиніть використовувати цей ключ у своїх інструментах і перейдіть на змінну середовища, потім видаліть пост або файл, якщо можете. Видалений скриншот, можливо, вже скопіювали, тож не покладайтеся лише на видалення.
Той самий ключ використовується в кількох інструментах
Пройдіться кожним місцем, де був ключ: ваш профіль оболонки, файли .env, інструменти редактора й терміналу, — і налаштуйте кожне на змінну середовища, щоб було одне місце для зміни. Якщо інструмент не може прочитати змінну, 401/404 troubleshooting guide покаже, як виглядає помилка.

Після прибирання надішліть один невеликий тестовий запит, як у Кроці 1, і перевірте баланс. Якщо він відповідає, а баланс і запити виглядають нормально, прибирання завершено; стежте за балансом наступні кілька днів. Ключ, що був публічним, слід вважати скомпрометованим навіть після видалення з коду, тож слідкуйте за балансом і кількістю запитів на предмет того, чого ви не надсилали, і не використовуйте цей ключ у нових місцях. Про місця, де зазвичай живе ключ, дивіться Where to plug in your own API key.
Перевірте себе#
Спробуйте саміСпробуйте: скасуйте змінну й запустіть скрипт. Що ви бачите?Показати відповідь
Python зупиняється з KeyError: 'CHEAPTOKENS_ ще до того, як будь-який запит покине вашу машину. Це хороша відмова: скрипт відмовляється працювати без ключа, а не тихо використовує вставлений. Якщо натомість ви бачите 401, змінна встановлена, але ключ неправильний; перевірте ключ і адресу за 401/404 guide.



