本文へスキップ
AllTick
障害対応

相場 API の認証失敗(401)とレート制限(429)のトラブルシューティング

HTTP ステータスコード、レスポンス ret、Token 設定、リクエスト頻度の順に 401 認証エラーと 429 レート制限を切り分ける診断ガイド。

更新日時:
保守運営:AllTick 公式エンジニアリングチーム
対象読者:認証エラーやリクエスト制限(429)に直面している開発者

要約 · 30秒開発サマリー

まず HTTP ステータスコードとレスポンス内の ret コードを確認し、「認証・権限エラー(Token 不正、期限切れ、対象外エンドポイント)」か「リクエスト過多(レート制限)」かを切り分けます。認証エラーはリトライせず即座に設定を修正し、レート制限はリクエスト集約と指数バックオフで対処します。

01

切り分け診断フロー

1HTTP ステータスコード、レスポンス本文、リクエスト時刻をログに記録する(Token はマスクする)。
2ret が 200 以外の場合、msg の内容から認証系エラーか頻度制限エラーかを判別する。
3認証系:Token の欠落、末尾の空白・改行混入、有効期限切れを確認する。
4権限系:株式用 URL で為替銘柄を照会していないか、契約プラン内の市場かを確認する。
5頻度系:全プロセス合計の秒間リクエスト数(QPS)を計測し、プラン上限と照合する。

02

症状別の原因と対策一覧

症状最も可能性の高い原因対策
全リクエストが最初から失敗Token 未指定または転記ミスToken の文字数と前後数文字を出力して確認
ローカルで成功・本番で失敗本番サーバーの環境変数が未設定デプロイ環境の環境変数・シークレット設定を確認
株式は成功・為替は失敗エンドポイントと資産クラスの不一致為替は quote-b-api、株式は quote-stock-b-api を使用
稼働後しばらくして失敗QPS またはクォータ上限の超過リクエスト頻度を抑え、バックオフを導入
複数ワーカーで同時に失敗複数プロセスが同一 Token で頻度を合算リクエストスケジューラを一本化またはキャッシュ導入

03

指数バックオフによるリトライ実装例

pythonpython
import os, random, time
import requests
def get_with_backoff(url: str, params: dict, retries: int = 5) -> dict:
delay = 1.0
for attempt in range(retries):
resp = requests.get(url, params=params, timeout=10)
body = resp.json() if resp.content else {}
if resp.status_code == 401 or body.get("ret") == 401:
raise RuntimeError(f"認証失敗 (ret=401): {body.get('msg', 'token invalid')}")
if resp.ok and body.get("ret") == 200:
return body
if attempt == retries - 1:
raise RuntimeError(f"リトライ上限到達: status={resp.status_code} body={body}")
time.sleep(delay + random.uniform(0, 0.5))
delay = min(delay * 2, 30)
return {}
if __name__ == "__main__":
url = "https://quote.alltick.co/quote-stock-b-api/trade-tick"
params = {
"token": os.getenv("ALLTICK_API_TOKEN", "YOUR_API_TOKEN"),
"query": '{"trace":"backoff-test","data":{"symbol_list":[{"code":"700.HK"}]}}',
}
print(get_with_backoff(url, params))

04

リクエスト数を削減する設計アプローチ

  • 1銘柄ずつリクエストせず、symbol_list に複数銘柄をまとめて一括照会する。
  • リアルタイム監視用途は高頻度 REST ポーリングから WebSocket プッシュ配信へ切り替える。
  • 短時間で変化しないデータはキャッシュし、複数サービス間で結果を共有する。
  • 複数プロセスからのリクエストを単一のスケジューラに集約して QPS を制御する。

仕様出典と検証記録 · 2026-10-13

以下の一次資料で関連するエンドポイント、フィールド、取引所規則を確認しました。

Python コードは Python 3.14.0 の ast.parse で構文解析を通過しました。依存関係、実行互換性、ネットワーク応答の検証は含みません。

今回の確認では実際の Token による AllTick 要求や本番エンドツーエンド試験は実行していません。再現時にプラン、ライブラリ版、取引時間、ret/trace、結果を記録してください。

導入前に再現する項目

  • 未指定・失効・権限違い Token を試し、HTTP と ret/msg を別々に確認します。必ず HTTP 401/429 になるとは限りません。
  • Token 共有 worker の制限を調整し、上限付き退避で恒久的認証失敗を再試行せず、匿名化 trace と時刻を残します。