Integrate with Hono
Add billing and payments to your Hono application.
Install the Commet Skill so your coding agent can integrate the current SDK and verify its work against the live API contract.
npx skills add commet-labs/skills --skill commetInstall
pnpm add @commet/node hononpm install @commet/node honobun add @commet/node honoConfigure
COMMET_API_KEY=ck_sandbox_xxximport { Commet } from '@commet/node'
export const commet = new Commet({
apiKey: process.env.COMMET_API_KEY!,
})Subscribe
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.checkoutUrl ?? null })
})
export default billingCheck Access
billing.get('/subscription/:customerId', async (c) => {
const subscription = await commet.subscriptions.getActive({ customerId: c.req.param('customerId') })
if (!subscription) {
return c.json({ error: 'no_active_subscription' }, 404)
}
return c.json({ status: subscription.status })
})
billing.get('/features/:feature/:customerId', async (c) => {
const access = await commet.featureAccess.get({
code: c.req.param('feature'),
customerId: c.req.param('customerId'),
})
return c.json({ allowed: access.allowed })
})Track Usage
billing.post('/usage', async (c) => {
const { customerId } = await c.req.json()
await commet.usage.track({
customerId,
featureCode: 'api_calls',
value: 1,
})
return c.json({ tracked: true })
})Usage is aggregated and billed at end of period.
Customer Portal
billing.get('/portal', async (c) => {
const customerId = c.get('customerId')
const portal = await commet.portal.getUrl({ customerId })
return c.redirect(portal.portalUrl)
})Start Server
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 })import { Hono } from 'hono'
import billing from './routes/billing'
const app = new Hono()
app.route('/billing', billing)
export default appRelated
How is this guide?