Add billing and payments to your SvelteKit 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/nodenpm install @commet/nodeyarn add @commet/nodebun add @commet/nodeCOMMET_API_KEY=ck_sandbox_xxximport { Commet } from '@commet/node'
import { COMMET_API_KEY } from '$env/static/private'
export const commet = new Commet({
apiKey: COMMET_API_KEY,
})customers.create is idempotent — if a customer with the same id already exists, it returns the existing record.
import { json } from '@sveltejs/kit'
import { commet } from '$lib/server/commet'
import type { RequestHandler } from './$types'
export const POST: RequestHandler = async ({ request }) => {
const { customerId, email } = await request.json()
await commet.customers.create({ email, id: customerId })
const subscription = await commet.subscriptions.create({
customerId,
planCode: 'pro',
})
return json({ checkoutUrl: subscription.checkoutUrl ?? null })
}import { json } from '@sveltejs/kit'
import { commet } from '$lib/server/commet'
import type { RequestHandler } from './$types'
export const GET: RequestHandler = async ({ params }) => {
const subscription = await commet.subscriptions.getActive({ customerId: params.customerId })
if (!subscription) {
return json({ error: 'no_active_subscription' }, { status: 404 })
}
const feature = await commet.featureAccess.get({
code: 'api_calls',
customerId: params.customerId,
})
return json({ status: subscription.status, allowed: feature.allowed })
}import { json } from '@sveltejs/kit'
import { commet } from '$lib/server/commet'
import type { RequestHandler } from './$types'
export const POST: RequestHandler = async ({ request }) => {
const { customerId } = await request.json()
await commet.usage.track({
customerId,
featureCode: 'api_calls',
value: 1,
})
return json({ tracked: true })
}Usage is aggregated and billed at end of period.
import { redirect } from '@sveltejs/kit'
import { commet } from '$lib/server/commet'
import type { RequestHandler } from './$types'
export const GET: RequestHandler = async ({ locals }) => {
const portal = await commet.portal.getUrl({
customerId: locals.user.customerId,
})
redirect(303, portal.portalUrl)
}How is this guide?