<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Deep Kumbhare</title>
    <description>The latest articles on Forem by Deep Kumbhare (@deepkumbhare2001).</description>
    <link>https://forem.com/deepkumbhare2001</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3853345%2Fcf9ec069-46a6-440e-a194-8e40501650ce.png</url>
      <title>Forem: Deep Kumbhare</title>
      <link>https://forem.com/deepkumbhare2001</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/deepkumbhare2001"/>
    <language>en</language>
    <item>
      <title>OpenClaw Creem agent</title>
      <dc:creator>Deep Kumbhare</dc:creator>
      <pubDate>Tue, 31 Mar 2026 22:57:36 +0000</pubDate>
      <link>https://forem.com/deepkumbhare2001/openclaw-creem-agent-4bk5</link>
      <guid>https://forem.com/deepkumbhare2001/openclaw-creem-agent-4bk5</guid>
      <description>&lt;p&gt;In this article I will show you my openclaw agent for creem(MoR) to perform &amp;amp; monitor various operations of creem store, without checking the dashboard.&lt;/p&gt;

&lt;p&gt;But before we jump into the setup, let’s quickly understand what OpenClaw actually is.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is OpenClaw?
&lt;/h3&gt;

&lt;p&gt;OpenClaw is an open-source AI agent framework that lets you build your own custom agents to automate workflows, connect tools, and interact with external services and most interesting thing is you can directly control the agent from the telegram/whatapp/slack.&lt;/p&gt;

&lt;p&gt;We will create our agent with openclaw that continuously monitor our creem store and gives us alerts whenever required.&lt;/p&gt;

&lt;p&gt;Here’s what we expect from the agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;New payments and failed payments alerts&lt;/li&gt;
&lt;li&gt;Churn detection alerts.&lt;/li&gt;
&lt;li&gt;Daily digest that gives overall overview of the store.&lt;/li&gt;
&lt;li&gt;Heartbeat monitoring on every 4-5 hours according to the state of store.&lt;/li&gt;
&lt;li&gt;Answer any the question you have regarding your store.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Install openclaw on your local system. visit the official site for more details: &lt;a href="https://openclaw.ai/" rel="noopener noreferrer"&gt;https://openclaw.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have connected it with my telegram bot and I am using OpenAI for interaction with the agent. &lt;br&gt;
You also need to install the Creem CLI and need to login with your api key. for instructions visit: &lt;a href="https://docs.creem.io/code/cli" rel="noopener noreferrer"&gt;https://docs.creem.io/code/cli&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 1: Real time alerts like new payment, failed payment and churn detection events.
&lt;/h3&gt;

&lt;p&gt;To give realtime alerts it is mandatory that we receive the webhooks from the creem. Openclaw itself can’t receive the webhooks. So, we have created a small nextjs application that has only route &lt;code&gt;/api/webhooks/creem&lt;/code&gt; . It just receives the webhook and makes a post request to our openclaw hook. so from here our openclaw receives the message analyse it and gives alert to the telegram. You can check the code of this nextjs application here: &lt;a href="https://github.com/DeepKumbhare/creem-openclaw-demo-app/tree/main" rel="noopener noreferrer"&gt;https://github.com/DeepKumbhare/creem-openclaw-demo-app/tree/main&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So for setup, you need to clone this repo and start dev server.For receiving the webhooks, you need to use ngrok. &lt;/p&gt;

&lt;p&gt;Now, when I will make the payment in a product, I will receive the alert like below in my telegram bot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmq96rpgn62dm6gbzksph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmq96rpgn62dm6gbzksph.png" alt="New product" width="595" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will also receive the similar alerts when payment fails or  when we detect events like subscription cancelled or expired(churn detection alerts). I am attaching the screenshot below for more details:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj42e5zrqs5ta0oh5e202.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj42e5zrqs5ta0oh5e202.png" alt="churn detection" width="529" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 2: Heartbeat monitoring on every 4-5 hours according to the state of store.
&lt;/h3&gt;

&lt;p&gt;I have setup the monitoring of store using the heartbeat. Here is the official file creem provides for heartbeat: &lt;a href="https://creem.io/HEARTBEAT.md" rel="noopener noreferrer"&gt;https://creem.io/HEARTBEAT.md&lt;/a&gt;&lt;br&gt;
It saves the state everytime it runs locally and gives us alert about the changes between two runs. We can define the time period we want to run the heartbeat. Ideally 4-5 hours is recommended.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73tvcfo3armi9bv4ks1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73tvcfo3armi9bv4ks1h.png" alt="Heartbeat run" width="693" height="79"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 3: Daily digest of the store:
&lt;/h3&gt;

&lt;p&gt;It gives us the overall summary of the store in the day. You can set like I want daily digest in morning 9 AM. So, Openclaw will give the daily digest everyday 9 AM in morning.&lt;/p&gt;

&lt;p&gt;Here is how daily digest looks like: &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeh0swdxjsccua1ictf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeh0swdxjsccua1ictf1.png" alt="daily digest" width="494" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This contains almost every aspect of our store like revenue, churn , subscription health, risks and suggested action. &lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 4: Ask anything about your store.
&lt;/h3&gt;

&lt;p&gt;As we have given it our creem skill and it has access to our creem account via creem CLI, our agent can answer any of your questions related to your creem store&lt;/p&gt;

&lt;p&gt;For example: You can ask it to list all the products of your store or you can ask to generate the discount code that you can share with your users.&lt;br&gt;
I have also asked the similar questions. I am attaching the screenshots below: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foyhni8mxzk2kn61qlhe1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foyhni8mxzk2kn61qlhe1.png" alt="List all products" width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositories: &lt;br&gt;
Demo application for receiving the webhooks: &lt;a href="https://github.com/DeepKumbhare/creem-openclaw-demo-app/tree/main" rel="noopener noreferrer"&gt;https://github.com/DeepKumbhare/creem-openclaw-demo-app/tree/main&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agent configs: &lt;a href="https://github.com/DeepKumbhare/agent-configs/" rel="noopener noreferrer"&gt;https://github.com/DeepKumbhare/agent-configs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can easily use my agent configs and setup similar agent for your creem store in openclaw.&lt;/p&gt;

&lt;p&gt;Summary&lt;br&gt;
The article describes an AI agent built with OpenClaw to monitor and manage a Creem (Merchant of Record) store automatically, without needing to check the dashboard manually.&lt;br&gt;
OpenClaw is an open-source AI agent framework that connects to messaging platforms like Telegram, WhatsApp, or Slack, allowing users to control agents conversationally.&lt;br&gt;
The agent handles four main workflows:&lt;/p&gt;

&lt;p&gt;Real-time alerts — detects new payments, failed payments, and churn events (cancelled/expired subscriptions) sends notifications to users via Telegram.&lt;br&gt;
Heartbeat monitoring — runs every 4–5 hours, compares the current store state to the previous one, and alerts the user about any changes.&lt;br&gt;
Daily digest — sends a morning summary (at a configured time like 9 AM) covering revenue, churn, subscription health, risks, and recommended actions.&lt;br&gt;
Q&amp;amp;A about the store — since the agent has access to the Creem CLI, users can ask it anything about their store, such as listing products or generating discount codes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>openclaw</category>
    </item>
    <item>
      <title>Creem CLI : Powerful Developer Tool</title>
      <dc:creator>Deep Kumbhare</dc:creator>
      <pubDate>Tue, 31 Mar 2026 11:22:01 +0000</pubDate>
      <link>https://forem.com/deepkumbhare2001/creem-cli-powerful-developer-tool-123n</link>
      <guid>https://forem.com/deepkumbhare2001/creem-cli-powerful-developer-tool-123n</guid>
      <description>&lt;p&gt;When working with payments, developers waste time context-switching between dashboards, logs, terminals, and code editors. This reduces the productivity of developer and also slows down development. Creem CLI helps you to manage your entire Creem store from the terminal. Everything from managing products, customers, subscription and even the migration.&lt;/p&gt;

&lt;p&gt;And when you combine it with AI coding assistants like Claude Code, Cursor, or Windsurf, it becomes even more powerful. Instead of memorizing commands, you can just describe what you want and get things done faster. &lt;/p&gt;

&lt;p&gt;In this article, we’ll set up Creem CLI, integrate it with AI coding tools, and explore how it can streamline your workflow and make development easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup Creem
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install Creem CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;brew&lt;/span&gt; &lt;span class="nx"&gt;tap&lt;/span&gt; &lt;span class="nx"&gt;armitage&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;labs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;creem&lt;/span&gt;
&lt;span class="nx"&gt;brew&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="nx"&gt;creem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you install the CLI, you can verify installation with the below command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjby7gygs8szxmhdtmf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjby7gygs8szxmhdtmf6.png" alt="creem cli version" width="800" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication
&lt;/h2&gt;

&lt;p&gt;Once setup is done, you need to authenticate yourself to perform operations on your store. You will need  API key to authenticate. You can find this from your creem dashboard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="nx"&gt;creem_test_YOUR_KEY_HERE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;once done, you can also verify your account with below command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;whoami&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fld5bebvifpb1x42bfd3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fld5bebvifpb1x42bfd3r.png" alt="creem user verification" width="613" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you are authenticated and can perform all kind of action to your creem account with Creem CLI. &lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Now, lets see some of the basic and most useful CLI commands to get you the better idea of how CLI can be helpful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;subscriptions&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;subscriptions&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;transactions&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;transactions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Browse all the Products
&lt;/h3&gt;

&lt;p&gt;Run the command &lt;code&gt;Creem Products&lt;/code&gt; to list all the products from our store. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefitfnkw64gk15mgqsv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefitfnkw64gk15mgqsv4.png" alt="creem products command results" width="800" height="575"&gt;&lt;/a&gt;&lt;br&gt;
You can navigate and click enter on any product to get the product details. Here I have selected one product and below is the details of it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxz7dr0s1un3bugifeops.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxz7dr0s1un3bugifeops.png" alt="creem selected product" width="508" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;likewise, you can also browse all your transactions, customers and Subscriptions. &lt;/p&gt;
&lt;h3&gt;
  
  
  Manage Subscriptions
&lt;/h3&gt;

&lt;p&gt;You can directly manage the subscriptions from the CLI, without ever login in to your creem dashboard. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnee6zgd32flsjdkkoh03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnee6zgd32flsjdkkoh03.png" alt="Manage subscription" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt0n5h1eekpc2vfm0gbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt0n5h1eekpc2vfm0gbq.png" alt="detailed subscription" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the status bar for commands to update the subscription status.&lt;/p&gt;
&lt;h3&gt;
  
  
  Quick commands
&lt;/h3&gt;

&lt;p&gt;Here is the list of commands you will mostly use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Products&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;prod_XXXXX&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pro Plan&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="mi"&gt;1999&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;currency&lt;/span&gt; &lt;span class="nx"&gt;USD&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;billing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;recurring&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;billing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;period&lt;/span&gt; &lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Customers&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;cust_XXXXX&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt; &lt;span class="nx"&gt;billing&lt;/span&gt; &lt;span class="nx"&gt;cust_XXXXX&lt;/span&gt;   &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;generates&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;billing&lt;/span&gt; &lt;span class="nx"&gt;portal&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Subscriptions&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;subscriptions&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;subscriptions&lt;/span&gt; &lt;span class="nx"&gt;cancel&lt;/span&gt; &lt;span class="nx"&gt;sub_XXXXX&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="nx"&gt;scheduled&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;subscriptions&lt;/span&gt; &lt;span class="nx"&gt;pause&lt;/span&gt; &lt;span class="nx"&gt;sub_XXXXX&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;subscriptions&lt;/span&gt; &lt;span class="nx"&gt;resume&lt;/span&gt; &lt;span class="nx"&gt;sub_XXXXX&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Transactions&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;transactions&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;transactions&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;txn_XXXXX&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Checkouts&lt;/span&gt;
&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;checkouts&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="nx"&gt;prod_XXXXX&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//app.com/welcome&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to Use CLI Most effectively:
&lt;/h3&gt;

&lt;p&gt;For any details regarding any command in creem CLI, you can always use &lt;code&gt;creem -h&lt;/code&gt; or &lt;code&gt;creem --help&lt;/code&gt;.  For example if you don’t know what are the options for the command for creating product from Creem CLI then I will fire the command like &lt;br&gt;
&lt;code&gt;creem products create —help&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;and it will instantly give me all the available options: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjibbdxxcted7lgua7mc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjibbdxxcted7lgua7mc.png" alt="Creem help options" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and by using this we can easily create product as per our requirement. &lt;/p&gt;

&lt;p&gt;Now we have got the basic idea about what Creem CLI is and how can we use it. Now, we will see how we can see how we can use this in AI coding tool like Claude Code.&lt;/p&gt;
&lt;h2&gt;
  
  
  Integrate Creem CLI with Coding tool
&lt;/h2&gt;

&lt;p&gt;For this purpose, I created a simple Next.js application with two products: one one-time product and one subscription product. There is also a success page with a link to the customer portal for managing payments. Additionally, we have Orders and Subscriptions pages where all orders and subscriptions are displayed.&lt;/p&gt;

&lt;p&gt;For this project, we will use Claude Code as the coding tool in the VS Code IDE.&lt;/p&gt;

&lt;p&gt;To set this up, we need to add Creem’s SKILL.md file to our project, which is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://creem.io/SKILL.md" rel="noopener noreferrer"&gt;https://creem.io/SKILL.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Copy the content and create a file at &lt;code&gt;.claude/skills/creem/SKILL.md&lt;/code&gt; in your project&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it — the skill has been added to the project.&lt;/p&gt;

&lt;p&gt;Now, we will work through the following workflows using the Creem CLI and an AI coding tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test the checkout flow and verify it with the Creem CLI&lt;/li&gt;
&lt;li&gt;Handle state changes caused by webhook failures&lt;/li&gt;
&lt;li&gt;Manage products and subscriptions&lt;/li&gt;
&lt;li&gt;Create and manage discount codes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can checkout the Github repo here: &lt;a href="https://github.com/DeepKumbhare/creem-cli-tutorial" rel="noopener noreferrer"&gt;https://github.com/DeepKumbhare/creem-cli-tutorial&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Workflows
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Workflow 1: Testing the checkout flow and verifying it using the CREEM CLI.
&lt;/h3&gt;

&lt;p&gt;We will ask Claude Code to generate the checkout the link for one of our product in store and it will use the CLI to generate the checkout link and will provide it to us. We will make a test payment and ask again Claude Code to verify the transaction. &lt;/p&gt;

&lt;p&gt;I : we have a product image generator. Please create a checkout link for it and give it to me. &lt;/p&gt;

&lt;p&gt;Claude code: Here's your checkout link for the Image Generator product ($12.00/month): &lt;a href="https://creem.io/test/checkout/prod_5PrU9h573ROasTsHXQkGTN/ch_2kR5r6O82HGmL82m47qZSI" rel="noopener noreferrer"&gt;https://creem.io/test/checkout/prod_5PrU9h573ROasTsHXQkGTN/ch_2kR5r6O82HGmL82m47qZSI&lt;/a&gt; This is a test mode checkout. To test payments, use Stripe test card 4242 4242 4242 4242 with any future expiry and any CVC.&lt;/p&gt;

&lt;p&gt;I have then made the payment with test card and asked Claude Code to confirm the payment. &lt;/p&gt;

&lt;p&gt;I : we just have completed the payment can you please verify the checkout is successful. &lt;/p&gt;

&lt;p&gt;Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;Payment&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;confirmed&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;most&lt;/span&gt; &lt;span class="nx"&gt;recent&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt; &lt;span class="nx"&gt;shows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                               

  &lt;span class="err"&gt;┌─────────────────┬─────────────────────────────┐&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt;      &lt;span class="nx"&gt;Field&lt;/span&gt;      &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="nx"&gt;Value&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;├─────────────────┼─────────────────────────────┤&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt;          &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;paid&lt;/span&gt;                        &lt;span class="err"&gt;│&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;├─────────────────┼─────────────────────────────┤&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Amount&lt;/span&gt;          &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;$12&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="nx"&gt;USD&lt;/span&gt;                  &lt;span class="err"&gt;│&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;├─────────────────┼─────────────────────────────┤&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Transaction&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;tran_4DCPbFnJcvTe7tIG7n9lqa&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;├─────────────────┼─────────────────────────────┤&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Subscription&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;sub_7CEoO2Ric0UpRvFCsOsOsg&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt;
  &lt;span class="err"&gt;├─────────────────┼─────────────────────────────┤&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Customer&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;     &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;cust_7hy4RWKFhdErs8HnyjY4eq&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                                                                    
  &lt;span class="err"&gt;├─────────────────┼─────────────────────────────┤&lt;/span&gt;                                                                      
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Type&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Subscription&lt;/span&gt; &lt;span class="nx"&gt;invoice&lt;/span&gt;        &lt;span class="err"&gt;│&lt;/span&gt;
  &lt;span class="err"&gt;└─────────────────┴─────────────────────────────┘&lt;/span&gt;                                                                      

  &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="nx"&gt;was&lt;/span&gt; &lt;span class="nx"&gt;successful&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;been&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="nx"&gt;Generator&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this I have also confirmed this on my project’s subscription page: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwgpuj0dv7wjw8e4lej1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwgpuj0dv7wjw8e4lej1.png" alt="status of subscription" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;it is showing in the active state so it means payment is successful and the subscription is active. &lt;/p&gt;

&lt;p&gt;let’s move to next workflow. &lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 2: Verify State mismatch between Creem and Fix it.
&lt;/h3&gt;

&lt;p&gt;Sometimes when user make some changes like pause the subscription from the Creem it doesn’t propagate properly to our application and this causes the mismatch of states between &lt;br&gt;
Creem and our application. There may be multiple reason for this like when creem fired webhook, our endpoint was down or there may be some internal server error on our application side. So, in this workflow, we will find this mismatch and will try to fix this. &lt;/p&gt;

&lt;p&gt;To perform this, we will tell Claude Code to pause the last subscription and then check with our app if it has also updated it’s state or not.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Pause&lt;/span&gt; &lt;span class="nx"&gt;my&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;check&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;our&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;also&lt;/span&gt; &lt;span class="nx"&gt;updated&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;that&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="nx"&gt;Claude&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="nx"&gt;have&lt;/span&gt; &lt;span class="nx"&gt;updated&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;paused&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;DB&lt;/span&gt; &lt;span class="nx"&gt;still&lt;/span&gt; &lt;span class="nx"&gt;shows&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;webhook&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;Creem&lt;/span&gt; &lt;span class="nx"&gt;hasn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;t updated it yet — this is likely because the app is

running on localhost, which Creem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="nx"&gt;webhook&lt;/span&gt; &lt;span class="nx"&gt;delivery&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;t reach from the internet.

Summary:

- Creem: sub_7CEoO2Ric0UpRvFCsOsOsg is now paused ✓
- DB (id: 13): still active — webhook not received

For webhooks to work locally, you need a tunnel (e.g. ngrok http 3000) forwarding requests to your local server, with

that public URL registered as the webhook endpoint in the Creem dashboard. Once that&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;place&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt;

&lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paused&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;fire&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;your&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;webhook&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;creem&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;DB&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;paused&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, it got confused because it assumed we were running the application on localhost and therefore would not be able to receive webhooks locally. Based on that assumption, it suggested using ngrok and trying again.&lt;/p&gt;

&lt;p&gt;However, that was not actually the issue in our case, because we had already created and started an ngrok tunnel. So the next step is to clarify that ngrok is already running and ask it to check again and help identify the real issue.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;I&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;❯&lt;/span&gt; &lt;span class="nx"&gt;ngrok&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;already&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt; &lt;span class="nx"&gt;ploease&lt;/span&gt; &lt;span class="nx"&gt;check&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;help&lt;/span&gt; &lt;span class="nx"&gt;me&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;find&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;issue&lt;/span&gt;                                           

&lt;span class="nx"&gt;Claude&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 

&lt;span class="nx"&gt;Found&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paused&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt; &lt;span class="nx"&gt;line&lt;/span&gt; &lt;span class="mi"&gt;249&lt;/span&gt;&lt;span class="err"&gt;–&lt;/span&gt;&lt;span class="mi"&gt;251&lt;/span&gt; &lt;span class="nx"&gt;logs&lt;/span&gt; &lt;span class="nx"&gt;but&lt;/span&gt; &lt;span class="nx"&gt;does&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subscription.paused&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Subscription paused:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//event.object.id/));&lt;/span&gt;

&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ← missing DB update&lt;/span&gt;

&lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;issue&lt;/span&gt; 

&lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paused&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;was&lt;/span&gt; &lt;span class="nx"&gt;missing&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;DB&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="nx"&gt;only&lt;/span&gt; &lt;span class="nx"&gt;logged&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;did&lt;/span&gt; &lt;span class="nx"&gt;nothing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Now&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="nx"&gt;updates&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;
&lt;span class="nx"&gt;paused&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="nx"&gt;Since&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;webhook&lt;/span&gt; &lt;span class="nx"&gt;already&lt;/span&gt; &lt;span class="nx"&gt;fired&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;was&lt;/span&gt; &lt;span class="nx"&gt;missed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;resend&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;Creem&lt;/span&gt; &lt;span class="nf"&gt;dashboard &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Developers&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nx"&gt;Webhooks&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;find&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paused&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Resend&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;DB&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;correctly&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, it identified the actual issue. In our webhook handler for the &lt;code&gt;subscription.paused&lt;/code&gt; event, we were only logging the event to the console and not creating an entry in the database.&lt;/p&gt;

&lt;p&gt;This has now been fixed, and the webhook handler correctly stores the event in the database.&lt;/p&gt;

&lt;p&gt;However, the current event still reflects a stale subscription status in our database. To correct this, we will re-fire the webhook event from the Creem dashboard so that it is processed again, this time with the fixed handler, and the database entry is created properly.&lt;/p&gt;

&lt;p&gt;This is how the Creem CLI combined with AI, helps us identify state mismatches and resolve them effectively.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 3: manage products/subscriptions from the terminal
&lt;/h3&gt;

&lt;p&gt;In this workflow, we will see how easily we can now manage products and subscription with help of Creem CLI and power of AI. &lt;/p&gt;

&lt;p&gt;In this workflow, I will ask Claude Code to Create a new product and list all the products. and for subscription we will ask it to pause the subscription with the subscription id. &lt;/p&gt;

&lt;p&gt;First, lets create a new product ‘AI Writer’. This is a subscription based saas product and price is 49$/month.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;I&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lets&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="nx"&gt;ai&lt;/span&gt; &lt;span class="nx"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="nx"&gt;priced&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;49&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;

&lt;span class="nx"&gt;Claude&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="nx"&gt;Product&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt; &lt;span class="nx"&gt;successfully&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;                                                                                                         
  &lt;span class="err"&gt;┌──────────────┬─────────────────────────────┐&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt;    &lt;span class="nx"&gt;Field&lt;/span&gt;     &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="nx"&gt;Value&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;├──────────────┼─────────────────────────────┤&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;           &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;prod_1FjKcB7j9b1WqrZFm1W1c7&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;├──────────────┼─────────────────────────────┤&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt;         &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;AI&lt;/span&gt; &lt;span class="nx"&gt;Writer&lt;/span&gt;                   &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;├──────────────┼─────────────────────────────┤&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Price&lt;/span&gt;        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;$49&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;month&lt;/span&gt;                &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;├──────────────┼─────────────────────────────┤&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Billing&lt;/span&gt;      &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Recurring&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;month&lt;/span&gt;           &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;├──────────────┼─────────────────────────────┤&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Tax&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;SaaS&lt;/span&gt;                        &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;├──────────────┼─────────────────────────────┤&lt;/span&gt;                                
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Mode&lt;/span&gt;         &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Test&lt;/span&gt;                        &lt;span class="err"&gt;│&lt;/span&gt;                                
  &lt;span class="err"&gt;└──────────────┴─────────────────────────────┘&lt;/span&gt;                                

  &lt;span class="nx"&gt;Product&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//creem.io/test/product/prod_1FjKcB7j9b1WqrZFm1W1c7             &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It has created the product and also given me the product url. &lt;/p&gt;

&lt;p&gt;Now We will List all the products.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;I&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;my&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 

&lt;span class="nx"&gt;Claude&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;You&lt;/span&gt; &lt;span class="nx"&gt;have&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

  &lt;span class="err"&gt;┌─────────────────┬─────────┬───────────────────┬────────┐&lt;/span&gt;                    
  &lt;span class="err"&gt;│&lt;/span&gt;      &lt;span class="nx"&gt;Name&lt;/span&gt;       &lt;span class="err"&gt;│&lt;/span&gt;  &lt;span class="nx"&gt;Price&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt;      &lt;span class="nx"&gt;Billing&lt;/span&gt;      &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                    
  &lt;span class="err"&gt;├─────────────────┼─────────┼───────────────────┼────────┤&lt;/span&gt;                    
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;AI&lt;/span&gt; &lt;span class="nx"&gt;Writer&lt;/span&gt;       &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;$49&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Recurring&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;month&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                    
  &lt;span class="err"&gt;├─────────────────┼─────────┼───────────────────┼────────┤&lt;/span&gt;                    
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="nx"&gt;generator&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;$12&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Recurring&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;month&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                    
  &lt;span class="err"&gt;├─────────────────┼─────────┼───────────────────┼────────┤&lt;/span&gt;                    
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;UI&lt;/span&gt; &lt;span class="nx"&gt;kit&lt;/span&gt; &lt;span class="nx"&gt;bundle&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;$199&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;One&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;          &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                    
  &lt;span class="err"&gt;├─────────────────┼─────────┼───────────────────┼────────┤&lt;/span&gt;                    
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Vanilla&lt;/span&gt;         &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;$100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;One&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;          &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;
  &lt;span class="err"&gt;└─────────────────┴─────────┴───────────────────┴────────┘&lt;/span&gt;               
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we will check with subscriptions. I want to pause the subscription with subscription id: sub_7CEoO2Ric0UpRvFCsOsOsg&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;I&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Pause&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sub_7CEoO2Ric0UpRvFCsOsOsg&lt;/span&gt;
&lt;span class="nx"&gt;Claude&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Done&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Subscription&lt;/span&gt; &lt;span class="nx"&gt;sub_7CEoO2Ric0UpRvFCsOsOsg&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="nx"&gt;paused&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;                                                           
  &lt;span class="err"&gt;┌──────────┬───────────────────────────────────┐&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt;  &lt;span class="nx"&gt;Field&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt;               &lt;span class="nx"&gt;Value&lt;/span&gt;               &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Customer&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;creem&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;gmail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;com &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Test&lt;/span&gt; &lt;span class="nx"&gt;creem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="nx"&gt;generator&lt;/span&gt;                   &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;paused&lt;/span&gt;                            &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;└──────────┴───────────────────────────────────┘&lt;/span&gt;          
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how easily we can manage products and subscription using a simple natural language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow 4: Manage discounts
&lt;/h3&gt;

&lt;p&gt;In this workflow, We will create and manage discounts. &lt;/p&gt;

&lt;p&gt;First, we will ask claude code to generate discount code for our product. we can also mention discount code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;discount&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;product&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="nx"&gt;Generator&lt;/span&gt; &lt;span class="nx"&gt;keep&lt;/span&gt; &lt;span class="nx"&gt;coupon&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="nx"&gt;TEST20&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;off&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here Claude Code will try to create the discount with API. rather than using the CLI. Because there is a catch in creem’s &lt;a href="http://skill.md" rel="noopener noreferrer"&gt;skill.md&lt;/a&gt; file they haven’t mentioned way to create discount with CLI. Instead it is written like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="err"&gt;###&lt;/span&gt; &lt;span class="nx"&gt;Flow&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Discount&lt;/span&gt; &lt;span class="nx"&gt;codes&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;CLI&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Create&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;discount&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Use&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;SDK&lt;/span&gt; &lt;span class="nx"&gt;or&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;CLI&lt;/span&gt; &lt;span class="nx"&gt;does&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;have&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;discounts&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="nx"&gt;yet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, claude code is so smart that it figures out the way by using the commands like &lt;code&gt;creem discounts create --help&lt;/code&gt; and generate the discount code. &lt;/p&gt;

&lt;p&gt;Creem can easily fix this by adding discounts related stuff to &lt;a href="http://skills.md" rel="noopener noreferrer"&gt;skills.md&lt;/a&gt; file. &lt;/p&gt;

&lt;p&gt;Claude code responded like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="err"&gt;⏺&lt;/span&gt; &lt;span class="nx"&gt;Discount&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   

  &lt;span class="err"&gt;┌──────────┬───────────────────────────────────┐&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt;  &lt;span class="nx"&gt;Field&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt;               &lt;span class="nx"&gt;Value&lt;/span&gt;               &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Code&lt;/span&gt;     &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;TEST20&lt;/span&gt;                            &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Discount&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;off&lt;/span&gt;                           &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Duration&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nc"&gt;Forever &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;applies&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="nx"&gt;Generator&lt;/span&gt;                   &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;├──────────┼───────────────────────────────────┤&lt;/span&gt;                              
  &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Status&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;active&lt;/span&gt;                            &lt;span class="err"&gt;│&lt;/span&gt;                              
  &lt;span class="err"&gt;└──────────┴───────────────────────────────────┘&lt;/span&gt;                                                                                                                                                
  &lt;span class="nx"&gt;Customers&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="nx"&gt;TEST20&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;off&lt;/span&gt; &lt;span class="nx"&gt;their&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="nx"&gt;Generator&lt;/span&gt; &lt;span class="nx"&gt;subscription&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we can use this discount code on the product and confirm that this is working or not. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7vm70vz6tp9wn9l9f9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7vm70vz6tp9wn9l9f9g.png" alt="Discount code demo" width="788" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wow 🤩, our discount code is working.&lt;/p&gt;

&lt;p&gt;Now we will ask it to delete the discount code: TEST20.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;me&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;❯&lt;/span&gt; &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;discout&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="nx"&gt;TEST20&lt;/span&gt;                                            

&lt;span class="nx"&gt;cc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="nx"&gt;Discount&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="nx"&gt;TEST20&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;been&lt;/span&gt; &lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discount code is now deleted and can’t be applied any more. &lt;/p&gt;

&lt;p&gt;We have seen total 4 workflows. I hoped you find them useful when working with Creem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Creem CLI completely changes the way developers handle payments by bringing everything directly into the terminal. Instead of juggling between dashboards, logs, and code, you can manage products, customers, subscriptions, transactions, and even checkouts from a single place.&lt;/p&gt;

&lt;p&gt;When combined with AI coding tools like Claude Code, Cursor, or Windsurf, the experience becomes even more powerful. You can perform complex workflows using simple natural language. From generating checkout links and verifying payments to debugging webhook issues and fixing state mismatches.&lt;/p&gt;

&lt;p&gt;In this guide, we explored how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up and authenticate Creem CLI&lt;/li&gt;
&lt;li&gt;Manage products, customers, subscriptions, and transactions from the terminal&lt;/li&gt;
&lt;li&gt;Test and verify checkout flows using AI&lt;/li&gt;
&lt;li&gt;Detect and fix webhook/state sync issues&lt;/li&gt;
&lt;li&gt;Create and manage discounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creem CLI combined with AI provides faster smarter developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Creem CLI is more than just a command-line tool. it’s a productivity multiplier for developers working with payments.&lt;/p&gt;

&lt;p&gt;By bringing everything into your terminal and pairing it with AI assistants, you unlock a new way of working:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Less context switching&lt;/li&gt;
&lt;li&gt;Faster debugging&lt;/li&gt;
&lt;li&gt;Natural language-driven workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From creating products and managing subscriptions to troubleshooting webhook issues and generating discount codes, everything becomes faster and more intuitive.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/DeepKumbhare/creem-cli-tutorial" rel="noopener noreferrer"&gt;https://github.com/DeepKumbhare/creem-cli-tutorial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nextjs</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
