Skip to main content

概要

リクエストが失敗すると、Dodo Payments API は HTTP ステータスコードと、エラーを示す JSON 本文を返します。このページを使用して、エラーの原因と解決方法を確認してください。 各エラーレスポンスには次の内容が含まれます。
  • エラーの大まかな分類を示す HTTP ステータスコード。
  • 正確なエラーを識別する code(例: UNSUPPORTED_COUNTRY)。
  • エラーを平易な言葉で説明する message。message は、内部サーバーエラーなどの場合、null になることがあります。
エラー処理の分岐には message ではなく code を使用してください。原因に応じて、複数のメッセージを返すコードもあります。 次のエラーコードを使用して、以下を行えます。
  • 統合に関する問題をデバッグする。
  • アプリケーションでエラーを正しく処理する。
  • 顧客に意味のあるフィードバックを表示する。
  • 決済処理の信頼性を維持する。
これらは API およびビジネスロジック のエラーです。失敗した決済で返される カード拒否理由(INSUFFICIENT_FUNDS や CARD_DECLINED など)については、Transaction Failures のリファレンスを参照してください。

標準 API エラーコード

API はエラーに対して次の HTTP ステータスコードを使用します。

エラーレスポンスの形式

エラーレスポンス本文には、code と message の 2 つのフィールドが含まれます。

エラーコードリファレンス

以下のエラーコードは、関連する API の領域ごとに分類されています。各項目には、エラーを発生させる条件と API が返すメッセージが記載されています。{id} などのプレースホルダーは、API が値を入力する部分を示します。

Authentication & Account

  • UNAUTHORIZED
    • Trigger: リクエストに API key がないか無効である(HTTP 401)、または API key に操作に必要なロールがない(HTTP 403)
    • Message: この操作を実行する権限がありません
  • MERCHANT_NOT_LIVE
    • Trigger: live payments が有効になっていないビジネスに対する live mode のリクエスト(HTTP 403)。test mode のみを使用しているビジネスや、verification が完了していないため live payments がまだ有効になっていないビジネスが該当します。test mode のリクエストには影響しません。
    • Message: Merchant の live payments が有効になっていません
  • BUSINESS_ARCHIVED
    • Trigger: アーカイブ済みのビジネスに対する顧客向けリクエスト(HTTP 403)。checkout、payment links、storefront、Customer Portal、license key activation が該当します。
    • Message: このビジネスはアーカイブされており、リクエストを受け付けなくなっています

Payments & Checkout

  • CHECKOUT_SESSION_CONSUMED
    • Trigger: checkout session がすでに決済を生成している(HTTP 403)。代わりに新しい checkout session を作成してください。
    • Message: 指定された checkout session による決済はすでに生成されています。
  • MANUAL_RETRY_ALREADY_PAID
    • Trigger: 決済がすでに成功している renewal invoice に対する Manual retry。再送すると顧客に二重請求されます。
    • Message: この invoice の決済はすでに成功しています
  • MANUAL_RETRY_HARD_DECLINE
    • Trigger: invoice の最新の失敗が hard decline である場合、または分類済みのエラーコードがない場合の manual retry。同じカードへの再請求は成功しないため、代わりに payment method を更新してください。
    • Message: この invoice の最後の失敗は hard decline のため、再試行は成功しません (or) この invoice の最後の失敗は分類できないため、再試行できません
  • MANUAL_RETRY_IN_FLIGHT
    • Trigger: invoice の決済が processing であるか、まだ記録されたステータスがない状態での manual retry。再送せず、その決済の結果を待ってください。
    • Message: この invoice の決済はまだ処理中です
  • MANUAL_RETRY_LIMIT_REACHED
    • Trigger: invoice に対する 3 回の送信をすべて使い切った後、または cooldown が経過する前の manual retry(HTTP 429)。2 回目の送信は 1 回目の 1 時間後、3 回目の送信は 2 回目の 3 時間後に実行できます。本文には code と message のみが含まれます。次の送信が可能になる時刻を確認するには、GET /payments/{payment_id}/retry から retry_available_at を読み取ってください。
    • Message: この invoice の manual retry はすべて使用済みです (or) この invoice ではまだ Retry now を利用できません
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Trigger: フィルタリング後、決済に使用できる payment method が残っていない(HTTP 422)
    • Message: 対象となる payment method が見つかりません
  • PAYMENT_NOT_PERMITTED
    • Trigger: Merchant の blocklist に登録された顧客による checkout または決済の試行(HTTP 403)。コードとメッセージでは意図的に原因を示しません。
    • Message: この決済は処理できません。
  • PAYMENT_NOT_RETRYABLE
    • Trigger: manual retry の対象外である決済の manual retry。決済に invoice がない、invoice が未決済の subscription renewal ではない、invoice の決済がまだ失敗していない、subscription に recurring billing が設定されていない(on-demand subscription など)、または顧客が blocklist に登録されている場合です。
    • Message: 理由に応じて異なります。例: subscription renewal の決済のみ再試行できます
  • PAYMENT_NOT_SUCCEEDED
    • Trigger: 成功していない決済を refund または処理しようとした
    • Message: 指定された決済は成功していません
  • PREVIOUS_PAYMENT_PENDING
    • Trigger: 前回の決済が終端状態でない間に charge を作成しようとした。また、invoice の最新の決済が failed でも in flight でもない場合の manual retry に対しても返されます(例: requires_customer_action や cancelled)。
    • Message: 前回の決済がまだ成功していないため新しい charge を作成できません (or) この invoice の最新の決済は失敗していません
  • UNSUCCESSFUL_PAYMENT_ID
    • Trigger: 決済 ID が成功していない決済を参照している
    • Message: Payment ID のステータスは成功ではありません。

Connectors & BYOP

これらのエラーは、Merchant が所有する payment connectors(Bring Your Own Processor、または BYOP)に関するものです。
  • BYOP_CONNECTOR_DISABLED
    • Trigger: 無効化された BYOP connector を経由する subscription の payment method を更新した。Dodo Payments は独自の connector にフォールバックしないため、先に connector を再有効化してください。
    • Message: subscription は現在無効になっている Merchant 独自の(BYOP)connector を経由しています
  • BYOP_CUSTOM_INVOICE_ADDRESS_MISSING
    • Trigger: Merchant の connector(BYOP)を経由する決済に custom invoice address がない
    • Message: Merchant の connector を経由して決済する場合、BYOP custom invoice address が必要です
  • CONNECTOR_LABEL_ALREADY_EXISTS
    • Trigger: すでに存在する label で connector を作成した
    • Message: この label の connector はすでに存在します。別の label を選択してください。

Refunds

  • EXISTING_REFUND_REQUEST_PROCESSING
    • Trigger: 以前の refund request がまだ処理中である
    • Message: ステータスが “Pending” の refund request はまだ処理中です
  • LINE_ITEM_FULLY_REFUNDED
    • Trigger: すでに全額 refund 済みの line item を refund しようとした
    • Message: Line item {id} は全額 refund 済みのため、これ以上 refund できません。
  • LINE_ITEM_NOT_FOUND
    • Trigger: item ID が指定された payment に含まれていない
    • Message: payment に line item {id} が見つかりません
  • LINE_ITEM_PRORATED
    • Trigger: prorated line item に対して refund または更新を行おうとした
    • Message: Line item {id} は prorated のため refund できません
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Trigger: tax を含む refund amount が支払額を超えている
    • Message: Line item {id} の tax を含む要求 refund amount {amount} は、支払額 {amount} を超えています
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Trigger: refund amount が最小しきい値を下回っている
    • Message: Line item {id} の要求 refund amount {amount} は低すぎます
  • NOTHING_TO_REFUND
    • Trigger: すべての正の line item がすでに全額 refund 済みで、refund 可能な金額が残っていない
    • Message: Refund 可能な金額が残っていません。すべての正の line item は全額 refund 済みです。
  • PARTIAL_REFUND_NOT_ALLOWED
    • Trigger: 全額 refund のみをサポートする payment method に対して partial refund を試みた
    • Message: この payment method では partial refund は許可されていません
  • PAYMENT_ALREADY_REFUNDED
    • Trigger: 重複した refund
    • Message: この決済はすでに refund 済みです
  • PAYMENT_HAS_BEEN_REFUNDED
    • Trigger: 決済が全額 refund 済みである
    • Message: Payment ID は全額 refund 済みです。
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Trigger: 合計 refund amount が支払額を超えている
    • Message: 計算された refund amount が支払額を超えています
  • REFUND_WINDOW_EXPIRED
    • Trigger: 許可された refund window の外で refund が要求された
    • Message: 決済作成後 {days} 日を過ぎると refund を開始できません。support@dodopayments.com にお問い合わせください。
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Trigger: 金額が 0 の決済を refund しようとした
    • Message: currency amount が 0 の決済は refund できません

Subscriptions & Add-ons

  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: usage-based billing subscription に add-ons を追加しようとした
    • Message: Usage Based Billing では Subscriptions の Addons はサポートされていません
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Trigger: on-demand subscription に add-ons を追加しようとした
    • Message: on demand subscriptions では Addons は許可されていません
  • CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Trigger: ビジネスがその操作を無効にしている状態で、Customer Portal が scheduled plan change のキャンセルを試みた
    • Message: customer portal での scheduled plan change のキャンセルは無効になっています。
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: キャンセルが予定されている subscription に charge しようとした
    • Message: Subscription はキャンセル予定です
  • CUSTOMER_HAS_EXISTING_SUBSCRIPTION
    • Trigger: ビジネスが顧客ごとの複数 subscription を許可していない場合に、すでに subscription を持つ顧客の subscription を作成しようとした
    • Message: Customer {id} には既存の subscription があります。顧客ごとに複数の subscription を許可するには、business settings を変更してください
  • DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL
    • Trigger: Customer Portal の plan change で do_not_bill proration mode が使用された
    • Message: do_not_bill proration mode は customer portal で許可されていません
  • DUPLICATE_ADDON_IDS_IN_REQUEST
    • Trigger: 同じ addon_id がリクエストに複数回出現する
    • Message: Duplicate addon IDs は許可されていません
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: inactive subscription の plan change
    • Message: inactive subscriptions のプラン変更はサポートされていません
  • INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE
    • Trigger: effective_at: next_billing_date とともに full_immediately 以外の proration mode を使用した
    • Message: effective_at: next_billing_date と併用できる proration mode は full_immediately のみです
  • MISSING_ADDON_IDS
    • Trigger: addon_id list が空、または不明な ID を含んでいる
    • Message: 1 つ以上の product ID が存在しません: {id}
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: on-demand subscription の plan change
    • Message: on demand subscriptions のプラン変更はサポートされていません
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: usage-based billing で on-demand subscription を使用しようとした
    • Message: Usage Based Billing では On Demand Subscriptions はサポートされていません
  • ONE_TIME_PRODUCTS_NOT_ALLOWED_FOR_ON_DEMAND
    • Trigger: on-demand subscription に one-time product を追加した
    • Message: on demand subscriptions では One-time products は許可されていません
  • PENDING_PLAN_CHANGE_EXISTS
    • Trigger: 以前の変更が支払い待ちの状態で、新しいプラン変更がリクエストされた場合。保留中の payment-link 変更を置き換えるには、cancel_older_payment_link: true を設定します。
    • Message: このサブスクリプションには、保留中のプラン変更がすでに存在します。現在の支払いが完了するまでお待ちください。
  • PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Trigger: ビジネスが無効にしている状態で、Customer Portal を通じて plan change を行った
    • Message: customer portal の subscription plan change は無効になっています。
  • PLAN_CHANGE_LINK_CANCEL_FAILED
    • Trigger: cancel_older_payment_link: true を含むプラン変更で、以前の payment link をキャンセルできなかった場合。変更は行われていないため、リクエストを再試行できます。
    • Message: 以前の payment link をキャンセルできませんでした。もう一度お試しください。
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: キャンセルが予定されているサブスクリプションのプランを変更した場合
    • Message: キャンセル予定のサブスクリプション
  • PLAN_CHANGE_PAYMENT_ALREADY_COMPLETED
    • Trigger: 顧客が以前のプラン変更の支払いをすでに完了した状態で、cancel_older_payment_link: true を含むプラン変更が行われた場合。変更は適用されるため、再試行しないでください。
    • Message: 顧客は以前のプラン変更の支払いをすでに完了しています。まもなく適用されます。
  • PLAN_CHANGE_PAYMENT_IN_PROGRESS
    • Trigger: 顧客が以前のプラン変更の支払いを行っている状態で、cancel_older_payment_link: true を含むプラン変更が行われた場合(3D Secure の処理中など)。支払いが完了または失敗した後に再試行してください。
    • Message: 顧客は現在、以前のプラン変更の支払いを行っています。後でもう一度お試しください。
  • SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Trigger: ビジネスが無効にしている状態で、Customer Portal を通じてプラン変更を予約した場合
    • Message: プラン変更の予約はこのビジネスでは無効になっています。
  • SCHEDULED_PLAN_CHANGE_EXISTS
    • Trigger: すでに存在する予約済みプラン変更を作成しようとした場合
    • Message: このサブスクリプションには予約済みのプラン変更がすでに存在します。新しい変更を作成する前に、既存の予約済み変更をキャンセルしてください。
  • SCHEDULED_PLAN_CHANGE_NOT_FOUND
    • Trigger: 存在しない予約済みプラン変更を参照またはキャンセルしようとした場合
    • Message: このサブスクリプションの予約済みプラン変更が見つかりません。
  • SUBSCRIPTION_EXPIRED
    • Trigger: サブスクリプションの expires_at 日付を過ぎてから課金した場合
    • Message: サブスクリプションの有効期限が切れているため、新しい charge を作成できません
  • SUBSCRIPTION_HAS_NO_PAYMENT_METHOD
    • Trigger: オフセッションで課金するための保存済み支払い方法がないサブスクリプションを手動で再試行した場合
    • Message: このサブスクリプションには課金するための保存済み支払い方法がありません
  • SUBSCRIPTION_INACTIVE
    • Trigger: サブスクリプションのステータスが active ではない場合
    • Message: サブスクリプションは active ではありません (または) このサブスクリプションは有効ではないため、キャンセルを予約できません
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Trigger: 固定間隔で課金されるサブスクリプションに対して on-demand アクションを実行した場合
    • Message: サブスクリプションはすでに on demand ではありません
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Trigger: サブスクリプションの支払い再試行回数が最大試行回数を超えた場合
    • Message: このサブスクリプションの最大再試行回数 10 回を超えました

顧客と Blocklist

  • CUSTOMER_ALREADY_BLOCKED
    • Trigger: すでに blocklist に登録されており、キャンセル対象の有効なサブスクリプションが残っていない顧客をブロックした場合(HTTP 409)
    • Message: この顧客はすでに blocklist に登録されています
  • PORTAL_ACTION_NOT_PERMITTED
    • Trigger: ブロックされた顧客が Customer Portal の書き込み route(キャンセル、一時停止、再開、プラン変更、支払い方法の更新)を呼び出した場合(HTTP 403)。読み取り route は引き続き利用できます。コードとメッセージでは意図的に原因を示しません。
    • Message: このアクションは利用できません。

Products、Cart、Brands

  • BRAND_ALREADY_ARCHIVED
    • Trigger: すでに archived の brand を archive した場合
    • Message: Brand はすでに archived です
  • BRAND_ARCHIVED
    • Trigger: archived の brand を更新、verification に送信、または新しい product、product collection、subscription を紐付けようとした場合
    • Message: Brand は archived です (または) Brand は archived のため更新できません (または) Brand は archived のため verification に送信できません
  • BRAND_ARCHIVE_TARGET_REQUIRED
    • Trigger: move_products_to target のない product、active subscription、または product collection を保持している brand を archive した場合
    • Message: Brand には {count} 個の product があります。移動先の brand を move_products_to に設定して、product を再タグ付けしてください。archive を妨げているのが active subscription または product collection の場合は、メッセージ内でそれらが示されます。
  • BRAND_MISMATCH
    • Trigger: Cart item が異なる brand に属している場合
    • Message: product cart 内のすべての item は同じ brand に属している必要があります
  • BRAND_NOT_ENABLED
    • Trigger: Brand が disabled または active ではない場合
    • Message: 指定された Brand は enabled ではありません
  • BRAND_SUBMISSION_NOT_ENABLED
    • Trigger: Brand verification の再送信機能が有効になっていない場合
    • Message: Brand verificatin resubmission is not enabled(API が返す表記を正確に記載)
  • CANNOT_ARCHIVE_PRIMARY_BRAND
    • Trigger: brand ID が business ID である primary brand を archive した場合
    • Message: Primary brand は archive できません
  • FILE_IN_USE
    • Trigger: active entitlement grant が参照している digital product file を削除した場合
    • Message: Digital file は active grant によって参照されています
  • INVALID_BRAND_ARCHIVE_TARGET
    • Trigger: move_products_to が archive 対象の brand、archived brand、または別の business の brand を指定している場合
    • Message: move_products_to は、この business に属し archived ではない brand である必要があります (または) move_products_to に archive 対象の brand を指定することはできません
  • INVALID_SUGGESTED_PRICE
    • Trigger: Pay What You Want の suggested price が minimum price より低い場合
    • Message: Suggested Price は minimum price より低くできません。pay what you want の場合、price は受け入れ可能な最低額として扱われます
  • LOCALIZED_PRICE_ALREADY_EXISTS
    • Trigger: この product と country または currency に対する localized price がすでに存在する場合
    • Message: この product と country/currency に対する localized price はすでに存在します
  • LOCALIZED_PRICE_DUPLICATES_BASE
    • Trigger: localized price が product の base currency または country と重複している場合
    • Message: Localized price が product の base currency/country と重複しています
  • LOCALIZED_PRICE_SHAPE_MISMATCH
    • Trigger: localized price の形式が product の pricing_mode と一致しない場合
    • Message: Localized price の形式が product の pricing_mode と一致しません
  • MISSING_PRODUCT_INFORMATION
    • Trigger: product は存在するものの、必須情報が不足している場合
    • Message: Product {id} は存在しますが、その他の必須情報が不足しているか無効です
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Trigger: Pay What You Want product の amount が不足している場合
    • Message: pay as you want product では Amount が必須です
  • PRODUCT_CART_EMTPY
    • Trigger: 空の product cart が送信された場合
    • Message: product_cart は空です(error code は API が返す値と一致させるため EMTPY と意図的に表記されています)
  • PRODUCT_COLLECTION_IS_DELETED
    • Trigger: 削除済みの product collection を操作した場合
    • Message: メッセージなし
  • PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS
    • Trigger: collection から最後の product、または product を含む最後の group を削除した場合
    • Message: collection の最後の product は削除できません。代わりに collection を archive してください。(または) product を含む最後の group は削除できません。代わりに collection を archive してください。
  • PRODUCT_IS_DELETED
    • Trigger: product が削除された場合
    • Message: メッセージなし
  • PRODUCT_PRICING_MODE_REQUIRED
    • Trigger: product の pricing_mode が設定される前に localized price を追加した場合
    • Message: localized price を追加する前に Product pricing_mode を設定する必要があります
  • SLUG_ALREADY_TAKEN
    • Trigger: リクエストされた product slug または short URL がすでに使用されている場合
    • Message: Slug はすでに使用されています
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Trigger: 通常の brand API を通じて primary brand を更新しようとした場合
    • Message: Primary brand はこの API endpoint では更新できません。

Discounts

  • DISCOUNT_ALREADY_USED_ON_SUBSCRIPTION
    • Trigger: このサブスクリプションですでに使用された discount を再度適用した場合
    • Message: この discount はこのサブスクリプションですでに使用されています
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Trigger: すでに存在する discount code を作成した場合
    • Message: Discount Code はすでに存在します
  • DISCOUNT_CODE_EXPIRED
    • Trigger: discount code の expires_at 日付を過ぎている場合
    • Message: Discount code の有効期限が切れています
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Trigger: discount code の usage_limit に達した後に使用された場合
    • Message: Usage limit は times_used 未満にできません (または) Discount code が usage limit に達しました
    • Note: Terminal。code を使い切っているため、再試行しないでください。
  • DISCOUNT_CONCURRENT_REDEMPTION
    • Trigger: 同じ code の別の redemption が usage-limit lock を長時間保持した場合(HTTP 503)
    • Message: Discount は同時に redemption されています。再試行してください
    • Note: Transient。code にまだ利用可能枠が残っている可能性があるため、リクエストは安全に再試行できます。使い切った code として顧客に表示しないでください。
  • DISCOUNT_CURRENCY_OPTION_INVALID
    • Trigger: create または update 時の無効な currency_options
    • Message: flat discount には、解決可能な default を持つ currency option が少なくとも 1 つ必要です (または) 重複する currency option は許可されません (または) default として指定できる currency option は 1 つだけです
  • DISCOUNT_CUSTOMER_NOT_ELIGIBLE
    • Trigger: 顧客が code の customer_eligibility を満たしていない場合(first_time、existing、または specific code の allow list に含まれていない場合)
    • Message: 顧客はこの discount code の対象外です
  • DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET
    • Trigger: cart subtotal が checkout currency に設定された minimum_subtotal を下回る場合
    • Message: Cart subtotal が discount に必要な最低 subtotal を下回っています
  • DISCOUNT_NOT_YET_ACTIVE
    • Trigger: code の starts_at 日付より前に使用された場合
    • Message: Discount code はまだ active ではありません(starts_at が将来の日付です)
  • DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED
    • Trigger: 顧客が code をすでに per_customer_usage_limit 回 redemption した場合
    • Message: この discount code の顧客ごとの usage limit を超えました
  • DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT
    • Trigger: 既存の discount が適用されない product へのプラン変更
    • Message: Discount は新しい plan の product には適用されません
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Trigger: on-demand subscription に code を適用した場合
    • Message: Discount coupon は on demand subscription では利用できません
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Trigger: 対象外の product に code を適用した場合
    • Message: Discount coupon はこの product では利用できません
  • INVALID_DISCOUNT_CODE
    • Trigger: code が存在しない、または cart 内のどの product にも適用されない場合
    • Message: Invalid Discount Code (または) Discount Code は cart 内のどの product にも適用できません
  • INVALID_PERCENTAGE
    • Trigger: percentage が 100%(10,000 basis points)を超えている場合
    • Message: Percentage amount は 10000 を超えることができません (または) Discount code amount は 100% を超えることができません
  • UNSUPPORTED_DISCOUNT_TYPE
    • Trigger: サポートされていない discount type。percentage と flat はどちらもサポートされていますが、per-unit amount discount はサポートされていません。
    • Message: percentage と flat の discount code のみサポートされています (または) 現在は percentage discount code のみサポートされています

License Keys

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Trigger: license key の新しい activation limit が現在の instance 数より少ない場合
    • Message: 新しい activation limit は現在の instance 数未満にできません
  • INACTIVE_LICENSE_KEY
    • Trigger: license key の status が active ではない場合
    • Message: License key は active ではありません
  • LICENSE_KEY_LIMIT_REACHED
    • Trigger: activation 数が activation limit に達した場合
    • Message: License key の activation limit に達しました
  • LICENSE_KEY_NOT_FOUND
    • Trigger: instance ID または license key ID が無効な場合
    • Message: License key instance が見つからないか、この license key に属していません
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Trigger: subscription-based license key に expiry date を設定しようとした場合
    • Message: subscription-based license key に expiry date は設定できません

Usage-Based Billing と Meters

  • DUPLICATE_METER_IDS_IN_REQUEST
    • Trigger: 同じ meter ID がリクエスト内に複数回登場する場合
    • Message: Duplicate Meter Ids は許可されていません
  • INVALID_QUANTITY
    • Trigger: usage-based pricing の product に対して 1 以外の quantity を指定した場合
    • Message: usage based price product では quantity は 1 のみ許可されます
  • METER_IS_DELETED
    • Trigger: 削除済みの meter を使用しようとした場合
    • Message: Meter はすでに削除されています
  • MISSING_METER_IDS
    • Trigger: meter ID list が空、または無効な ID を含む場合
    • Message: 1 つ以上の meter ID が存在しません: {id}

Credit-Based Billing

  • CREDIT_ENTITLEMENT_IS_DELETED
    • Trigger: 削除済みの credit entitlement を操作した場合
    • Message: Credit entitlement はすでに削除されています
  • CREDIT_ENTITLEMENT_NAME_ALREADY_EXISTS
    • Trigger: すでに存在する名前で credit entitlement を作成した場合
    • Message: この名前の credit entitlement はすでに存在します
  • OVERAGE_LIMIT_EXCEEDED
    • Trigger: usage または credit deduction が設定済みの overage limit を超える場合
    • Message: Overage limit を超えました

Wallet

  • INSUFFICIENT_WALLET_FUNDS
    • Trigger: wallet balance が debit amount より少ない場合
    • Message: Wallet の残高が不足しています
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Trigger: wallet balance をマイナスにしようとした場合
    • Message: Wallet balance をマイナスにすることはできません

Currency、Tax、Region

  • EXCHANGE_RATE_NOT_FOUND
    • Trigger: currency pair の exchange rate が存在しない場合
    • Message: {currency} から {currency} への変換に必要な exchange rate が見つかりません
  • INVALID_TAX_ID
    • Trigger: VAT、GST、または TIN の validation に失敗した場合
    • Message: Tax Id が無効です
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Trigger: amount が product に設定された minimum を下回る場合
    • Message: Amount は product に指定された minimum amount 未満にできません
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Trigger: tax を含む cart total が、payment の処理に必要な最低額を下回る場合。最低額は billing currency と、payment が one-time か subscription かによって異なります。USD、EUR、GBP 以外の currency では、USD の最低額に対しても total が確認されます。Minimum Amounts を参照してください。
    • Message: payment の処理には {display_str} 以上が必要です(例: Minimum amount of 1.00 USD is required to process payment)
  • UNSUPPORTED_BILLING_CURRENCY
    • Trigger: リクエストされた billing currency がこの subscription でサポートされていない場合
    • Message: USD 以外の billing currency は subscription でサポートされていません
  • UNSUPPORTED_COUNTRY
    • Trigger: country がサポートされていない場合
    • Message: Country {country_name} は現在サポートされていません
  • UNSUPPORTED_CURRENCY
    • Trigger: product または add-on の currency が Dodo Payments の charge 対応 currency ではない場合。Base price は charge 可能な任意の currency で設定できるため、この error は通常、currency code が無効または未対応であることを意味します。
    • Message: Currency は現在サポートされていません (または) 現在サポートされている product は USD と INR のみです (または) addon price でサポートされているのは USD と INR のみです (または) billing_currency には USD または INR のみリクエストできます (または) Currency Not Supported (または) Indian card subscription に対して予期しない currency です
  • UNSUPPORTED_TAX_CATEGORY
    • Trigger: tax category がサポートされている値ではない場合
    • Message: Category {category} は現在サポートされていません

Validation と Requests

  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Trigger: 同じ item_id が items[] 内に複数回登場する場合
    • Message: items array に重複する item_ids が指定されています
  • INVALID_QUERY_PARAMS
    • Trigger: 相互排他的または形式が不正な query parameter
    • Message: Query params には time_frame または (start, end) のいずれか一方のみを含める必要があります (または) range の start を end より後にすることはできません
  • INVALID_REQUEST_BODY
    • Trigger: 形式が不正な JSON または schema 違反
    • Message: Request body が無効です。request headers と object を確認してください。
  • INVALID_REQUEST_PARAMETERS
    • Trigger: 形式としては有効でも意味として無効な parameter value(過去の日付など)
    • Message: next_billing_date を過去の時刻に変更できません (または) 複数の subscription product を含む checkout に one-time product を含めることはできません (または) すべての product ID は一意である必要があります (または) On demand subscription に含められる product は 1 つまでです (または) checkout に含められる subscription product は最大 20 個です (または) 1 つの checkout に重複する subscription product を含めることはできません
  • MAXIMUM_KEYS_REACHED
    • Trigger: Metadata または custom fields が 50 個の key-value pair を超える場合
    • Message: 50 個の key-value pair を超えています

General と System

  • INTEGER_CONVERSION_FAILURE
    • Trigger: integer と string または decimal の server-side conversion に失敗した場合(cart total が大きすぎて処理できない場合など)
    • Message: Integer Conversion Failure (または) Cart total が大きすぎて処理できません。quantity を減らすか、別の billing currency を選択してください。
  • INTERNAL_SERVER_ERROR
    • Trigger: 予期しない server error。リクエストの詳細を自身の側で log してください。
    • Message: 公開メッセージなし(generic 500。message は通常 null です)
  • NOT_FOUND
    • Trigger: 欠落している resource に対する generic 404
    • Message: Item が見つかりません (または、欠落しているものを示すより具体的なメッセージ)
  • TOO_MANY_REQUESTS
    • Trigger: rate limit を超えた場合(HTTP 429)
    • Message: メッセージなし
  • UNSUPPORTED_ACTION
    • Trigger: resource type がサポートしていない action
    • Message: usage based subscription のプラン変更はサポートされていません

Best Practices

API error を処理する際は、次の practices に従ってください。
  1. アプリケーションですべての error response を処理し、message ではなく code に基づいて分岐してください。
  2. 失敗したすべてのリクエストについて、HTTP status、code、message を log してください。
  3. raw API message ではなく、エンドユーザー向けに作成したメッセージを表示してください。
  4. 429 や 5xx response、または DISCOUNT_CONCURRENT_REDEMPTION などの transient error のみ、遅延後に再試行してください。
  5. 解決できない error については support にお問い合わせください。

Support

Error code または integration issue に関するサポートが必要な場合は、support@dodopayments.com の support team にお問い合わせください。
最終更新日 2026年10月8日