> ## 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 키, 토큰 수, 청구액을 반환합니다. 일일 정산, API 키별 사용량 리포트, 청구액을 자체 과금 시스템에 적재하는 작업에 쓸 수 있습니다.

| 항목 | 내용 |
| - | - |
| 엔드포인트 | `GET https://api.laozhang.ai/api/log/self` |
| 인증 | 계정 AccessToken. [AccessToken 발급](https://docs.laozhang.ai/ko/api-capabilities/balance-query.md) 참고 |
| 페이지 나누기 | 페이지당 기록 10개, `p`는 0부터 시작 |
| Quota | 500,000 quota = 1 USD |

> [!WARNING]
>
> **잘못된 토큰도 HTTP 200으로 응답합니다.**
>
> * 본문은 `data` 없이 `{"success": false, "message": "...access token is invalid."}`입니다.
> * 스크립트에서 `success`를 확인하세요. 상태 코드만 보면 인증 실패가 빈 로그처럼 보입니다.

## 쿼리 파라미터

| 파라미터 | 설명 |
| - | - |
| `p` | 페이지 번호. `0`부터 시작 |
| `type` | 기록 유형. `2`는 사용, `1`은 충전. 생략하면 모든 유형 |
| `model_name` | `gpt-5.4-mini`처럼 모델 하나만 반환 |
| `token_name` | 이름으로 지정한 API 키 하나만 반환 |
| `start_timestamp` | 시작 시각(Unix 초) |
| `end_timestamp` | 종료 시각(Unix 초) |

페이지 크기는 고정이며 `page_size`와 `size`는 무시됩니다. 응답에 전체 개수가 없으므로, 기록이 10개 미만인 페이지가 나올 때까지 다음 페이지를 계속 요청하세요.

## 요청 보내기

AccessToken을 환경 변수에 저장합니다.

```bash theme={null}
export LAOZHANG_ACCESS_TOKEN="발급받은 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`에는 배율, 캐시 적중, 도구 사용 요금이 들어 있습니다. [웹 검색](https://docs.laozhang.ai/en/api-capabilities/web-search.md) 요청은 `web_search_billing`에 검색 횟수와 비용이 나옵니다. 총 청구액만 필요하면 `quota`를 읽으세요. 응답에는 다른 필드도 있을 수 있으니 쓰지 않는 필드는 무시하세요.

## 하루치 사용량을 내려받아 모델별로 합산

이 스크립트는 모든 페이지를 순회하며 모델별 청구액을 합산합니다. 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}")
```

호출이 많은 계정은 하루에 수천 페이지가 될 수 있습니다. 조회 기간을 짧게 나누거나 `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/ko/api-capabilities/balance-query.md)
* 코드로 API 키 생성, 비활성화, 삭제: [토큰 관리 API](https://docs.laozhang.ai/ko/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.