OpenAIのAPIキー取得方法|2024年7月最新版|料金体系や注意事項

## はじめに

先日DALL･E APIを使ったシステムを作る機会があったので、APIキーの取得方法についてまとめておきます。
用途に関わらず取得方法は同じです。

## 手順

この順番である必要はないのですが、私が取得した時の流れで説明します。

1. [APIキーを取得する](#apiキーを取得する)
2. [支払い情報を登録する](#支払い情報を登録する)
3. [クレジットを購入する](#クレジットを購入する)
4. [実行確認をする](#実行確認をする)

## APIキーを取得する

APIキーは[OpenAIプラットフォーム](https://platform.openai.com/)から取得することができます。
アカウントが必要になるので右上からログインまたはアカウント作成をしてください。
ChatGPTのアカウントを持っていれば同じアカウントでログインが可能です。

![openai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/c2ac4c11-e982-da1e-748c-3a113858bd74.png)

ログインしたら上部メニューから「Dashboard」に移動し、左のメニューから「API keys」を選択します。ここでAPIキーの作成ができます。


![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/92eebb46-f1a6-6307-ff0c-5f859c7ce881.png)


作成自体は支払い情報を登録せずともできますが、利用にはAPI用のクレジットを購入する必要があります(以前は無料クレジットが貰えていましたが廃止されたようです)。

画面に以下のようなメッセージが出ている場合は「Start verification」から電話番号認証を行なってください。

![verify_phone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/32f56047-f820-6090-ceed-bfa3b074f861.png)

「+ Create new secret key」をクリックするとAPIキーを作成することができます。画面中央、上部どちらのボタンでも構いません。

![dashboard2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/ceb2da6c-adf3-d1ee-b8cd-c321e5d47a45.png)

作成するAPIキーの設定を入力します。

![crete_api_key.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/6f76f0cc-8d54-d975-ae91-20fa2433e6a5.png)

::: note info
- Owned by: 紐付け先の選択
  - You: 個人アカウントに対して紐付け
  - Service Account: サービスアカウントに対して紐付け
- Name: 識別用の名前。必須でない
- Project: APIキーを紐付けるプロジェクト。プロジェクトを分けたい場合は画面左上から作成可能
- Permissions: APIキーの権限
  - All: 全権限を与える
  - Restricted: 制限付きの権限。選択すると詳細設定欄が表示され、エンドポイントごとでの設定が可能
  - Read Only: 読み取り権限のみ与える
:::

迷ったら何も変更せずに「Create secret key」をクリックして大丈夫です。
作成後すぐにAPIキーが表示されるのでコピーして保管しておいてください。この画面を閉じてしまうと再表示はできません。

![api_key.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/8b66e679-7659-240d-83c8-7a1744a95636.png)

作成したAPIキーは一覧で表示されます。
もしAPIキーを保存し忘れた、漏洩したという場合は削除してもう一度作成してください。ゴミ箱アイコンをクリックすると削除が可能です。
編集したい場合はその横のアイコンをクリックしてください。名前・権限の変更は作成後も可能です。

![API_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/f60c8145-66d2-dc53-6ff6-88798e6ecea1.png)

## 支払い情報を登録する

APIキーの登録ができたら支払い情報の登録をします。OpenAIとChatGPTの支払いは別物なので、既に有償版のChatGPTを利用している場合等でも別途登録する必要があります。

画面右上の歯車アイコンをクリックして設定画面に移動し、左のメニューから「Billing」を選択します。
支払い情報を追加していない場合クレジット残高の下に「Add payment details」というボタンが表示されるのでクリックします。

![setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/3ba5a92e-061c-409c-e9c7-24a5922286b7.png)

登録できる支払い情報はクレジットカードのみです。個人での利用(Individual)か会社での利用(Company)かを選んで、必要な情報を入力してください。

![payment_user.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/a128f3f5-2655-9fc4-dc7d-dafff93354e4.png)

Individualの場合
![creditcard_info_individual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/03a57552-b2a0-601e-01a6-1a83fb788823.png)

Companyの場合
![creditcard_info_company.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/6ff6e260-fef1-2f5c-0da5-8fff69c88f79.png)

## クレジットを購入する

支払い情報を登録した後はAPI用のクレジットを購入する必要があります(\\$5~100)。一度に保有できるクレジットの上限は\\$100です。
クレジットの有効期間は1年のようなのであらかじめ大量に買っておく、というのはお勧めしません。
<https://openai.com/policies/service-credit-terms/>
>All sales of Services, including sales of prepaid Services, are final. Service Credits are not refundable and expire one year after the date of purchase or issuance if not used, unless otherwise specified at the time of purchase.

クレジットの自動リチャージも設定できるので必要に応じて設定してください。オンオフ、閾値の設定は後から変更可能です。

![recharge_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/7ef93649-93f3-c315-27e6-15ee24546aae.png)

::: note info
- When credit balance goes below(上部入力欄)
  - クレジット残高が入力した値以下になったら自動リチャージする($5~95)
- Bring credit balance back up to(下部入力欄)
  - 自動リチャージ時にクレジット残高を入力した値まで補充する($10~100)

上に10、下に50を入力した場合は「クレジット残高が\\$10以下になったら\\$50までリチャージする」という動きになります。
:::

また、月の利用上限やアラートメールについては「Limits」から設定できます。

![usage_limits.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954468/fa0d1f5a-a2d6-da80-b486-d756def83169.png)

## 実行確認をする

上記手順が終わればAPI経由で様々なモデルを利用することができます。

実行確認したいだけであれば`curl`コマンドを使うのが一番手軽かと思います。以下は画像生成の実行コマンドです。返ってきたURLにアクセスして画像が確認できればOKです。
`$OPENAI_API_KEY`の部分は環境変数にあらかじめ設定しておくかAPIキーに置き換えてください。

```bash
curl https://api.openai.com/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "dall-e-3",
    "prompt": "a white siamese cat",
    "n": 1,
    "size": "1024x1024"
  }'
```

テキスト生成を試したい場合は以下のようなコマンドになります。

```bash
curl https://api.openai.com/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "model": "gpt-3.5-turbo",
        "messages": [
          {
            "role": "system",
            "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."
          },
          {
            "role": "user",
            "content": "Compose a poem that explains the concept of recursion in programming."
          }
        ]
      }'
```
実行に失敗した場合は以下のようにエラーが返ってきます。
```bash
{
    "error": {
        "message": "You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.",
        "type": "insufficient_quota",
        "param": null,
        "code": "insufficient_quota"
    }
}
```

上記エラーはAPI利用のためのクレジットが不足している場合のエラーです。正常にクレジットが購入できているかを確認してください。
その他のエラーが返ってきた場合には対応する[エラーコード](https://platform.openai.com/docs/guides/error-codes/api-errors)を探して、設定やリクエスト内容を見直してください。

価格は利用するモデル等によって変わるので[こちら](https://openai.com/api/pricing/)から確認してください。
使い方についても[ドキュメント](https://platform.openai.com/docs/guides/text-generation)に用途ごとの使用例が載っています。

ちなみに上記ドキュメントからはコード内でのAPIキー指定方法が見つけられなかったのですが、以下のようにすれば良いようです。

```py
from openai import OpenAI
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") # 環境変数に設定したAPIキーを取得

client = OpenAI(api_key=OPENAI_API_KEY) # APIキーの指定

response = client.images.generate(
  model="dall-e-3",
  prompt="a white siamese cat",
  size="1024x1024",
  quality="standard",
  n=1,
)

image_url = response.data[0].url
```

## 関連URL

不明点については以下のリンクを確認してみてください。

- [ドキュメント](https://beta.openai.com/docs/)
- [価格](https://openai.com/api/pricing/)
- [よくある質問](https://help.openai.com/)
- [開発者フォーラム](https://community.openai.com/)

もしくは無料版でも使えるようになったGPT-4oを使ってChatGPTに聞くと参考サイトと一緒に教えてくれます。誤った情報や古い情報を渡してくることもあるので最終確認は必要です。

## おわりに

個人で従量課金サービスを使うとなると使い過ぎてしまいそうで怖いのですが、OpenAIはプリペイド式なので使い過ぎの心配が少なくて良いですね。
今回購入したクレジットがまだ残っているので、有効期限が切れる前に何か作りたいなと思います。