概要
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: Usage Based Billing のサブスクリプションではアドオンはサポートされていません
-
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: 重複した Meter Id は許可されていません
-
EXCHANGE_RATE_NOT_FOUND- Trigger:
from → to通貨ペアのFXレートがありません - Message: Currency から Currency への為替レートが見つかりません
- Trigger:
-
EXISTING_REFUND_REQUEST_PROCESSING- Trigger: 前回の返金リクエストがまだ処理中です
- Message: ステータス「Pending」の返金リクエストがまだ処理中です
-
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: 推奨価格は最低価格より低くできません。Pay What You Want の場合、価格は受け入れ可能な最低金額として扱われます
-
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: 存在しない商品IDがあります:
- Trigger:
-
MISSING_METER_IDS- Trigger: メーターIDリストが空、または無効なIDが含まれています
- Message: 存在しないメーター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: Usage Based Billing ではオンデマンドサブスクリプションはサポートされていません
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Trigger: PWYW製品で価格が指定されていません
- Message: Pay as you want 製品には金額の指定が必要です
-
PAYMENT_ALREADY_REFUNDED- Trigger: 重複した返金です
- Message: この支払いは既に返金されています
-
PAYMENT_HAS_BEEN_REFUNDED- Trigger: 支払いが全額返金されています
- Message: Payment 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 のみサポートされています / billing_currency には USD または INR のみ要求できます / 通貨はサポートされていません / インドのカードサブスクリプションには予期しない通貨です
-
UNSUPPORTED_DISCOUNT_TYPE- Trigger: 定額割引などはまだ公開されていません
- Message: 現在は割合割引コードのみサポートされています
-
UNSUPPORTED_PAYMENT_CURRENCY- Trigger: コネクタで支払い通貨がブロックされています
- Message: このトランザクションではINR取引はサポートされていません
-
UNSUPPORTED_TAX_CATEGORY- Trigger: 税カテゴリ文字列が列挙に含まれていません
- Message: カテゴリ は現在サポートされていません
-
UNSUCCESSFUL_PAYMENT_ID- Trigger: 支払いIDが成功しなかった支払いを参照しています
- Message: Payment ID は成功していないステータスです。
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Trigger: 金額ゼロの支払いを返金しようとしました
- Message: 通貨金額ゼロの支払いは返金できません
ベストプラクティス
- アプリケーション内でエラーを常に優雅に処理する
- 適切なエラーロギングを実装する
- エンドユーザーに適切なエラーメッセージを使用する
- 一時的なエラーに対してリトライロジックを実装する
- 未解決の問題についてはサポートに連絡する