# Create Addon Source: https://docs.dodopayments.com/api-reference/addons/create-addon post /addons Create a new addon product that can be attached to your main subscription products # Get Addon Source: https://docs.dodopayments.com/api-reference/addons/get-addon get /addons/{id} Retrieve detailed information about a specific addon using its unique identifier # List Addons Source: https://docs.dodopayments.com/api-reference/addons/list-addons get /addons Retrieve a comprehensive list of all available addons # Update Addon Source: https://docs.dodopayments.com/api-reference/addons/update-addon patch /addons/{id} Modify the details of an existing addon using its unique identifier # Update Addon Images Source: https://docs.dodopayments.com/api-reference/addons/update-addon-images put /addons/{id}/images Update images for an existing addon # Create Brand Source: https://docs.dodopayments.com/api-reference/brands/create-brand post /brands Create a new brand. # Get Brand Source: https://docs.dodopayments.com/api-reference/brands/get-brand get /brands/{id} Retrieve a specific brand by ID. # List Brands Source: https://docs.dodopayments.com/api-reference/brands/list-brands get /brands List all brands. # Update Brand Source: https://docs.dodopayments.com/api-reference/brands/update-brand patch /brands/{id} Update an existing brand's details. # Update Brand Images Source: https://docs.dodopayments.com/api-reference/brands/update-brand-images put /brands/{id}/images Update the images associated with a brand. # Create Customer Source: https://docs.dodopayments.com/api-reference/customers/create-customer post /customers Create a new customer in your Dodo Payments account. # Create Customer Portal Session Source: https://docs.dodopayments.com/api-reference/customers/create-customer-portal-session post /customers/{customer_id}/customer-portal/session Create a session of the Customer Portal for a specific customer. # List Customers Source: https://docs.dodopayments.com/api-reference/customers/get-customers get /customers Get a list of all customers associated with your account. # Get Customer Detail Source: https://docs.dodopayments.com/api-reference/customers/get-customers-1 get /customers/{customer_id} Get detailed information about a specific customer. # Patch Customer Source: https://docs.dodopayments.com/api-reference/customers/patch-customer patch /customers/{customer_id} Update a customer's information. # Create Discount Source: https://docs.dodopayments.com/api-reference/discounts/create-discount post /discounts Create a discount for your account. # Delete Discount Source: https://docs.dodopayments.com/api-reference/discounts/delete-discount delete /discounts/{discount_id} Delete a discount from your account. # List Discounts Source: https://docs.dodopayments.com/api-reference/discounts/list-discounts get /discounts Retrieve a list of all discounts associated with your account. # Update Discount Source: https://docs.dodopayments.com/api-reference/discounts/update-discount patch /discounts/{discount_id} Update a discount in your account. # Validate Discount Source: https://docs.dodopayments.com/api-reference/discounts/validate-discount get /discounts/{discount_id} Validate a discount code to check if it is valid and can be applied to the current cart. # List Disputes Source: https://docs.dodopayments.com/api-reference/disputes/get-disputes get /disputes Get a list of all disputes associated with your account. # Get Dispute Detail Source: https://docs.dodopayments.com/api-reference/disputes/get-disputes-1 get /disputes/{dispute_id} Get detailed information about a specific dispute. # Error Codes Source: https://docs.dodopayments.com/api-reference/error-codes Learn more about error codes and how to resolve them in Dodo Payments API. ## Overview Dodo Payments API uses standard HTTP status codes and custom error codes to indicate the success or failure of API requests. When an error occurs, the API returns an appropriate HTTP status code and a JSON response containing detailed information about the error. Each error response includes: * An HTTP status code indicating the general category of the error * A specific error code that identifies the exact nature of the error * A human-readable error message explaining what went wrong * Additional details about the error when applicable Understanding these error codes and their meanings is crucial for: * Debugging integration issues * Implementing proper error handling in your application * Providing meaningful feedback to end users * Maintaining a robust payment processing system The following sections provide detailed information about standard HTTP status codes and specific error codes you may encounter when using the Dodo Payments API. ## Standard API Error Codes | Error code | HTTP Status | Description | | ---------- | --------------------- | -------------------------------------------------------------------- | | **400** | Bad Request | The request was malformed or contained invalid parameters | | **401** | Unauthorized | Authentication failed or API key is invalid | | **403** | Forbidden | The API key doesn't have permission to access the requested resource | | **404** | Not Found | The requested resource doesn't exist | | **405** | Method Not Allowed | The HTTP method is not supported for this endpoint | | **409** | Conflict | The request conflicts with the current state of the resource | | **422** | Unprocessable Entity | The request was well-formed but contained semantic errors | | **429** | Too Many Requests | Rate limit exceeded | | **500** | Internal Server Error | An unexpected error occurred on our servers | | **502** | Bad Gateway | The server received an invalid response from an upstream server | | **503** | Service Unavailable | The service is temporarily unavailable | | **504** | Gateway Timeout | The server timed out while waiting for an upstream response | ## Error Response Format When an error occurs, the API returns a JSON response with the following structure: ```json { "code": "UNSUPPORTED_COUNTRY", "message": "Country AI currently not supported" } ``` ## Error Codes Reference * `ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT` * **Trigger:** License-key activations: new limit \< existing instance count * **Message:** New activation limit cannot be less than current instances count * `ADDONS_NOT_ALLOWED_FOR_ON_DEMAND` * **Trigger:** Attempt to add addons to on-demand subscriptions * **Message:** Addons are not allowed for on demand subscriptions * `INTEGER_CONVERSION_FAILURE` * **Trigger:** Any integer ↔ string/decimal conversion that fails server-side * **Message:** Integer Conversion Failure * `DISCOUNT_CODE_ALREADY_EXISTS` * **Trigger:** Duplicate discount code creation * **Message:** Discount Code already exists * `DISCOUNT_CODE_EXPIRED` * **Trigger:** Discount code past its `expires_at` date * **Message:** Discount code expired * `DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED` * **Trigger:** Discount reused after `usage_limit` reached * **Message:** Usage limit cannot be less than times\_used. Discount code hit usage limit * `DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND` * **Trigger:** Code applied to on-demand subscription * **Message:** Discount coupon not available for on demand subscriptions * `DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT` * **Trigger:** Code applied to unrelated product(s) * **Message:** Discount coupon not available for this product * `DUPLICATE_LINE_ITEMS_IN_REQUEST` * **Trigger:** Same `item_id` appears twice in `items[]` * **Message:** Duplicate item\_ids specified in items array * `EXCHANGE_RATE_NOT_FOUND` * **Trigger:** No FX rate for `from → to` currency pair * **Message:** Exchange rate not found to convert from USD to EUR * `INACTIVE_LICENSE_KEY` * **Trigger:** Key status ≠ `ACTIVE` * **Message:** License key is not active * `INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED` * **Trigger:** Plan change on inactive subscription * **Message:** Changing plans is not supported for inactive subscriptions * `INSUFFICIENT_WALLET_FUNDS` * **Trigger:** Wallet balance \< debit amount * **Message:** Insufficient funds in wallet * `INTERNAL_SERVER_ERROR` * **Trigger:** Uncaught exceptions; you should log details server-side * **Message:** *No public message (generic 500)* * `INVALID_DISCOUNT_CODE` * **Trigger:** Code does not exist / not applicable * **Message:** Invalid Discount Code. Discount Code cannot be applied to any product in the cart * `INVALID_PERCENTAGE` * **Trigger:** Percent amount > 100 % (or 10 000 basis points) * **Message:** Percentage amount cannot be more than 10000 * `INVALID_QUERY_PARAMS` * **Trigger:** Mutually exclusive / malformed query parameters * **Message:** Query params should only contain either time\_frame or (start, end) * `INVALID_REQUEST_BODY` * **Trigger:** Malformed JSON or schema violation * **Message:** Your request body is invalid. Please check your request headers and object. * `INVALID_REQUEST_PARAMETERS` * **Trigger:** Semantics wrong (e.g. date in past) * **Message:** Cannot change next\_billing\_date to past time * `INVALID_SUGGESTED_PRICE` * **Trigger:** PWYW price \< minimum allowed price * **Message:** Suggested Price cannot be lower than minimum price * `INVALID_TAX_ID` * **Trigger:** VAT/GST/TIN failed validation * **Message:** Tax Id is invalid * `LICENSE_KEY_LIMIT_REACHED` * **Trigger:** Activations = limit * **Message:** License key activation limit reached * `LICENSE_KEY_NOT_FOUND` * **Trigger:** Instance ID or key ID invalid * **Message:** License key instance not found or does not belong to this license key * `LINE_ITEM_NOT_FOUND` * **Trigger:** Item ID not part of the referenced payment * **Message:** Line item abc123 not found in payment * `LINE_ITEM_PRORATED` * **Trigger:** Refund or update attempted on a prorated line * **Message:** Line item {id} cannot be refunded because its prorated * `LINE_ITEM_REFUND_AMOUNT_TOO_HIGH` * **Trigger:** Refund amount > paid amount (tax incl.) * **Message:** Line item {id} requested refund amount … is above the paid amount … * `MAXIMUM_KEYS_REACHED` * **Trigger:** Metadata / custom-fields exceeded 50 pairs * **Message:** Exceeds 50 key-value pairs * `MERCHANT_NOT_LIVE` * **Trigger:** Business still in test/sandbox mode * **Message:** Merchant is not live * `MISSING_ADDON_IDS` * **Trigger:** `addon_id` list empty or unknown IDs * **Message:** One or more product IDs do not exist: 123 * `MISSING_PRODUCT_INFORMATION` * **Trigger:** Product exists but mandatory info missing * **Message:** Product 42 exists but other mandatory information is missing or invalid * `NO_ELIGIBLE_PAYMENT_METHODS` * **Trigger:** After filtering, nothing left * **Message:** No eligible payment methods found * `NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS` * **Trigger:** Attempt to set expiry on sub-based key * **Message:** Cannot set expiry date for subscription-based license key * `NOT_FOUND` * **Trigger:** Generic 404 for any missing resource * **Message:** Item not found *(or more specific)* * `ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED` * **Trigger:** Plan swap not allowed for on-demand * **Message:** Changing plans is not supported for on demand subscriptions * `ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED` * **Trigger:** Business has feature flag off * **Message:** On demand subscriptions not enabled for this business * `PAY_AS_YOU_WANT_AMOUNT_REQUIRED` * **Trigger:** Price missing for PWYW product * **Message:** Amount is mandatory for pay as you want product * `PAYMENT_ALREADY_REFUNDED` * **Trigger:** Duplicate refund * **Message:** This payment has already been refunded * `PRODUCT_IS_DELETED` * **Trigger:** Product soft-deleted * **Message:** *No messages* * `PREVIOUS_PAYMENT_PENDING` * **Trigger:** Attempt to create charge while previous is in non-terminal state * **Message:** Cannot create new charge as previous payment is not successful yet * `REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT` * **Trigger:** Aggregate refund amount > paid amount * **Message:** The calculated refund amount is larger than the paid amount * `REFUND_WINDOW_EXPIRED` * **Trigger:** Outside allowable refund window * **Message:** Refunds cannot be initiated 90 days after payment creation. Contact [support@dodopayments.com](mailto:support@dodopayments.com) * `REQUEST_AMOUNT_BELOW_MINIMUM` * **Trigger:** Amount \< product minimum * **Message:** Amount cannot be less than minimum amount specified for the product * `SUBSCRIPTION_EXPIRED` * **Trigger:** Billing past `ends_at` * **Message:** Subscription expired cannot create new charges * `SUBSCRIPTION_INACTIVE` * **Trigger:** Status ≠ `ACTIVE` * **Message:** Subscription is not active * `SUBSCRIPTION_NOT_ON_DEMAND` * **Trigger:** Expected on-demand but got fixed interval * **Message:** Subscription is already not on demand * `TOO_MANY_REQUESTS` * **Trigger:** 429 rate-limit * **Message:** *No messages* * `TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT` * **Trigger:** Combined cart total \< gateway minimum * **Message:** Minimum amount of \$0.50 is required to process payment * `UNAUTHORIZED` * **Trigger:** No API key or invalid token / scope * **Message:** You are not authorised to perform this action * `UNSUPPORTED_BILLING_CURRENCY` * **Trigger:** Subscriptions restricted to USD * **Message:** Non USD billing currency is not supported for subscriptions * `UNSUPPORTED_COUNTRY` * **Trigger:** Geo not yet supported * **Message:** Country Argentina currently not supported * `UNSUPPORTED_CURRENCY` * **Trigger:** Product or addon currency invalid * **Message:** Messages listed in enum comment * `UNSUPPORTED_DISCOUNT_TYPE` * **Trigger:** Flat-amount discounts, etc., not yet live * **Message:** Only percentage discount codes are supported for now * `UNSUPPORTED_PAYMENT_CURRENCY` * **Trigger:** Payment currency blocked for connector * **Message:** INR transaction is not supported for this transaction * `UNSUPPORTED_TAX_CATEGORY` * **Trigger:** Tax category string not in enum * **Message:** Category ebooks currently not supported ## Best Practices 1. Always handle errors gracefully in your application 2. Implement proper error logging 3. Use appropriate error messages for end users 4. Implement retry logic for transient errors 5. Contact support for unresolved issues ## Support For additional help with error codes or integration issues, please contact our support team at [support@dodopayments.com](mailto:support@dodopayments.com). # Introduction Source: https://docs.dodopayments.com/api-reference/introduction Welcome to the Dodo Payments API. Our APIs makes it easy to integrate secure, scalable, and versatile payment solutions into your applications. ## Authentication All API requests require authentication using your API keys. You can find your API keys in the [Dodo Payments Dashboard](https://app.dodopayments.com/developer/api-keys). ```bash Test Mode Authorization: Bearer sk_test_your_test_key ``` ```bash Live Mode Authorization: Bearer sk_live_your_live_key ``` Never expose your secret API keys in client-side code or public repositories. Always use test keys for development and testing. ## Environment URLs Use the appropriate base URL for your environment: * Test Mode: [`https://test.dodopayments.com`](https://test.dodopayments.com) * Live Mode: [`https://live.dodopayments.com`](https://live.dodopayments.com) Learn more about [Test Mode vs Live Mode](/miscellaneous/test-mode-vs-live-mode). ## API Key Generation 1. Open Developer → API Keys 2. Click on Add API Key button and API Key Pop up will open 3. Enter API Key name and click Create API Key 4. Copy API Key and keep it safe ## API Status Monitor our API status and get real-time updates: [status.dodopayments.com](https://status.dodopayments.com) Our API implements rate limiting to ensure stable service for all users. # Activate License Source: https://docs.dodopayments.com/api-reference/licenses/activate-license post /licenses/activate This endpoint allows you to activate a license for the user. # Deactivate License Source: https://docs.dodopayments.com/api-reference/licenses/deactivate-license post /licenses/deactivate This endpoint allows you to deactivate a license for the user. # Get License Key Source: https://docs.dodopayments.com/api-reference/licenses/get-license-key get /license_keys/{id} Retrieve the details of a specific license key by its ID. # Get License Key Instance Source: https://docs.dodopayments.com/api-reference/licenses/get-license-key-instance get /license_key_instances/{id} Retrieve details of a specific license key instance by its ID. # Get License Key Instances Source: https://docs.dodopayments.com/api-reference/licenses/get-license-key-instances get /license_key_instances Retrieve a list of instances for a specific license key. # Get License Keys Source: https://docs.dodopayments.com/api-reference/licenses/get-license-keys get /license_keys Retrieve a list of license keys associated with your account. # Update License Key Source: https://docs.dodopayments.com/api-reference/licenses/update-license-key patch /license_keys/{id} This endpoint allows you to update a license key by its ID. # Update License Key Instance Source: https://docs.dodopayments.com/api-reference/licenses/update-license-key-instance patch /license_key_instances/{id} This endpoint allows you to update a specific license key instance by its ID. # Validate License Source: https://docs.dodopayments.com/api-reference/licenses/validate-license post /licenses/validate This endpoint allows you to validate a license for the user. # Metadata Guide Source: https://docs.dodopayments.com/api-reference/metadata Learn how to use metadata to store additional information about your Dodo Payments objects ## Introduction Metadata allows you to store additional, structured information about your objects in Dodo Payments. You can attach metadata to most Dodo Payments objects, including payments, subscriptions, and more. ## Overview * Metadata keys can be up to 40 characters long * Metadata values can be up to 500 characters long * You can have up to 50 metadata key-value pairs per object * Keys should only contain alphanumeric characters, dashes, and underscores * Metadata is not searchable using our API but is returned in API responses and webhooks ## Use Cases Metadata is useful for: * Storing external IDs or references * Adding internal annotations * Linking Dodo Payments objects to your system * Categorizing transactions * Adding custom attributes for reporting ## Adding Metadata You can add metadata when creating or updating objects: ```javascript // Adding metadata when creating a payment const payment = await client.payments.create({ billing: { city: 'city', country: 'AF', state: 'state', street: 'street', zipcode: 0 }, customer: { customer_id: 'customer_id' }, product_cart: [{ product_id: 'product_id', quantity: 0 }], metadata:{order_id: 'ORD-123', customer_notes: 'Customer notes'} }); ``` ## Retrieving Metadata Metadata is included in API responses when retrieving objects: ```javascript const payment = await client.payments.retrieve('pay_123'); console.log(payment.metadata.order_id); // '6735' ``` ## Searching and Filtering While metadata is not directly searchable via our API, you can: 1. Store important identifiers in metadata 2. Retrieve objects using their primary IDs 3. Filter the results in your application code ```javascript // Example: Find a payment using your order ID const payments = await client.payments.list({ limit: 100 }); const matchingPayment = payments.data.find( payment => payment.metadata.order_id === '6735' ); ``` ## Best Practices ### Do: * Use consistent naming conventions for metadata keys * Document your metadata schema internally * Keep values short and meaningful * Use metadata for static data only * Consider using prefixes for different systems (e.g., `crm_id`, `inventory_sku`) ### Don't: * Store sensitive data in metadata * Use metadata for frequently changing values * Rely on metadata for critical business logic * Store duplicate information that's available elsewhere in the object * Use special characters in metadata keys ## Supported Objects Metadata is supported on the following objects: | Object Type | Support | | ------------- | ------- | | Payments | ✓ | | Subscriptions | ✓ | ## Webhooks and Metadata Metadata is included in webhook events, making it easy to handle notifications with your custom data: ```javascript // Example webhook handler app.post('/webhook', (req, res) => { const event = req.body; if (event.type === 'payment.succeeded') { const orderId = event.data.object.metadata.order_id; // Process order using your internal order ID } }); ``` # Charge Subscription Source: https://docs.dodopayments.com/api-reference/misc/charge-subscriptions post /subscriptions/{subscription_id}/charge Charge a customer for an on-demand subscription. # Supported Countries Source: https://docs.dodopayments.com/api-reference/misc/supported-countries get /checkout/supported_countries Retrieve a list of countries that are supported by the Dodo Payments for your customers. You will receive the list of [ISO Alpha 2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) codes of countries from which we accept payments from. You can find the list of countries we accept payments from [here](/miscellaneous/list-of-countries-we-accept-payments-from). We regularly update this list as we expand our coverage. # Get Invoice Source: https://docs.dodopayments.com/api-reference/payments/get-invoice get /invoices/payments/{payment_id} Get an invoice by Payment ID. # List Payments Source: https://docs.dodopayments.com/api-reference/payments/get-payments get /payments Get a list of all payments associated with your account. # Get Payment Detail Source: https://docs.dodopayments.com/api-reference/payments/get-payments-1 get /payments/{payment_id} Get detailed information about a specific payment. # Create One Time Payment Source: https://docs.dodopayments.com/api-reference/payments/post-payments post /payments Create a one-time payment for a customer. # Retrieve Line Items Source: https://docs.dodopayments.com/api-reference/payments/retrieve-line-items get /payments/{payment_id}/line-items Retrieve line items for a specific payment. # List Payouts Source: https://docs.dodopayments.com/api-reference/payouts/get-payouts get /payouts Get a list of all payouts associated with your account. # Archive Products Source: https://docs.dodopayments.com/api-reference/products/archive-product delete /products/{id} Archive a product associated with your account. # List Products Source: https://docs.dodopayments.com/api-reference/products/get-products get /products Get a list of all products associated with your account. # Get Product Detail Source: https://docs.dodopayments.com/api-reference/products/get-products-1 get /products/{id} Get detailed information about a specific product. # Update Product Source: https://docs.dodopayments.com/api-reference/products/patch-products patch /products/{id} Update a product's details. # Create Product Source: https://docs.dodopayments.com/api-reference/products/post-products post /products Create a new product. # Update Product Images Source: https://docs.dodopayments.com/api-reference/products/put-products-images put /products/{id}/images Update a product's images. # Unarchive Products Source: https://docs.dodopayments.com/api-reference/products/unarchive-product post /products/{id}/unarchive Unarchive a product associated with your account. # Update Files Source: https://docs.dodopayments.com/api-reference/products/update-files put /products/{id}/files Update the files associated with a product. # List Refunds Source: https://docs.dodopayments.com/api-reference/refunds/get-refunds get /refunds Get a list of all refunds associated with your account. # Get Refund Detail Source: https://docs.dodopayments.com/api-reference/refunds/get-refunds-1 get /refunds/{refund_id} Get detailed information about a specific refund. # Create Refund Source: https://docs.dodopayments.com/api-reference/refunds/post-refunds post /refunds Create a refund for a payment. # Change Plan Source: https://docs.dodopayments.com/api-reference/subscriptions/change-plan post /subscriptions/{subscription_id}/change-plan Modify an existing subscription's plan, enabling both upgrades and downgrades to different pricing tiers. # Create Charge (On-Demand) Source: https://docs.dodopayments.com/api-reference/subscriptions/create-charge post /subscriptions/{subscription_id}/charge Create a charge for a subscription. This is useful for on-demand billing. # Get Subscription Detail Source: https://docs.dodopayments.com/api-reference/subscriptions/get-subscriptions get /subscriptions/{subscription_id} Get detailed information about a specific subscription. # List subscriptions Source: https://docs.dodopayments.com/api-reference/subscriptions/get-subscriptions-1 get /subscriptions Get a list of all subscriptions associated with your account. # Update Subscription Source: https://docs.dodopayments.com/api-reference/subscriptions/patch-subscriptions patch /subscriptions/{subscription_id} Update a subscription's details. # Create Subscription Source: https://docs.dodopayments.com/api-reference/subscriptions/post-subscriptions post /subscriptions Create a subscription for a customer. # Transaction Failures Source: https://docs.dodopayments.com/api-reference/transaction-failures Learn about different transaction failure reasons and how to handle them in Dodo Payments API. ## Overview Dodo Payments API provides detailed transaction failure reasons to help you understand why a payment attempt was unsuccessful. These failure reasons are standardized across different payment methods and providers, making it easier to implement consistent error handling in your application. Each transaction failure response includes: * A specific failure reason code * A human-readable error message * Additional context about the failure when available * Whether the error is user-correctable or requires system intervention Understanding these failure reasons is crucial for: * Providing clear feedback to your customers * Implementing appropriate retry logic * Handling different failure scenarios gracefully * Maintaining a reliable payment processing system ## Transaction Failure Reasons The following table lists all possible transaction failure reasons, their meanings, and whether they are user-correctable errors. | Failure Code | User Error | Description | | ---------------------------------- | ---------- | --------------------------------------------------------------- | | `AUTHENTICATION_FAILURE` | Yes | The authentication process failed during the transaction | | `AUTHENTICATION_REQUIRED` | Yes | Additional authentication is needed to complete the transaction | | `AUTHENTICATION_TIMEOUT` | Yes | The authentication process timed out | | `CARD_DECLINED` | No | The card was declined by the issuing bank | | `CARD_VELOCITY_EXCEEDED` | Yes | Too many transactions attempted in a short period | | `CUSTOMER_CANCELLED` | Yes | The customer cancelled the transaction | | `DO_NOT_HONOR` | No | The issuing bank declined the transaction | | `EXPIRED_CARD` | Yes | The card has expired | | `FRAUDULENT` | Yes | The transaction was flagged as potentially fraudulent | | `GENERIC_DECLINE` | No | The transaction was declined for an unspecified reason | | `INCORRECT_CVC` | Yes | The provided CVC code was incorrect | | `INCORRECT_NUMBER` | Yes | The card number was entered incorrectly | | `INSUFFICIENT_FUNDS` | Yes | The account has insufficient funds to complete the transaction | | `INVALID_ACCOUNT` | Yes | The account details provided are invalid | | `INVALID_AMOUNT` | Yes | The transaction amount is invalid | | `INVALID_CARD_NUMBER` | Yes | The card number format is invalid | | `INVALID_CARD_OWNER` | Yes | The card owner information is invalid | | `INVALID_CVC` | Yes | The CVC format is invalid | | `INVALID_EXPIRY_YEAR` | Yes | The card expiry year is invalid | | `INVALID_PIN` | Yes | The provided PIN is incorrect | | `INVALID_REQUEST` | Yes | The transaction request contains invalid data | | `INVALID_UPI_ID` | Yes | The UPI ID provided is invalid | | `LIVE_MODE_TEST_CARD` | Yes | A test card was used in live mode | | `LOST_CARD` | Yes | The card has been reported as lost | | `MANDATE_INVALID` | Yes | The payment mandate is invalid | | `MANDATE_REQUIRED` | Yes | A mandate is required for this transaction | | `MANDATE_REQUIRED_SYSTEM` | No | System requires a mandate for this transaction type | | `NETWORK_ERROR` | No | A network error occurred during the transaction | | `NETWORK_TIMEOUT` | No | The network request timed out | | `ORDER_CREATION_FAILED` | No | Failed to create the order for the transaction | | `PAYMENT_METHOD_UNSUPPORTED` | Yes | The payment method is not supported for this transaction | | `PICKUP_CARD` | Yes | The card has been reported as stolen and should be picked up | | `PROCESSING_ERROR` | No | An error occurred while processing the transaction | | `REENTER_TRANSACTION` | Yes | The transaction needs to be re-entered | | `REVOCATION_OF_AUTHORIZATION` | Yes | The authorization for the transaction was revoked | | `STOLEN_CARD` | Yes | The card has been reported as stolen | | `TRANSACTION_NOT_ALLOWED` | Yes | The transaction is not allowed for this card or account | | `TRANSACTION_NOT_APPROVED` | Yes | The transaction was not approved | | `TRY_AGAIN_LATER` | No | The transaction should be retried later | | `UNKNOWN_ERROR` | No | An unknown error occurred | | `PAYMENT_METHOD_PROVIDER_DECLINED` | Yes | The payment method provider declined the transaction | **User Error** indicates whether the payment decline can be resolved by the customer. When `true`, the customer can take action to fix the issue (e.g., entering correct card details). When `false`, the decline is due to system-level issues or bank restrictions that cannot be resolved by the customer. ## Support For additional help with transaction failures or integration issues, please contact our support team at [support@dodopayments.com](mailto:support@dodopayments.com). # Get Webhook Event Detail Source: https://docs.dodopayments.com/api-reference/webhooks/get-webhook_event-detail get /webhook_events/{webhook_event_id} Get detailed information about a specific webhook event. # List Webhook Events Source: https://docs.dodopayments.com/api-reference/webhooks/get-webhook_events get /webhook_events Get a list of all webhook events associated with your account. # Introduction Source: https://docs.dodopayments.com/changelog/introduction Welcome to the Dodo Payments Changelog! Stay updated on all the latest features and improvements we've rolled out to enhance your payment processing experience. At Dodo Payments, we strive to provide a seamless, transparent, and robust platform for global merchants. # Version Logs | Version | Date | Description | Link | | --------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | | `v1.34.4` | `26-6-2025` | Enhanced Dashboard Analytics with comprehensive new metrics across three key dashboard sections: Revenue Analytics, Customer Analytics, and Payment Success Rate Analytics. | [Link](/changelog/v1.34.4) | | `v1.34.0` | `18-6-2025` | Added Digital Product Delivery, React Native SDK beta release, new proration modes, adaptive currency for subscriptions, and enhanced verification form management. | [Link](/changelog/v1.34.0) | | `v1.32.0` | `9-6-2025` | Added support for Affiliates with Affonso, multiple webhook support, enhanced fraud prevention, subscription schedule cancellation, and static payment links. | [Link](/changelog/v1.32.0) | | `v1.30.0` | `2-6-2025` | Added support for \$0 payments and 100% discount codes for one-time products, enabled payout threshold for USD wallet, and standardized API error codes and messages. | [Link](/changelog/v1.30.0) | | `v1.27.0` | `26-5-2025` | Introduced Partial Refunds and Multi-Brand Support, enabling merchants to manage multiple brands and websites under a single verified business account. | [Link](/changelog/v1.27.0) | | `v1.25.0` | `20-5-2025` | Introduced Overlay Checkout Beta, a modern TypeScript library for embedded payments, and a new subscription.plan\_changed webhook event for better subscription lifecycle management. | [Link](/changelog/v1.25.0) | | `v1.22.0` | `9-5-2025` | Added unified search to the dashboard, added support for upgrading and downgrading subscriptions with addons, and added comprehensive card information to payment responses. | [Link](/changelog/v1.22.0) | | `v1.21.0` | `3-5-2025` | Added support for addons to subscriptions, made dispute handling more robust, and added customer billing details to payment responses. | [Link](/changelog/v1.21.0) | | `v1.18.3` | `26-4-2025` | Introduced Subscription Plan Change API, enhanced onboarding guidance, notification preferences center, and improved adaptive currency information. | [Link](/changelog/v1.18.3) | | `v1.16.1` | `18-4-2025` | Introduced modern verification forms, new Java and Kotlin SDKs, Afterpay/Clearpay integration, and Google Sign-In. | [Link](/changelog/v1.16.1) | | `v1.14.0` | `12-4-2025` | Introduced new European payment methods, subscription billing address updates, and various improvements. | [Link](/changelog/v1.14.0) | | `v1.13.0` | `9-4-2025` | Introduced Adaptive Currency Support, MCP Server for AI integration, mobile apps, Custom GPT, and Dodo Dash game. | [Link](/changelog/v1.13.0) | | `v1.11.0` | `28-3-2025` | Introduced address autofill for checkout page, notifications center, payment link query builder, saved payment methods, and billing currency control. | [Link](/changelog/v1.11.0) | | `v1.10.1` | `21-3-2025` | Introduced Checkout 2.0, configurable payment methods, dynamic tax calculation, and on-demand subscriptions. | [Link](/changelog/v1.10.1) | | `v1.7.0` | `14-3-2025` | Introduced a dedicated subscriptions page, enhanced customer details, detailed payout information, an official Ruby SDK, enhanced API filters, and various minor improvements. | [Link](/changelog/v1.7.0) | | `v1.5.0` | `7-3-2025` | Introduced a custom date filter for analytics, a new tax category, and various improvements. | [Link](/changelog/v1.5.0) | | `v1.4.0` | `6-3-2025` | Introduced the Storefront Feature and Amazon Pay Integration. | [Link](/changelog/v1.4.0) | | `v1.3.2` | `28-2-2025` | Introduced the Teams Feature, enhanced success/failure screens, and minor improvements. | [Link](/changelog/v1.3.2) | | `v1.0.0` | `23-2-2025` | Public release of Dodo Payments with Customer Portal and Customer Portal Session API. | [Link](/changelog/v1.0.0) | | `v0.24.0` | `15-2-2025` | Introduced discount coupons, support for over 25 local payment methods, customizable statement descriptors, and a complete UI makeover of the login page. | [Link](/changelog/v0.24.0) | | `v0.22.0` | `6-2-2025` | Introduced subscription's first payment, UPI QR payment method, tax ID on checkout, dashboard restructure, self-serve onboarding guides, multi-language support, invoice PDF makeover, and a centralized help widget. | [Link](/changelog/v0.22.0) | | `v0.20.1` | `31-1-2025` | Introduced Pay What You Want (PWYW) pricing and expands global payment coverage. | [Link](/changelog/v0.20.1) | | `v0.19.0` | `24-1-2025` | Added support for UPI and Indian Rupay cards, released PHP SDK, and introduced product archiving. | [Link](/changelog/v0.19.0) | | `v0.18.0` | `20-1-2025` | Added AI chat support, enhanced APIs, inclusive tax pricing, automated country selection, and more. | [Link](/changelog/v0.18.0) | | `v0.16.1` | `11-1-2025` | Added Account Summary feature, enhanced API documentation, and improved postal code validation. | [Link](/changelog/v0.16.1) | | `v0.15.1` | `3-1-2025` | Introducing Invoice API, subscription webhooks, comprehensive guides, Dodo Wall of Love, and social sharing features. Plus, enhanced subscription trial periods and customer identification. | [Link](/changelog/v0.15.1) | | `v0.14.0` | `26-12-2024` | Introduced the License Key Management feature, enhancing security and control for merchants distributing digital products and services. | [Link](/changelog/v0.14.0) | | `v0.13.2` | `21-12-2024` | Updated Atlas codebase, SDK updates, and minor improvements. | [Link](/changelog/v0.13.2) | | `v0.12.0` | `17-12-2024` | Added official SDKs, metadata field, and expanded customer APIs with minor improvements and bug fixes. | [Link](/changelog/v0.12.0) | | `v0.11.0` | `13-12-2024` | Introduced automated emails, webhook event logs, a license key generation guide, and various minor improvements and bug fixes. | [Link](/changelog/v0.11.0) | | `v0.10.0` | `8-12-2024` | Open-sourced Atlas demo, feature-request section, webhook request logs API, subscription list API, and various improvements and bug fixes. | [Link](/changelog/v0.10.0) | | `v0.1.0` | `25-11-2024` | This is the initial release of the Dodo Payments documentation, marking the Beta launch of our product. Explore the features and improvements designed to enhance your payment processing experience. | [Link](/changelog/v0.1.0) | # v0.1.0 (25 Nov 2024) Source: https://docs.dodopayments.com/changelog/v0.1.0 This is the initial release of the Dodo Payments documentation, marking the Beta launch of our product. Explore the features and improvements designed to enhance your payment processing experience. ## Smooth Onboarding * Comprehensive onboarding tracker to monitor merchant progress. * Support for document resubmission and live-mode activation upon verification. ## Product Catalogue Management * Easy creation, editing, and deletion of one-time and subscription products. ## Payment Link * Generate payment links for one-time and subscription products. * Includes configurable quantities and redirection options for post-payment customer journeys. ## Customizable Checkout Page * Branded checkout experiences with localized payment options available. * Real-time tax and total amount calculation displayed on checkout. ## Automated Invoice Generation * Automatic invoice generation for payments, refunds, and payouts. ## Refund Management * Seamless partial and full refund management from the dashboard. * Introduced dispute tracking for effective resolutions. ## Transparent Payouts * Flexible payout mechanisms with transparent policies and fees. ## Analytics and Reporting * Advanced analytics dashboard to showcase total revenue, transaction breakdown, customer insights, and top-performing product types. ## API and Webhook Generation * Easy-to-generate API keys to integrate Dodo Payments into your website or application. * Webhook setup for real-time notifications about transactions, refunds, and disputes. # v0.10.0 (8 Dec 2024) Source: https://docs.dodopayments.com/changelog/v0.10.0 Open-sourced Atlas demo, feature-request section, webhook request logs API, subscription list API, and various improvements and bug fixes. ## New Features * **Open Sourced Atlas**: A demo application written in Next.js to showcase the integration of Dodo Payments. Explore the [GitHub Repository](https://github.com/dodopayments/dodo-checkout-demo) and documentation [here](/developer-resources/integration-guide). * **Feature-Request Section**: Introduced a feature-request section on the Dodo Payments dashboard to prioritize the product roadmap based on user feedback. * **Webhook Request Logs API**: Added APIs for listing and detailing webhook request logs. Refer to the [API Reference](/api-reference/webhooks/get-webhook_events) for more information. * **Static Payment Links**: Added more query parameters to the static payment links to provide more flexibility in the checkout process. For more details, click [here](/developer-resources/integration-guide#1-static-payment-links). * **Subscription List API**: Added an API to fetch all subscriptions. Refer to the [API Reference](/api-reference/subscriptions/get-subscriptions-1) for details. ## Minor Improvements and Bug Fixes * Enhanced the Product and Subscription API responses with additional parameters. * Implemented rate limiting for API requests, currently set to 20 requests per second. * Improved the documentation to be more user-friendly and easier to navigate. * Various minor bug fixes and improvements. # v0.11.0 (13 Dec 2024) Source: https://docs.dodopayments.com/changelog/v0.11.0 Introduced automated emails, webhook event logs, a license key generation guide, and various minor improvements and bug fixes. ## New Features * **Automated Emails**: Added automated emails for payments, subscriptions, refunds, and disputes to keep merchants and customers informed. * **Webhook Event Log**: Added webhook event log on Dodo Payments Dashboard to track webhook events and troubleshoot issues. Navigate to `Settings > Webhooks > Webhook Logs` to access the logs. * **License Key Generation Guide**: Added a new guide to implement license key generation for digital products. Refer to the [guide](/features/license-keys) for more information. ## Minor Improvements and Bug Fixes * Various minor fixes and improvements. # v0.12.0 (17 Dec 2024) Source: https://docs.dodopayments.com/changelog/v0.12.0 Added official SDKs, metadata field, and expanded customer APIs with minor improvements and bug fixes. ## New Features * **Official SDKs**: Introduced official Dodo Payments SDKs for **Node.js**, **Python**, and **Go**. Refer to the [SDKs](/developer-resources/dodo-payments-sdks) page for more information. * **Metadata Field**: Added a `Metadata` field for payments and subscriptions to store additional information. Refer to the [Metadata](/api-reference/metadata) page for more details. * **Customer APIs**: Expanded customer APIs to include the following endpoints. You can now pass `customer_id` in payments and subscriptions to prevent customer duplication: * **Create Customer**: [/api-reference/customers/create-customer](/api-reference/customers/create-customer) * **Patch Customer**: [/api-reference/customers/patch-customer](/api-reference/customers/patch-customer) ## Minor Improvements and Bug Fixes * Various minor fixes and improvements. # v0.13.2 (21 Dec 2024) Source: https://docs.dodopayments.com/changelog/v0.13.2 Updated Atlas codebase, SDK updates, and minor improvements. ## New Features * **Atlas**: The [GitHub Repository](https://github.com/dodopayments/dodo-checkout-demo) codebase has been updated to use the [Dodo Payments Node SDK](https://github.com/dodopayments/dodopayments-node). * **SDK Update**: Bumped our SDK versions to `0.13.2` with fixes and updates. ## Minor Improvements and Bug Fixes * **Dashboard Toggle**: Improved the Test Mode and Live Mode toggle on the dashboard to enhance UX. * Various minor fixes and improvements. # v0.14.0 (26 Dec 2024) Source: https://docs.dodopayments.com/changelog/v0.14.0 Introduced the License Key Management feature, enhancing security and control for merchants distributing digital products and services. ### New Feature: License Key Management We are excited to introduce the **License Key Management** feature, designed to help merchants secure their digital products and services by generating, managing, and tracking unique license keys. This feature ensures only authorized users access your products and provides merchants with full control over their license key usage and distribution. Ideal for SaaS businesses and digital product vendors, the tool also includes advanced tracking and revocation capabilities for enhanced security. For more details, please visit the [License Keys Documentation](/features/license-keys). # v0.15.1 (4 Jan 2025) Source: https://docs.dodopayments.com/changelog/v0.15.1 Introducing Invoice API, subscription webhooks, comprehensive guides, Dodo Wall of Love, and social sharing features. Plus, enhanced subscription trial periods and customer identification. ## New Features 🚀 ### API Enhancements * Launched Invoice API, enabling merchants and customers to download invoices using `payment_id`. Visit the [Invoice API](/api-reference/payments/get-invoice) documentation for more details. * Implemented new `subscription.renewed` webhook event for subscription renewal notifications. ### Platform Updates * Introduced Dodo Payments [Wall of Love](https://dodopayments.com/wall-of-love), showcasing customer testimonials. * Added social sharing functionality for successful transactions. Share Transaction Feature * Released Policy Generator tool for automatic generation of privacy policy, terms of service, and refund policy documents. [Try Policy Generator](https://dodopayments.com/tools/policy-generator). ### Documentation Improvements * Published comprehensive guides: * [Subscription Integration Guide](/developer-resources/subscription-integration-guide) * [Webhook Events Guide](/developer-resources/webhooks/intents/webhook-events-guide) ## Improvements and Bug Fixes 🔧 ### API Updates * Added `trial_period_days` parameter to [Create Subscription API](/api-reference/subscriptions/post-subscriptions) to override product-level trial periods. * Enhanced customer identification logic: now using consistent `customer_id` across payments and subscriptions for the same email. * Implemented various performance optimizations and fixed minor bugs. # v0.16.1 (11 Jan 2025) Source: https://docs.dodopayments.com/changelog/v0.16.1 Added Account Summary feature, enhanced API documentation, and improved postal code validation. ## New Features 🚀 * **Account Summary Feature**: Provides detailed visibility into transaction and payout ledgers. Account Summary * **Enhanced API Documentation**: Includes comprehensive parameter descriptions and usage examples. ## Improvements and Bug Fixes 🔧 * **Postal Code Validation**: Updated `Zipcode` field validation to support alphanumeric postal codes. * **System Optimizations**: Implemented various bug fixes and optimizations to improve overall performance. # v0.18.0 (20 Jan 2025) Source: https://docs.dodopayments.com/changelog/v0.18.0 Added AI chat support, enhanced APIs, inclusive tax pricing, automated country selection, and more. ## New Features 🚀 * **AI Chat Support**: Now you can chat with our AI assistant to get help with your technical queries or check the documentation more effectively. Dodo Payments AI Chat Support * **Enhanced APIs**: Added APIs to filter payments, refunds, subscriptions, and disputes based on `customer_id`, time period, and status, providing more flexibility in data retrieval. * **Inclusive Tax Pricing**: Added support to make the product price inclusive of tax while creating/updating the product. The tax amount will be calculated automatically based on the tax rate. * **Automated Country Selection**: Implemented IP-based country auto-selection in static payment links. The country will be auto-selected based on the user's IP address when they open the static payment links. * **Query Parameter Removal**: Query parameters are now removed as soon as the static payment link loads, preventing end customers from changing URL parameters and tampering with the static payment link. ## Improvements and Bug Fixes 🔧 * **Minor Enhancements and Fixes**: Various minor enhancements and fixes to improve overall performance and user experience. # v0.19.0 (24 Jan 2025) Source: https://docs.dodopayments.com/changelog/v0.19.0 Added support for UPI and Indian Rupay cards, released PHP SDK, and introduced product archiving. ## New Features 🚀 * **UPI and Indian Rupay Card Support**: Added support for UPI and Indian Rupay cards for processing payments in India, currently limited to one-time purchases only. You can now accept payments from customers using UPI and Rupay cards. Additionally, enabled the creation of products with INR pricing on the Dodo Payments Dashboard.