Products
List Products
Get a list of all products associated with your account.
GET
/
products
JavaScript
import DodoPayments from 'dodopayments';
const client = new DodoPayments({
bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted
});
// Automatically fetches more pages as needed.
for await (const productListResponse of client.products.list()) {
console.log(productListResponse.business_id);
}import os
from dodopayments import DodoPayments
client = DodoPayments(
bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"), # This is the default and can be omitted
)
page = client.products.list()
page = page.items[0]
print(page.business_id)package main
import (
"context"
"fmt"
"github.com/dodopayments/dodopayments-go"
"github.com/dodopayments/dodopayments-go/option"
)
func main() {
client := dodopayments.NewClient(
option.WithBearerToken("My Bearer Token"),
)
page, err := client.Products.List(context.TODO(), dodopayments.ProductListParams{})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", page)
}
package com.dodopayments.api.example;
import com.dodopayments.api.client.DodoPaymentsClient;
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient;
import com.dodopayments.api.models.products.ProductListPage;
import com.dodopayments.api.models.products.ProductListParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
DodoPaymentsClient client = DodoPaymentsOkHttpClient.fromEnv();
ProductListPage page = client.products().list();
}
}package com.dodopayments.api.example
import com.dodopayments.api.client.DodoPaymentsClient
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient
import com.dodopayments.api.models.products.ProductListPage
import com.dodopayments.api.models.products.ProductListParams
fun main() {
val client: DodoPaymentsClient = DodoPaymentsOkHttpClient.fromEnv()
val page: ProductListPage = client.products().list()
}require "dodopayments"
dodo_payments = Dodopayments::Client.new(
bearer_token: "My Bearer Token",
environment: "test_mode" # defaults to "live_mode"
)
page = dodo_payments.products.list
puts(page)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Dodopayments\Client;
use Dodopayments\Core\Exceptions\APIException;
$client = new Client(
bearerToken: getenv('DODO_PAYMENTS_API_KEY') ?: 'My Bearer Token',
environment: 'test_mode',
);
try {
$page = $client->products->list(
archived: true,
brandID: 'brand_id',
locale: 'locale',
pageNumber: 0,
pageSize: 0,
recurring: true,
);
var_dump($page);
} catch (APIException $e) {
echo $e->getMessage();
}using System;
using DodoPayments.Client;
using DodoPayments.Client.Models.Products;
DodoPaymentsClient client = new();
ProductListParams parameters = new();
var page = await client.Products.List(parameters);
await foreach (var item in page.Paginate())
{
Console.WriteLine(item);
}use dodopayments::Client;
#[tokio::main]
async fn main() -> dodopayments::Result<()> {
let client = Client::from_env()?;
let result = client
.products()
.list()
.query(serde_json::json!({}))
.await?;
println!("{result:?}");
Ok(())
}curl --request GET \
--url https://test.dodopayments.com/products \
--header 'Authorization: Bearer <token>'{
"items": [
{
"business_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"entitlements": [
{
"id": "<string>",
"integration_config": {
"feature_id": "<string>",
"feature_type": "boolean"
},
"integration_type": "discord",
"name": "<string>",
"description": "<string>"
}
],
"is_recurring": true,
"metadata": {},
"product_id": "<string>",
"tax_category": "digital_products",
"updated_at": "2023-11-07T05:31:56Z",
"currency": "AED",
"description": "<string>",
"image": "<string>",
"name": "<string>",
"price": 123,
"price_detail": {
"currency": "AED",
"price": 123,
"type": "one_time_price",
"discount": 123,
"discount_bps": 123,
"pay_what_you_want": true,
"purchasing_power_parity": true,
"suggested_price": 123,
"tax_inclusive": true
},
"pricing_mode": "by_currency",
"tax_inclusive": true
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Page size default is 10 max is 100
Required range:
x >= 0Page number default is 0
Required range:
x >= 0List archived products
Filter products by pricing type:
true: Show only recurring pricing products (e.g. subscriptions)false: Show only one-time price productsnullor absent: Show both types of products
filter by Brand id
Shows the translated name, description and unit of the catalog entities in this
locale. The value must be a code from GET /locales, for example fr.
A field with no translation, an unknown code, or no code shows the base text.
Do not send a text from a localized response back in a create or update request. The base text then changes to the translated text.
Response
Products List
Show child attributes
Show child attributes
Last modified on March 25, 2026
Was this page helpful?
⌘I
JavaScript
import DodoPayments from 'dodopayments';
const client = new DodoPayments({
bearerToken: process.env['DODO_PAYMENTS_API_KEY'], // This is the default and can be omitted
});
// Automatically fetches more pages as needed.
for await (const productListResponse of client.products.list()) {
console.log(productListResponse.business_id);
}import os
from dodopayments import DodoPayments
client = DodoPayments(
bearer_token=os.environ.get("DODO_PAYMENTS_API_KEY"), # This is the default and can be omitted
)
page = client.products.list()
page = page.items[0]
print(page.business_id)package main
import (
"context"
"fmt"
"github.com/dodopayments/dodopayments-go"
"github.com/dodopayments/dodopayments-go/option"
)
func main() {
client := dodopayments.NewClient(
option.WithBearerToken("My Bearer Token"),
)
page, err := client.Products.List(context.TODO(), dodopayments.ProductListParams{})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", page)
}
package com.dodopayments.api.example;
import com.dodopayments.api.client.DodoPaymentsClient;
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient;
import com.dodopayments.api.models.products.ProductListPage;
import com.dodopayments.api.models.products.ProductListParams;
public final class Main {
private Main() {}
public static void main(String[] args) {
DodoPaymentsClient client = DodoPaymentsOkHttpClient.fromEnv();
ProductListPage page = client.products().list();
}
}package com.dodopayments.api.example
import com.dodopayments.api.client.DodoPaymentsClient
import com.dodopayments.api.client.okhttp.DodoPaymentsOkHttpClient
import com.dodopayments.api.models.products.ProductListPage
import com.dodopayments.api.models.products.ProductListParams
fun main() {
val client: DodoPaymentsClient = DodoPaymentsOkHttpClient.fromEnv()
val page: ProductListPage = client.products().list()
}require "dodopayments"
dodo_payments = Dodopayments::Client.new(
bearer_token: "My Bearer Token",
environment: "test_mode" # defaults to "live_mode"
)
page = dodo_payments.products.list
puts(page)<?php
require_once dirname(__DIR__) . '/vendor/autoload.php';
use Dodopayments\Client;
use Dodopayments\Core\Exceptions\APIException;
$client = new Client(
bearerToken: getenv('DODO_PAYMENTS_API_KEY') ?: 'My Bearer Token',
environment: 'test_mode',
);
try {
$page = $client->products->list(
archived: true,
brandID: 'brand_id',
locale: 'locale',
pageNumber: 0,
pageSize: 0,
recurring: true,
);
var_dump($page);
} catch (APIException $e) {
echo $e->getMessage();
}using System;
using DodoPayments.Client;
using DodoPayments.Client.Models.Products;
DodoPaymentsClient client = new();
ProductListParams parameters = new();
var page = await client.Products.List(parameters);
await foreach (var item in page.Paginate())
{
Console.WriteLine(item);
}use dodopayments::Client;
#[tokio::main]
async fn main() -> dodopayments::Result<()> {
let client = Client::from_env()?;
let result = client
.products()
.list()
.query(serde_json::json!({}))
.await?;
println!("{result:?}");
Ok(())
}curl --request GET \
--url https://test.dodopayments.com/products \
--header 'Authorization: Bearer <token>'{
"items": [
{
"business_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"entitlements": [
{
"id": "<string>",
"integration_config": {
"feature_id": "<string>",
"feature_type": "boolean"
},
"integration_type": "discord",
"name": "<string>",
"description": "<string>"
}
],
"is_recurring": true,
"metadata": {},
"product_id": "<string>",
"tax_category": "digital_products",
"updated_at": "2023-11-07T05:31:56Z",
"currency": "AED",
"description": "<string>",
"image": "<string>",
"name": "<string>",
"price": 123,
"price_detail": {
"currency": "AED",
"price": 123,
"type": "one_time_price",
"discount": 123,
"discount_bps": 123,
"pay_what_you_want": true,
"purchasing_power_parity": true,
"suggested_price": 123,
"tax_inclusive": true
},
"pricing_mode": "by_currency",
"tax_inclusive": true
}
]
}