Agent skill

Product Catalog Management

by hashgraph-online in hashgraph-online/awesome-codex-plugins

Dodo Payments product catalog management, covering products with onetimeprice, recurringprice, or usagebasedprice, add-ons, product collections, product images, and digital file delivery.

Apache-2.0Auto-check passedDevelopment

Install Product Catalog Management

skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill product-catalog-management -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install hashgraph-online/awesome-codex-plugins product-catalog-management --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/dodopayments/dodo-agent-plugin/skills/product-catalog-management .claude/skills/product-catalog-management && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
product-catalog-management
GitHub stars
1.3k
Token cost
~3.1k tokens
SKILL.md length
797 words
Files
1
Skills in repo
716
Repo updated
First seen
Licence
Apache-2.0

At a glance

Dodo Payments product catalog management, covering products with onetimeprice, recurringprice, or usagebasedprice, add-ons, product collections, product images, and digital file delivery.

  • Updating products
  • SKILL.md covers When to use this skill, Core concepts, Creating a product and Listing and retrieving products, plus 10 more sections
  • Reaches dodo.link; needs DODO_PAYMENTS_API_KEY
  • Building a storefront

What it does

Product Catalog Management is an agent skill from hashgraph-online/awesome-codex-plugins. Dodo Payments product catalog management, covering products with onetimeprice, recurringprice, or usagebasedprice, add-ons, product collections, product images, and digital file delivery. Use when creating or updating products, plans, or prices, building a storefront, uploading images, attaching downloadable files, or debugging a failed product update.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. The repository describes itself as: A curated list of awesome OpenAI Codex / ChatGPT plugins, skills, and resources. The 1 Codex Marketplace. See live plugins at: https://hol.org/plugins/best-codex-plugins. The licence is Apache-2.0.

When your agent uses it

  • Updating products
  • Building a storefront
  • Uploading images
  • Attaching downloadable files

Example prompts

  • “/product-catalog-management”

Requirements

  • Node.js
  • A credential in DODO_PAYMENTS_API_KEY

What it can do on your machine

Read from SKILL.md and the folder at commit 3e1456a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • dodo.link

    Also links to:

    • docs.dodopayments.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • DODO_PAYMENTS_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Product Catalog Management loads about 3.1k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 797 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~97
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from hashgraph-online/awesome-codex-plugins at commit 3e1456a, republished under its Apache-2.0 licence (© hashgraph-online). 797 words, ~3,063 tokens.

Download SKILL.mdSave it as .claude/skills/product-catalog-management/SKILL.md (or your agent's skills folder).
name
product-catalog-management
description
Dodo Payments product catalog management, covering products with one_time_price, recurring_price, or usage_based_price, add-ons, product collections, product images, and digital file delivery. Use when creating or updating products, plans, or prices, building a storefront, uploading images, attaching downloadable files, or debugging a failed product update.

Product Catalog Management

This skill covers the full product lifecycle: creating products with pricing models, managing add-ons and collections, uploading product images, and delivering digital files to customers.

When to use this skill

  • You need to create or update products with one-time, recurring, or usage-based pricing.
  • You're building a product collection or storefront.
  • You need to upload product images or deliver digital files to customers.
  • You're managing add-ons or product variants.
  • You need to understand why a product update failed or how to change a product's pricing.

Core concepts

Product model: Every product has exactly one pricing model selected at creation. The three models are:

  • one_time_price: charge once per purchase.
  • recurring_price: charge on a configurable payment frequency and subscription period.
  • usage_based_price: charge per unit consumed (see usage-based-billing skill for meter setup).

Pricing is nested inside the product object. There is no separate top-level Price resource.

Pricing structure: Each price object contains:

  • type: one of the three models above.
  • currency: ISO 4217 code (e.g., USD, AED, INR).
  • price: amount in the smallest currency unit (cents for USD).
  • discount: optional discount amount in the same unit.

Tax category: Required at product creation. Dodo uses this to calculate and collect sales tax. Supported values are digital_products, saas, e_book, and edtech.

Lifecycle: Products support list, retrieve, update, and archive/unarchive. There is no delete endpoint. Archived products remain in your history but don't appear in new checkouts.

Images: Presigned upload URLs expire after 60 seconds. Upload to the URL immediately after requesting it.

Digital delivery: Entitlements grant customers access to files. Download URLs expire after roughly 15 minutes.

Creating a product

All products require a name, a pricing model, and a tax category.

typescript
import DodoPayments from 'dodopayments';

const client = new DodoPayments({
  bearerToken: process.env.DODO_PAYMENTS_API_KEY,
  environment: 'test_mode',
});

// One-time purchase
const product = await client.products.create({
  name: 'Pro Bundle',
  tax_category: 'digital_products',
  price: {
    type: 'one_time_price',
    currency: 'USD',
    price: 9900, // $99.00
    discount: 0,
    purchasing_power_parity: false,
  },
});

console.log(product.product_id); // pdt_...

For recurring products, specify the billing cycle:

typescript
const subscription = await client.products.create({
  name: 'Premium Plan',
  tax_category: 'saas',
  price: {
    type: 'recurring_price',
    currency: 'USD',
    price: 2999, // $29.99/month
    discount: 0,
    payment_frequency_count: 1,
    payment_frequency_interval: 'Month',
    subscription_period_count: 1,
    subscription_period_interval: 'Month',
    purchasing_power_parity: false,
  },
});

This skill is the canonical source for product creation request shapes. For a usage-based product, create the meter as described in the usage-based-billing skill, then attach it through the singular price.meters array:

typescript
const metered = await client.products.create({
  name: 'API Calls',
  tax_category: 'saas',
  price: {
    type: 'usage_based_price',
    currency: 'USD',
    discount: 0,
    fixed_price: 0, // No fixed monthly charge; amounts use the smallest currency unit
    payment_frequency_count: 1,
    payment_frequency_interval: 'Month',
    subscription_period_count: 1,
    subscription_period_interval: 'Month',
    purchasing_power_parity: false,
    meters: [
      {
        meter_id: 'mtr_api_calls',
        price_per_unit: '0.01',
        free_threshold: 1000,
      },
    ],
  },
});

price_per_unit is a decimal string in the configured currency's smallest unit. The optional free_threshold excludes that many aggregated units before per-unit charging begins.

Listing and retrieving products

typescript
// List all products
const products = await client.products.list();

// Retrieve a single product
const product = await client.products.retrieve('pdt_pro_bundle');

Updating a product

PATCH /products/{id} (client.products.update) accepts the name, description, and metadata, and also price, tax_category, and pricing_mode. Every field is optional; omitted fields stay unchanged.

Two limits apply. The pricing model is immutable: you can edit the amount, but you cannot turn a one-time product into a subscription or usage-based one (or back) - create a new product instead. And a price edit only changes what new customers pay: existing subscriptions keep the price they were created with, so move them explicitly with Change Plan (client.subscriptions.changePlan(...)).

typescript
await client.products.update('pdt_pro_bundle', {
  name: 'Pro Bundle (Updated)',
  description: 'Includes all pro features',
  metadata: {
    category: 'software',
    tier: 'premium',
  },
});

Archiving and unarchiving

Archive a product to hide it from new checkouts without deleting it:

typescript
await client.products.archive('pdt_pro_bundle');

// Restore it later
await client.products.unarchive('pdt_pro_bundle');

Product images

Upload a product image via presigned URL. The URL is valid for 60 seconds.

typescript
import fs from 'node:fs';

// Request a presigned upload URL
const uploadUrl = await client.products.images.update('pdt_pro_bundle', {
  force_update: true,
});

// Upload immediately (within 60 seconds)
const response = await fetch(uploadUrl.url, {
  method: 'PUT',
  body: fs.readFileSync('./product.png'),
  headers: { 'Content-Type': 'image/png' },
});

if (!response.ok) {
  throw new Error('Image upload failed');
}

Add-ons

Add-ons are optional extras customers can purchase alongside a product. Create them independently, then reference them in checkout.

typescript
// Create an add-on
const addon = await client.addons.create({
  name: 'Priority Support',
  tax_category: 'saas',
  currency: 'USD',
  price: 4900, // $49.00
});

// Upload an image for the add-on
const addonImageUrl = await client.addons.updateImages(addon.id);

// List add-ons
const addons = await client.addons.list();
Show full SKILL.md (317 more words)Show less

Product collections

Group products into collections for themed checkouts. Collections have nested groups and items.

typescript
// Create a collection
const collection = await client.productCollections.create({
  name: 'Starter Bundle',
  description: 'Everything you need to get started',
  groups: [
    {
      group_name: 'Core Tools',
      products: [
        { product_id: 'pdt_tool_a' },
        { product_id: 'pdt_tool_b' },
      ],
    },
  ],
});

// Add another group later
await client.productCollections.groups.create(collection.id, {
  group_name: 'Optional Tools',
  products: [
    { product_id: 'pdt_tool_c' },
    { product_id: 'pdt_tool_d' },
  ],
});

// Server route (e.g. POST /api/checkout): create the checkout session and return its URL
export async function POST() {
  const session = await client.checkoutSessions.create({
    product_collection_id: collection.id,
    product_cart: [], // Required: pass an empty array for collection checkout
    return_url: 'https://yoursite.com/return',
  });

  return Response.json({ checkout_url: session.checkout_url });
}

Never call the SDK or expose the API key in browser code. The browser only receives the URL from your server route and redirects:

typescript
// Browser
const res = await fetch('/api/checkout', { method: 'POST' });
const { checkout_url } = (await res.json()) as { checkout_url: string };
window.location.href = checkout_url;

Digital product delivery

Entitlements grant customers access to downloadable files. Create an entitlement, upload files, and generate download links.

typescript
// openAsBlob requires Node.js 20 or later
import { openAsBlob } from 'node:fs';

// Create an entitlement
const entitlement = await client.entitlements.create({
  name: 'Pro Bundle Files',
  integration_type: 'digital_files',
  integration_config: {
    digital_file_ids: [],
  },
});

// Upload and attach a file as multipart/form-data (append `filename` before `file`)
const form = new FormData();
form.append('filename', 'pro-bundle.zip');
form.append('file', await openAsBlob('./pro-bundle.zip'), 'pro-bundle.zip');
const { file_id } = await client.entitlements.files.upload(entitlement.id, { body: form });

// Attach the entitlement to a product.
// `entitlements` REPLACES every entitlement already attached to the product:
// include all of them, send [] to remove all, or omit the field to leave them unchanged.
await client.products.update('pdt_pro_bundle', {
  entitlements: [{ entitlement_id: entitlement.id }],
});

// A grant is produced by fulfillment when the customer purchases the product.
// Grants can be listed, revoked, or fulfilled with a manually managed license key;
// they cannot be created directly through the SDK.

// List grants for a customer
const grants = await client.customers.listEntitlementGrants('cus_customer_123');

// Generate a download URL (valid for roughly 15 minutes)
const grant = grants.items[0];
const downloadUrl = grant?.digital_product_delivery?.files[0]?.download_url;

Create short, shareable links to products:

typescript
const shortLink = await client.products.shortLinks.create('pdt_pro_bundle', {
  slug: 'pro-bundle-deal',
});

console.log(shortLink.short_url); // https://dodo.link/pro-bundle-deal

Localized pricing

For country or currency-specific pricing, use the localized-pricing skill. Do not hardcode prices in the client.

Common mistakes

Expecting a delete endpoint: Products don't have a delete method. Archive them instead. Archived products remain in your history for reconciliation.

Trying to change the pricing model: You cannot switch a product between one-time, subscription, and usage-based pricing (for example one_time_price to recurring_price). Create a new product with the model you need.

Expecting a price edit to reprice existing subscribers: client.products.update(...) changes the amount for new customers only. Existing subscriptions renew at the price they were created with; move them with client.subscriptions.changePlan(...).

Hardcoding prices in the client: Always fetch the product catalog from the API. Prices change, and your client code will become stale. Read client.products.retrieve(id) to get the current price.

Forgetting the tax category: Every product requires a tax_category. Dodo uses this to calculate and remit sales tax. Omitting it will cause the create request to fail.

Uploading images after the 60-second window: Request the presigned URL and upload immediately. If the URL expires, request a new one.

Passing a non-empty product_cart for collection checkout: Collection checkout requires product_cart: []. The collection itself defines what's in the cart.

Confusing purchasing_power_parity with localized pricing: PPP is native. Set price.purchasing_power_parity: true to charge a business-wide, per-country percentage of the price (default false). It requires Adaptive Currency to be enabled, and a matching localized price always wins over PPP. See the localized-pricing skill.

Resources

© hashgraph-online, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/dodopayments/dodo-agent-plugin/skills/product-catalog-management of hashgraph-online/awesome-codex-plugins.

Open the folder on GitHubat commit 3e1456a

Compare with similar skills

Product Catalog Management next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Product Catalog Management compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Product Catalog Management this skillhashgraph-online/awesome-codex-plugins1.3k—~3.1kAutomated safety check: PassApache-2.0
Deskcomm Contribuirmelgarafael/DeskcommCRM4.5k—~3.6kAutomated safety check: NotesMIT
Plan ArbiterBuilderIO/skills4.6k—~1kAutomated safety check: PassMIT
Gemini CLIforayconsulting/gemini_cli_skill191—~1.4kAutomated safety check: NotesNone
Cabloy Domain Planningcabloy/cabloy982—~2.1kAutomated safety check: PassMIT
Doesitarm App ReviewThatGuySam/doesitarm3.8k—~826Automated safety check: PassCustom licence

Similar skills

  • Deskcomm Contribuir

    melgarafael/DeskcommCRM

    Guia de contribuição ao DeskcommCRM para quem vai mexer no código e abrir um pull request, sobretudo de um fork.

    4.5k GitHub stars~3.6k tokensUpdated today
    DevelopmentAuto-check: notes
  • Plan Arbiter

    BuilderIO/skills

    A skill your agent uses when asked to compare, cross-review, merge, judge, choose, or arbitrate competing plans from multiple agents such as Codex and Claude Code; when given two or more proposed…

    4.6k GitHub stars~1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Gemini CLI

    forayconsulting/gemini_cli_skill

    Wield Google's Gemini CLI as a powerful auxiliary tool for code generation, review, analysis, and web research.

    191 GitHub stars~1.4k tokensUpdated 10 mo ago
    DevelopmentAuto-check: notes
  • A skill your agent uses whenever the user wants to plan a new business domain in this Cabloy repo, such as CRM, OA, training, ERP, or a similar long-lived domain.

    982 GitHub stars~2.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Doesitarm App Review

    ThatGuySam/doesitarm

    Review Does It ARM app-listing pull requests and app-request or compatibility-update issues.

    3.8k GitHub stars~826 tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Gh Bot Comment

    jetstreamapp/jetstream

    Post GitHub PR/issue comments, reviews, and review replies as the Jetstream bot account instead of the user's personal account.

    127 GitHub stars~616 tokensUpdated today
    DevelopmentAuto-check passed

More from hashgraph-online/awesome-codex-plugins

All 715 skills in this repo
  • Anime Reaction Gif

    hashgraph-online/awesome-codex-plugins

    Create original anime-style reaction stickers as looping GIFs and MP4 previews, using generated character pose sheets and timed key poses.

    1.3k GitHub stars~922 tokensUpdated today
    Auto-check passed
  • Calibredb

    hashgraph-online/awesome-codex-plugins

    Manage and query Calibre libraries with the calibredb CLI (local paths or Calibre Content server URLs).

    1.3k GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Rust API Test Harness

    hashgraph-online/awesome-codex-plugins

    A skill your agent uses when adding, changing, testing, or debugging Rust HTTP APIs and services, especially when Codex needs black-box integration tests, random-port app startup, real database test…

    1.3k GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Art

    hashgraph-online/awesome-codex-plugins

    Make a studio's game look like something at build time — a cover from a real frame of the game (free), painted covers, backdrops, textures and character plates from image models through the…

    1.3k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Calle

    hashgraph-online/awesome-codex-plugins

    Use CALL-E from Codex through the calle CLI. An agent skill from hashgraph-online/awesome-codex-plugins.

    1.3k GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Game Balance Economy

    hashgraph-online/awesome-codex-plugins

    Balance game difficulty, resources, rewards, probability, progression, economies, and dominant strategies.

    1.3k GitHub stars~618 tokensUpdated today
    Auto-check passed

Questions about Product Catalog Management

What does Product Catalog Management do?

Dodo Payments product catalog management, covering products with onetimeprice, recurringprice, or usagebasedprice, add-ons, product collections, product images, and digital file delivery. Product Catalog Management is an agent skill from hashgraph-online/awesome-codex-plugins. Dodo Payments product catalog management, covering products with onetimeprice, recurringprice, or usagebasedprice, add-ons, product collections, product images, and digital file delivery.

When should I use Product Catalog Management?

Product Catalog Management fits situations like: updating products; building a storefront; uploading images; attaching downloadable files.

How do I install Product Catalog Management in Claude Code?

Run `npx skills add hashgraph-online/awesome-codex-plugins --skill product-catalog-management -a claude-code`. Or copy the skill folder (plugins/dodopayments/dodo-agent-plugin/skills/product-catalog-management in hashgraph-online/awesome-codex-plugins) into .claude/skills/product-catalog-management in your project. Claude Code loads it when a task matches its description.

How do I install Product Catalog Management in Codex?

Run `npx skills add hashgraph-online/awesome-codex-plugins --skill product-catalog-management -a codex`. Or copy the skill folder (plugins/dodopayments/dodo-agent-plugin/skills/product-catalog-management in hashgraph-online/awesome-codex-plugins) into .agents/skills/product-catalog-management in your project. Codex loads it when a task matches its description.

Can I use Product Catalog Management in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hashgraph-online/awesome-codex-plugins --skill product-catalog-management -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/product-catalog-management, .gemini/skills/product-catalog-management, .github/skills/product-catalog-management and .opencode/skills/product-catalog-management in your project.

What does Product Catalog Management need to run?

Going by SKILL.md and its folder, Product Catalog Management needs credentials named DODO_PAYMENTS_API_KEY. Our summary lists: Node.js; A credential in DODO_PAYMENTS_API_KEY.

Does Product Catalog Management access the network?

SKILL.md names 2 domains. In commands or code: dodo.link; the agent is likely to contact it when it follows the instructions. As links in the text: docs.dodopayments.com. This is read from the text; nothing was executed.

Is Product Catalog Management safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Product Catalog Management use?

Product Catalog Management is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Product Catalog Management use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Product Catalog Management?

Skills that share tags, products or a category with Product Catalog Management: Deskcomm Contribuir (melgarafael/DeskcommCRM, 4.5k stars), Plan Arbiter (BuilderIO/skills, 4.6k stars), Gemini CLI (forayconsulting/gemini_cli_skill, 191 stars) and Cabloy Domain Planning (cabloy/cabloy, 982 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Product Catalog Management?

hashgraph-online (a GitHub organization) maintains it in hashgraph-online/awesome-codex-plugins, which has 1,267 GitHub stars. The repository holds 716 skills in this directory. The repository was last updated on October 10, 2026.

Source: hashgraph-online/awesome-codex-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.