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 commetpnpm add @commet/node hononpm install @commet/node honobun add @commet/node honoCOMMET_API_KEY=ck_sandbox_xxximport { Commet } from '@commet/node'
export const commet = new Commet({
apiKey: process.env.COMMET_API_KEY!,
})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 billingbilling.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 })
})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.
billing.get('/portal', async (c) => {
const customerId = c.get('customerId')
const portal = await commet.portal.getUrl({ customerId })
return c.redirect(portal.portalUrl)
})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 appHow is this guide?