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: 以前の plan change が payment 待ちの状態で、新しい plan change を要求した
    • Message: この subscription には保留中の plan change がすでにあります。現在の payment が完了するまでお待ちください。
  • PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Trigger: ビジネスが無効にしている状態で、Customer Portal を通じて plan change を行った
    • Message: customer portal の subscription plan change は無効になっています。
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: キャンセルが予定されている subscription の plan change
    • Message: Subscription はキャンセル予定です
  • SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Trigger: ビジネスが無効にしている状態で、Customer Portal を通じて plan change をスケジュールした
    • Message: このビジネスでは plan change のスケジュールが無効になっています。
  • SCHEDULED_PLAN_CHANGE_EXISTS
    • Trigger: すでに存在する scheduled plan change を作成しようとした
    • Message: この subscription には scheduled plan change がすでにあります。新しい変更を作成する前に、既存の scheduled change をキャンセルしてください。
  • SCHEDULED_PLAN_CHANGE_NOT_FOUND
    • Trigger: 存在しない scheduled plan change を参照またはキャンセルしようとした
    • Message: この subscription の scheduled plan change が見つかりません。
  • SUBSCRIPTION_EXPIRED
    • Trigger: expires_at 日を過ぎた subscription に billing した
    • Message: Subscription の期限が切れているため、新しい charge を作成できません
  • SUBSCRIPTION_HAS_NO_PAYMENT_METHOD
    • Trigger: off-session で charge するための保存済み payment method がない subscription の manual retry
    • Message: この subscription には charge に使用できる保存済み payment method がありません
  • SUBSCRIPTION_INACTIVE
    • Trigger: subscription status が active ではない
    • Message: Subscription は active ではありません (or) この subscription は live ではないため、キャンセルをスケジュールできません
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Trigger: 固定間隔で billing する subscription に対する on-demand action
    • Message: Subscription はすでに on demand ではありません
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Trigger: subscription payment の再試行回数が最大試行回数を超えた
    • Message: この subscription の最大再試行回数 10 回を超えました

Customers & Blocklist

  • CUSTOMER_ALREADY_BLOCKED
    • Trigger: すでに blocklist に登録され、キャンセルすべき live subscriptions が残っていない顧客をブロックした(HTTP 409)
    • Message: この顧客はすでに blocklist に登録されています
  • PORTAL_ACTION_NOT_PERMITTED
    • Trigger: ブロックされた顧客が Customer Portal の書き込み route(cancel、pause、resume、change plan、update payment method)を呼び出した(HTTP 403)。読み取り route は引き続き利用できます。コードとメッセージでは意図的に原因を示しません。
    • Message: この操作は利用できません。

Products, Cart & Brands

  • BRAND_ALREADY_ARCHIVED
    • Trigger: すでにアーカイブされている brand をアーカイブした
    • Message: Brand はすでにアーカイブされています
  • BRAND_ARCHIVED
    • Trigger: アーカイブ済みの brand を更新、verification に送信、または新しい product、product collection、subscription を紐付けようとした
    • Message: Brand はアーカイブされています (or) Brand はアーカイブされているため更新できません (or) Brand はアーカイブされているため verification に送信できません
  • BRAND_ARCHIVE_TARGET_REQUIRED
    • Trigger: product、live subscriptions、または product collections を保持している brand を、move_products_to target なしでアーカイブした
    • Message: Brand には {count} 個の product があります。再タグ付けするには move_products_to に target brand を設定してください。アーカイブを妨げているのが live subscriptions または product collections の場合は、メッセージにそれらが示されます。
  • BRAND_MISMATCH
    • Trigger: cart items が異なる brand に属している
    • Message: product cart 内のすべての item は同じ brand に属している必要があります
  • BRAND_NOT_ENABLED
    • Trigger: brand が無効または active ではない
    • Message: 指定された Brand は有効になっていません
  • 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 をアーカイブした
    • Message: Primary brand はアーカイブできません
  • FILE_IN_USE
    • Trigger: active entitlement grants が参照している digital product file を削除した
    • Message: Digital file は active grants によって参照されています
  • INVALID_BRAND_ARCHIVE_TARGET
    • Trigger: move_products_to がアーカイブ対象の brand、アーカイブ済みの brand、または別の business の brand を指定している
    • Message: move_products_to は、この business に属し、アーカイブされていない brand である必要があります (or) move_products_to にアーカイブする 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 は空です(エラーコードは API が返す正確な値と一致させるため、意図的に EMTPY と表記されています)
  • PRODUCT_COLLECTION_IS_DELETED
    • Trigger: 削除された product collection に対して操作した
    • Message: メッセージなし
  • PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS
    • Trigger: collection から最後の product、または product を含む最後の group を削除しようとした
    • Message: collection の最後の product は削除できません。代わりに collection をアーカイブしてください。(or) product を含む最後の group は削除できません。代わりに collection をアーカイブしてください。
  • PRODUCT_IS_DELETED
    • Trigger: product が削除された
    • Message: メッセージなし
  • PRODUCT_PRICING_MODE_REQUIRED
    • Trigger: product の pricing_mode が設定される前に localized prices を追加した
    • Message: localized prices を追加する前に、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: この subscription ですでに使用された discount を再度適用した
    • Message: この discount はこの subscription ですでに使用されています
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Trigger: すでに存在する discount code を作成した
    • Message: Discount Code はすでに存在します
  • DISCOUNT_CODE_EXPIRED
    • Trigger: discount code の expires_at date を過ぎている
    • Message: Discount code の期限が切れています
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Trigger: discount code が usage_limit に達した後に使用された
    • Message: Usage limit は times_used 未満にできません (or) Discount code の使用上限に達しました
    • Note: Terminal。このコードは使い切られているため、再試行しないでください。
  • 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 を持つ少なくとも 1 つの currency option が必要です (or) 重複する currency options は許可されていません (or) default としてマークできる currency option は 1 つだけです
  • DISCOUNT_CUSTOMER_NOT_ELIGIBLE
    • Trigger: customer が code の customer_eligibility を満たしていない(first_time、existing、または specific code の allow list に含まれていない)
    • Message: Customer はこの discount code の対象外です
  • DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET
    • Trigger: cart subtotal が checkout currency に設定された minimum_subtotal を下回っている
    • Message: Cart subtotal が discount に必要な minimum required subtotal を下回っています
  • DISCOUNT_NOT_YET_ACTIVE
    • Trigger: code の starts_at date より前に使用された
    • Message: Discount code はまだ有効ではありません(starts_at が未来です)
  • DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED
    • Trigger: customer が code を per_customer_usage_limit 回すでに redeem している
    • Message: この discount code の顧客ごとの使用上限を超えました
  • DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT
    • Trigger: 既存の discount が適用されない product への plan change
    • Message: Discount は新しい plan の product に適用できません
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Trigger: on-demand subscription に code を適用した
    • Message: Discount coupon は on demand subscriptions では利用できません
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Trigger: code が対象としていない product に適用された
    • Message: Discount coupon はこの product では利用できません
  • INVALID_DISCOUNT_CODE
    • Trigger: code が存在しない、または cart 内のどの product にも適用できない
    • Message: Invalid Discount Code (or) Discount Code は cart 内のどの product にも適用できません
  • INVALID_PERCENTAGE
    • Trigger: percentage が 100%(10,000 basis points)を超えている
    • Message: Percentage amount は 10000 を超えることができません (or) Discount code amount は 100% を超えることができません
  • UNSUPPORTED_DISCOUNT_TYPE
    • Trigger: サポートされていない discount type。percentage と flat はどちらもサポートされていますが、per-unit amount discounts はサポートされていません。
    • Message: percentage と flat discount codes のみサポートされています (or) 現在は percentage discount codes のみサポートされています

License Keys

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Trigger: license key の新しい activation limit が現在の instance 数より少ない
    • Message: New activation limit は current instances count 未満にできません
  • 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 に対して quantity が 1 以外である
    • Message: usage based price products では 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: すでに存在する name で credit entitlement を作成した
    • Message: この name の 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 の検証に失敗した
    • Message: Tax Id が無効です
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Trigger: amount が product に設定された minimum を下回っている
    • Message: Amount は product に指定された minimum amount 未満にできません
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Trigger: cart の合計が決済処理に必要な minimum amount を下回っている
    • Message: 決済処理には {display_str} 以上が必要です
  • UNSUPPORTED_BILLING_CURRENCY
    • Trigger: 要求された billing currency がこの subscription でサポートされていない
    • Message: subscriptions では USD 以外の billing currency はサポートされていません
  • UNSUPPORTED_COUNTRY
    • Trigger: country がサポートされていない
    • Message: Country {country_name} は現在サポートされていません
  • UNSUPPORTED_CURRENCY
    • Trigger: product または add-on の currency が Dodo Payments で請求できる currency ではない。Base prices は請求可能な任意の currency で設定できるため、通常このエラーは currency code が無効または未サポートであることを意味します。
    • Message: Currency は現在サポートされていません (or) 現在サポートされている product は USD と INR のみです (or) addon price でサポートされているのは USD と INR のみです (or) billing_currency には USD または INR のみ指定できます (or) Currency Not Supported (or) Indian card subscriptions に対して予期しない 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 parameters
    • Message: Query params には time_frame または (start, end) のいずれか一方のみを含めてください (or) range の start は end より後にできません
  • INVALID_REQUEST_BODY
    • Trigger: 形式が不正な JSON または schema 違反
    • Message: リクエスト本文が無効です。リクエスト headers と object を確認してください。
  • INVALID_REQUEST_PARAMETERS
    • Trigger: 形式は正しいが意味的に無効な parameter values(過去の日付など)
    • Message: next_billing_date を過去の時刻に変更できません
  • MAXIMUM_KEYS_REACHED
    • Trigger: metadata または custom fields が 50 個の key-value pairs を超えている
    • Message: 50 個の key-value pairs を超えています

General & System

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

ベストプラクティス

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

サポート

エラーコードまたは統合に関する問題についてさらにサポートが必要な場合は、support@dodopayments.com でサポートチームにお問い合わせください。
最終更新日 2026年9月26日