Commet
  • Pricing
Log InTry out
Introduction

Quickstart

Integrate with Next.jsIntegrate with RemixIntegrate with NuxtIntegrate with SvelteKitIntegrate with AstroIntegrate with ExpressIntegrate with HonoIntegrate with Bun

Learn

Resources

SDK ReferenceError HandlingTestingCLI

Plugins

Better Auth
DocumentationKnowledge BaseBuild with AIAPI ReferenceWebhooks

Integrate with Hono

Add billing and payments to your Hono application.

Use this pre-built prompt to integrate Commet faster with AI assistants.

Install

pnpm add @commet/node hono
npm install @commet/node hono
bun add @commet/node hono

Configure

.env
COMMET_API_KEY=ck_sandbox_xxx
src/commet.ts
import { Commet } from '@commet/node'

export const commet = new Commet({
  apiKey: process.env.COMMET_API_KEY!,
  environment: 'sandbox',
})

Subscribe

src/routes/billing.ts
import { Hono } from 'hono'
import { commet } from '../commet'

const billing = new Hono()

billing.post('/subscribe', async (c) => {
  const { customerId, email } = await c.req.json()

  await commet.customers.create({ email, id: customerId })

  const subscription = await commet.subscriptions.create({
    customerId,
    planCode: 'pro',
  })

  return c.json({ checkoutUrl: subscription.data.checkoutUrl })
})

export default billing

Check Access

src/routes/billing.ts
billing.get('/subscription/:customerId', async (c) => {
  const { data } = await commet.subscriptions.get(c.req.param('customerId'))

  return c.json({ status: data.status })
})

billing.get('/features/:feature/:customerId', async (c) => {
  const { data } = await commet.features.check({
    code: c.req.param('feature'),
    customerId: c.req.param('customerId'),
  })

  return c.json({ allowed: data.allowed })
})

Track Usage

src/routes/billing.ts
billing.post('/usage', async (c) => {
  const { customerId } = await c.req.json()

  await commet.usage.track({
    customerId,
    feature: 'api_calls',
    value: 1,
  })

  return c.json({ tracked: true })
})

Usage is aggregated and billed at end of period.

Customer Portal

src/routes/billing.ts
billing.get('/portal', async (c) => {
  const customerId = c.get('customerId')

  const { data } = await commet.portal.getUrl({ customerId })

  return c.redirect(data.portalUrl)
})

Start Server

src/index.ts
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
import billing from './routes/billing'

const app = new Hono()

app.route('/billing', billing)

serve({ fetch: app.fetch, port: 3000 })
src/index.ts
import { Hono } from 'hono'
import billing from './routes/billing'

const app = new Hono()

app.route('/billing', billing)

export default app

Related

  • Subscriptions
  • Track Usage
  • Customer Portal
  • SDK Reference

How is this guide?

Integrate with Express

Add billing and payments to your Express application.

Integrate with Bun

Add billing and payments to your Bun application.

On this page

Install
Configure
Subscribe
Check Access
Track Usage
Customer Portal
Start Server
Related