> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laozhang.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# ログ照会API：呼び出しログと課金額をコードで取得

> AccessTokenで /api/log/self を呼び出し、期間・モデル・APIキーで使用記録とチャージ記録を絞り込み、ページをたどって照合に使えます。

ログ照会APIは、コンソールのログ画面と同じ記録（呼び出しごとのモデル、APIキー、トークン数、課金額）を返します。日次の照合、キーごとの使用量レポート、自社の請求システムへの取り込みに使えます。

| 項目 | 内容 |
| - | - |
| エンドポイント | `GET https://api.laozhang.ai/api/log/self` |
| 認証 | アカウントのAccessToken。取得方法は[残高照会API](https://docs.laozhang.ai/ja/api-capabilities/balance-query.md)を参照 |
| ページング | 1ページ10件。`p` は0から始まります |
| クォータ | 500,000クォータ = 1米ドル |

> [!WARNING]
>
> **無効なトークンでも、HTTP 200が返ります。**
>
> * ボディは `{"success": false, "message": "...access token is invalid."}` で、`data` はありません。
> * スクリプトでは `success` を確認してください。ステータスコードだけを見ていると、認証の失敗が空のログに見えてしまいます。

## クエリパラメーター

| パラメーター | 説明 |
| - | - |
| `p` | ページ番号。`0` から始まります |
| `type` | 記録の種類。`2` が使用、`1` がチャージです。省略するとすべての種類を返します |
| `model_name` | `gpt-5.4-mini` など、1つのモデルだけに絞り込みます |
| `token_name` | APIキーの名前で、1つのキーだけに絞り込みます |
| `start_timestamp` | 開始時刻（Unix秒） |
| `end_timestamp` | 終了時刻（Unix秒） |

ページサイズは固定で、`page_size` と `size` は無視されます。レスポンスに総件数は含まれないため、10件未満のページが返るまで次のページを取得し続けてください。

## リクエストを送る

AccessTokenを環境変数に設定します。

```bash theme={null}
export LAOZHANG_ACCESS_TOKEN="your AccessToken"
```

直近1時間の `gpt-5.4-mini` の使用記録を取得します。

```bash theme={null}
END=$(date +%s)
START=$((END - 3600))

curl --compressed -s -G "https://api.laozhang.ai/api/log/self" \
  -H "Authorization: ${LAOZHANG_ACCESS_TOKEN}" \
  --data-urlencode "p=0" \
  --data-urlencode "type=2" \
  --data-urlencode "model_name=gpt-5.4-mini" \
  --data-urlencode "start_timestamp=${START}" \
  --data-urlencode "end_timestamp=${END}"
```

`Authorization` にはAccessTokenをそのまま指定します。`Bearer ` を前に付けても使えます。

## レスポンスのフィールド

```json theme={null}
{
  "success": true,
  "message": "",
  "data": [
    {
      "created_at": 1791992057,
      "type": 2,
      "model_name": "gpt-5.4-mini",
      "token_name": "prod-backend",
      "quota": 1531,
      "prompt_tokens": 1348,
      "completion_tokens": 456,
      "is_stream": false,
      "request_id": "20261014153321000000000000000000example",
      "other": "{\"model_ratio\":0.375,\"completion_ratio\":6,...}"
    }
  ]
}
```

| フィールド | 説明 |
| - | - |
| `created_at` | 記録時刻（Unix秒） |
| `type` | `2` が使用、`1` がチャージ |
| `model_name` | 呼び出されたモデルID |
| `token_name` | 呼び出したAPIキーの名前 |
| `quota` | この記録の課金額。500,000で割ると米ドルになります |
| `prompt_tokens`、`completion_tokens` | 入力と出力のトークン数。回数課金のモデルでは0になることがあります |
| `is_stream` | ストリーミングのリクエストだったかどうか |
| `request_id` | サポートに問い合わせるときに伝えるリクエストID |
| `other` | 課金の詳細。JSONの**文字列**なので、もう一度パースします |

`other` には、倍率、キャッシュヒット、ツール利用料が含まれます。[Web検索](https://docs.laozhang.ai/en/api-capabilities/web-search.md)のリクエストでは、`web_search_billing` に検索回数とその費用が入ります。合計の課金額だけが必要なら、`quota` を読んでください。レスポンスにはほかのフィールドが含まれることもあるので、使わないものは無視して構いません。

## 1日分の使用量をモデル別に集計する

次のスクリプトは、すべてのページをたどり、モデルごとの課金額を合計します。Python 3.9以降と `requests` が必要です（`python -m pip install requests`）。

```python theme={null}
import os
import time
from collections import defaultdict

import requests

TOKEN = os.environ["LAOZHANG_ACCESS_TOKEN"]
URL = "https://api.laozhang.ai/api/log/self"
QUOTA_PER_USD = 500_000

end = int(time.time())
start = end - 24 * 3600
totals = defaultdict(int)
page = 0

while True:
    response = requests.get(
        URL,
        headers={"Authorization": TOKEN},
        params={"p": page, "type": 2, "start_timestamp": start, "end_timestamp": end},
        timeout=60,
    )
    response.raise_for_status()
    payload = response.json()
    if not payload.get("success"):
        raise RuntimeError(payload.get("message"))

    rows = payload["data"] or []
    for row in rows:
        totals[row["model_name"]] += row["quota"]
    if len(rows) < 10:
        break
    page += 1
    time.sleep(0.2)

for model, quota in sorted(totals.items(), key=lambda item: -item[1]):
    print(f"{model}: ${quota / QUOTA_PER_USD:.4f}")
```

利用の多いアカウントでは、1日で数千ページになることがあります。取得する期間を短く区切るか、`model_name` や `token_name` でクエリを絞り込んでください。

## エラー

| 症状 | 原因と対処 |
| - | - |
| HTTP 401と `AUTH_REQUIRED` | `Authorization` ヘッダーがありません |
| HTTP 200で `success: false`、メッセージが"access token is invalid" | AccessTokenが誤っているか、再生成されています。コンソールで新しいものを取得してください |
| 空の配列 | 指定した期間に該当する記録がありません。タイムスタンプがミリ秒ではなく秒になっているか確認してください |
| 出力の文字化け、または `jq` のエラー | レスポンスがgzipで圧縮されています。cURLに `--compressed` を付けてください |

## 関連ドキュメント

* AccessTokenの取得と残高の確認：[残高照会API](https://docs.laozhang.ai/ja/api-capabilities/balance-query.md)
* APIキーの作成・無効化・削除をコードから：[トークン管理API](https://docs.laozhang.ai/ja/api-capabilities/token-management.md)
* コンソールのログ画面で課金額を読む：[呼び出しログの見方と使い方](https://docs.laozhang.ai/en/faq/call-logs.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.