概要
Dodo Payments APIは、APIリクエストの成功または失敗を示すために、標準のHTTPステータスコードとカスタムエラーコードを使用します。エラーが発生した場合、APIは適切なHTTPステータスコードとエラーに関する詳細情報を含むJSONレスポンスを返します。 各エラーレスポンスには以下が含まれます:- エラーの一般的なカテゴリを示すHTTPステータスコード
- エラーの正確な性質を特定する特定のエラーコード
- 何が問題だったのかを説明する人間が読めるエラーメッセージ
- 適用可能な場合、エラーに関する追加の詳細
- 統合の問題をデバッグする
- アプリケーションで適切なエラーハンドリングを実装する
- エンドユーザーに意味のあるフィードバックを提供する
- 堅牢な決済処理システムを維持する
標準APIエラーコード
| エラーコード | HTTPステータス | 説明 |
|---|---|---|
| 400 | 不正なリクエスト | リクエストが不正または無効なパラメータを含んでいました |
| 401 | 認証失敗 | 認証に失敗したか、APIキーが無効です |
| 403 | 禁止 | APIキーにリクエストされたリソースへのアクセス権がありません |
| 404 | 未検出 | リクエストされたリソースは存在しません |
| 405 | メソッド不許可 | このエンドポイントではHTTPメソッドがサポートされていません |
| 409 | 競合 | リクエストがリソースの現在の状態と競合しています |
| 422 | 処理できないエンティティ | リクエストは正しく形成されましたが、意味的なエラーが含まれています |
| 429 | リクエストが多すぎます | レート制限を超えました |
| 500 | サーバー内部エラー | サーバーで予期しないエラーが発生しました |
| 502 | 不正なゲートウェイ | サーバーが上流サーバーから無効なレスポンスを受け取りました |
| 503 | サービス利用不可 | サービスは一時的に利用できません |
| 504 | ゲートウェイタイムアウト | サーバーが上流のレスポンスを待っている間にタイムアウトしました |
エラーレスポンスフォーマット
エラーが発生した場合、APIは以下の構造を持つJSONレスポンスを返します:エラーコードリファレンス
-
ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT- Trigger: ライセンスキーのアクティベーション: 新しい制限 < 現在のインスタンス数
- Message: 新しいアクティベーション制限は現在のインスタンス数より少なくすることはできません
-
ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED- Trigger: 使用量ベースの請求サブスクリプションにアドオンを追加しようとしました
- Message: サブスクリプションのアドオンは使用量ベースの請求には対応していません
-
ADDONS_NOT_ALLOWED_FOR_ON_DEMAND- Trigger: オンデマンドサブスクリプションにアドオンを追加しようとしました
- Message: オンデマンドサブスクリプションにはアドオンは許可されていません
-
BRAND_MISMATCH- Trigger: カート内のアイテムが異なるブランドに属しています
- Message: 商品カート内のすべてのアイテムは同じブランドに属する必要があります
-
BRAND_NOT_ENABLED- Trigger: ブランドが無効または非アクティブです
- Message: 提供されたブランドは有効ではありません
-
BRAND_SUBMISSION_NOT_ENABLED- Trigger: ブランド検証再提出機能が有効になっていません
- Message: ブランド検証の再提出は有効になっていません
-
CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Trigger: キャンセル予定のサブスクリプションに対して請求しようとしました
- Message: サブスクリプションはキャンセル予定です
-
CHECKOUT_SESSION_CONSUMED- Trigger: チェックアウトセッションですでに支払いが生成されています
- Message: チェックアウトセッションはすでに消費されています
-
DISCOUNT_CODE_ALREADY_EXISTS- Trigger: 重複した割引コードの作成
- Message: 割引コードはすでに存在します
-
DISCOUNT_CODE_EXPIRED- Trigger: 割引コードが
expires_at日付を過ぎました - Message: 割引コードは期限切れです
- Trigger: 割引コードが
-
DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED- Trigger:
usage_limitに達した後に割引を再利用しました - Message: 使用制限は times_used より少なくすることはできません / 割引コードの使用制限に達しました
- Trigger:
-
DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND- Trigger: コードがオンデマンドサブスクリプションに適用されました
- Message: 割引クーポンはオンデマンドサブスクリプションには利用できません
-
DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT- Trigger: コードが無関係な商品に適用されました
- Message: 割引クーポンはこの商品には利用できません
-
DUPLICATE_LINE_ITEMS_IN_REQUEST- Trigger: 同じ
item_idがitems[]に2回表示されています - Message: items 配列に重複した item_ids が指定されています
- Trigger: 同じ
-
DUPLICATE_METER_IDS_IN_REQUEST- Trigger: 同じメーターIDがリクエスト内に複数回表示されています
- Message: 重複したメーターIDは許可されていません
-
EXCHANGE_RATE_NOT_FOUND- Trigger:
from → to通貨ペアのFXレートがありません - Message: 通貨から通貨への変換に必要な為替レートが見つかりません
- Trigger:
-
EXISTING_REFUND_REQUEST_PROCESSING- Trigger: 前回の返金リクエストがまだ処理中です
- Message: ステータスが「保留」の返金リクエストがまだ処理中です
-
INACTIVE_LICENSE_KEY- Trigger: キーのステータス ≠
ACTIVE - Message: ライセンスキーはアクティブではありません
- Trigger: キーのステータス ≠
-
INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED- Trigger: 非アクティブなサブスクリプションでのプラン変更
- Message: 非アクティブなサブスクリプションではプラン変更はサポートされていません
-
INSUFFICIENT_WALLET_FUNDS- Trigger: ウォレット残高 < デビット額
- Message: ウォレットに十分な資金がありません
-
INTEGER_CONVERSION_FAILURE- Trigger: 整数 ↔ 文字列/小数の変換がサーバー側で失敗しました
- Message: 整数変換に失敗しました
-
INTERNAL_SERVER_ERROR- Trigger: 捕捉されていない例外; サーバー側で詳細をログに記録する必要があります
- Message: 公開メッセージなし (一般的な500)
-
INVALID_DISCOUNT_CODE- Trigger: コードが存在しない / 適用できません
- Message: 無効な割引コード / 割引コードはカート内のいかなる商品にも適用できません
-
INVALID_PERCENTAGE- Trigger: 割引額が100%を超えています(または10,000ベーシスポイント)
- Message: 割引額は10000を超えることはできません / 割引コードの額は100%を超えることはできません
-
INVALID_QUANTITY- Trigger: 使用量ベースの価格設定に対して無効な数量が指定されました
- Message: 使用量ベースの価格製品では1つの数量のみが許可されています
-
INVALID_QUERY_PARAMS- Trigger: 相互排他的 / 不正なクエリパラメータ
- Message: クエリパラメータには time_frame または (start, end) のいずれかのみを含める必要があります
-
INVALID_REQUEST_BODY- Trigger: 不正なJSONまたはスキーマ違反
- Message: リクエストボディが無効です。リクエストヘッダーとオブジェクトを確認してください。
-
INVALID_REQUEST_PARAMETERS- Trigger: セマンティクスが間違っています(例: 過去の日付)
- Message: next_billing_dateを過去の時間に変更することはできません
-
INVALID_SUGGESTED_PRICE- Trigger: PWYW価格 < 最低許可価格
- Message: 提案された価格は最低価格より低くすることはできません。支払いたい金額の場合、価格は最低受け入れ金額と見なされます
-
INVALID_TAX_ID- Trigger: VAT/GST/TINの検証に失敗しました
- Message: 税IDが無効です
-
LICENSE_KEY_LIMIT_REACHED- Trigger: アクティベーション = 制限
- Message: ライセンスキーのアクティベーション制限に達しました
-
LICENSE_KEY_NOT_FOUND- Trigger: インスタンスIDまたはキーIDが無効です
- Message: ライセンスキーインスタンスが見つからないか、このライセンスキーに属していません
-
LINE_ITEM_FULLY_REFUNDED- Trigger: すでに完全に返金されたラインアイテムの返金を試みました
- Message: ラインアイテム はすでに完全に返金されているため、さらに返金することはできません。
-
LINE_ITEM_NOT_FOUND- Trigger: アイテムIDが参照された支払いの一部ではありません
- Message: ラインアイテム は支払いに見つかりません
-
LINE_ITEM_PRORATED- Trigger: プロレートされたラインに対して返金または更新を試みました
- Message: ラインアイテム はプロレートされているため、返金できません
-
LINE_ITEM_REFUND_AMOUNT_TOO_HIGH- Trigger: 返金額 > 支払額(税含む)
- Message: ラインアイテム の要求された返金額(税含む)は で、支払額 を超えています
-
LINE_ITEM_REFUND_AMOUNT_TOO_LOW- Trigger: 返金額が最低閾値を下回っています
- Message: ラインアイテム の要求された返金額は で、低すぎます
-
MAXIMUM_KEYS_REACHED- Trigger: メタデータ / カスタムフィールドが50ペアを超えました
- Message: 50のキー-バリューペアを超えています
-
MERCHANT_NOT_LIVE- Trigger: ビジネスがまだテスト/サンドボックスモードです
- Message: マーチャントはライブではありません
-
METER_IS_DELETED- Trigger: 削除されたメーターを使用しようとしました
- Message: メーターはすでに削除されています
-
MISSING_ADDON_IDS- Trigger:
addon_idリストが空または不明なID - Message: 1つ以上の製品IDが存在しません:
- Trigger:
-
MISSING_METER_IDS- Trigger: メーターIDリストが空または無効なIDを含んでいます
- Message: 1つ以上のメーターIDが存在しません:
-
MISSING_PRODUCT_INFORMATION- Trigger: 製品は存在しますが、必須情報が欠けています
- Message: 製品 は存在しますが、他の必須情報が欠けているか無効です
-
NEGATIVE_BALANCE_ADJUSTMENT- Trigger: ウォレット残高を負にしようとしました
- Message: ウォレット残高を負にすることは許可されていません
-
NO_ELIGIBLE_PAYMENT_METHODS- Trigger: フィルタリング後、何も残っていません
- Message: 利用可能な支払い方法が見つかりませんでした
-
NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS- Trigger: サブスクリプションベースのキーに有効期限を設定しようとしました
- Message: サブスクリプションベースのライセンスキーに有効期限を設定することはできません
-
NOT_FOUND- Trigger: すべての欠落リソースに対する一般的な404
- Message: アイテムが見つかりません (またはより具体的)
-
ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED- Trigger: オンデマンドのプランスワップは許可されていません
- Message: オンデマンドサブスクリプションではプラン変更はサポートされていません
-
ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED- Trigger: ビジネスに機能フラグがオフになっています
- Message: このビジネスではオンデマンドサブスクリプションは有効になっていません
-
ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED- Trigger: 使用量ベースの請求でオンデマンドを使用しようとしました
- Message: オンデマンドサブスクリプションは使用量ベースの請求には対応していません
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Trigger: PWYW製品の価格が欠落しています
- Message: 支払いたい金額製品には金額が必須です
-
PAYMENT_ALREADY_REFUNDED- Trigger: 重複した返金
- Message: この支払いはすでに返金されています
-
PAYMENT_HAS_BEEN_REFUNDED- Trigger: 支払いが完全に返金されました
- Message: 支払いIDは完全に返金されています。
-
PAYMENT_NOT_SUCCEEDED- Trigger: 失敗した支払いの返金/処理を試みました
- Message: 提供された支払いは成功していません
-
PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Trigger: キャンセル予定のサブスクリプションでプラン変更を試みました
- Message: サブスクリプションはキャンセル予定です
-
PREVIOUS_PAYMENT_PENDING- Trigger: 前の支払いが非端末状態の間に請求を作成しようとしました
- Message: 前の支払いがまだ成功していないため、新しい請求を作成できません
-
PRODUCT_CART_EMPTY- Trigger: 空の製品カートが送信されました
- Message: product_cart は空です
-
PRODUCT_IS_DELETED- Trigger: 製品がソフト削除されました
- Message: メッセージなし
-
REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT- Trigger: 集計された返金額 > 支払額
- Message: 計算された返金額が支払額より大きいです
-
REFUND_WINDOW_EXPIRED- Trigger: 許可された返金ウィンドウの外
- Message: 支払い作成後 日以内に返金を開始することはできません。support@dodopayments.com に連絡してください。
-
REQUEST_AMOUNT_BELOW_MINIMUM- Trigger: 金額 < 製品の最小値
- Message: 金額は製品に指定された最小金額より少なくすることはできません
-
SUBSCRIPTION_EXPIRED- Trigger: 過去の
ends_atの請求 - Message: サブスクリプションが期限切れのため、新しい請求を作成できません
- Trigger: 過去の
-
SUBSCRIPTION_INACTIVE- Trigger: ステータス ≠
ACTIVE - Message: サブスクリプションはアクティブではありません
- Trigger: ステータス ≠
-
SUBSCRIPTION_NOT_ON_DEMAND- Trigger: 期待されるオンデマンドですが、固定間隔が得られました
- Message: サブスクリプションはすでにオンデマンドではありません
-
SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED- Trigger: サブスクリプションの支払いリトライが最大試行回数を超えました
- Message: このサブスクリプションの最大リトライ制限である10回を超えました
-
TOO_MANY_REQUESTS- Trigger: 429 レート制限
- Message: メッセージなし
-
TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT- Trigger: 組み合わせたカート合計 < ゲートウェイの最小値
- Message: 支払いを処理するには の最小金額が必要です
-
UNABLE_TO_EDIT_PRIMARY_BRAND- Trigger: 通常のAPI経由でプライマリブランドを更新しようとしました
- Message: プライマリブランドはこのAPIエンドポイントを介して更新できません。
-
UNAUTHORIZED- Trigger: APIキーがないか、無効なトークン/スコープ
- Message: このアクションを実行する権限がありません
-
UNSUPPORTED_ACTION- Trigger: リソースタイプに対してサポートされていないアクション
- Message: 使用量ベースのサブスクリプションのプラン変更はサポートされていません
-
UNSUPPORTED_BILLING_CURRENCY- Trigger: サブスクリプションはUSDに制限されています
- Message: サブスクリプションには非USDの請求通貨はサポートされていません
-
UNSUPPORTED_COUNTRY- Trigger: 地域はまだサポートされていません
- Message: 国 は現在サポートされていません
-
UNSUPPORTED_CURRENCY- Trigger: 製品またはアドオンの通貨が無効です
- Message: 通貨は現在サポートされていません / 現在サポートされているのはUSDとINRの製品のみ / アドオン価格にはUSDとINRのみがサポートされています / 請求通貨にはUSDまたはINRのみを要求できます / 通貨はサポートされていません / インドのカードサブスクリプションに対して予期しない通貨
-
UNSUPPORTED_DISCOUNT_TYPE- Trigger: フラット額の割引などはまだライブではありません
- Message: 現在サポートされているのはパーセンテージ割引コードのみです
-
UNSUPPORTED_PAYMENT_CURRENCY- Trigger: コネクタに対して支払い通貨がブロックされています
- Message: この取引に対してINRの取引はサポートされていません
-
UNSUPPORTED_TAX_CATEGORY- Trigger: 税カテゴリ文字列が列挙型にありません
- Message: カテゴリ は現在サポートされていません
-
UNSUCCESSFUL_PAYMENT_ID- Trigger: 支払いIDが失敗した支払いを参照しています
- Message: 支払いIDは失敗したステータスです。
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Trigger: ゼロ額の支払いを返金しようとしました
- Message: ゼロ通貨額の支払いを返金することはできません
ベストプラクティス
- アプリケーション内でエラーを常に優雅に処理する
- 適切なエラーロギングを実装する
- エンドユーザーに適切なエラーメッセージを使用する
- 一時的なエラーに対してリトライロジックを実装する
- 未解決の問題についてはサポートに連絡する