Claude-skill-registry autumn-best-practices

Skill for integrating Autumn - the billing and entitlements layer over Stripe.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/autumn-best-practices" ~/.claude/skills/majiayu000-claude-skill-registry-autumn-best-practices && rm -rf "$T"
manifest: skills/data/autumn-best-practices/SKILL.md
source content

Autumn Integration Guide

Always consult docs.useautumn.com for code examples and latest API.

Autumn is a TypeScript-first billing SDK supporting subscriptions, usage-based pricing, credits, trials, and more via Stripe.


Quick Reference

Environment Variables

Installation

npm install autumn-js    # Node.js
pip install autumn-py    # Python

Core Methods

MethodPurpose
customers.create
Create or get customer (idempotent)
checkout
Get Stripe URL or payment preview
attach
Confirm purchase (card on file)
cancel
Cancel subscription
check
Verify feature access
track
Record usage
products.list
Get products with billing scenarios

Core Config Options

OptionNotes
secretKey
Required. From env
AUTUMN_SECRET_KEY
baseURL
Optional. Defaults to
https://api.useautumn.com

Billing Patterns

Check → Work → Track

Always follow this order for protected actions:

const { data } = await autumn.check({ customer_id, feature_id: "api_calls" });
if (!data.allowed) return { error: "Limit reached" };

const result = await doWork();

await autumn.track({ customer_id, feature_id: "api_calls", value: 1 });
return result;

Two-Step Checkout

const { data } = await autumn.checkout({ customer_id, product_id: "pro" });

if (data.url) return redirect(data.url);  // New customer → Stripe

// Returning customer → show confirmation, then:
await autumn.attach({ customer_id, product_id: "pro" });

Product Scenarios

Use

products.list
to get scenarios. Don't build custom logic.

ScenarioMeaning
new
Not subscribed
active
Currently on plan
scheduled
Scheduled for future
upgrade
Higher tier available
downgrade
Lower tier available
renew
Cancelled, can reactivate

Feature Types

TypeBehavior
boolean
Access granted or denied
metered
Usage tracked against limit
credit_system
Pool for multiple features

React Hooks

HookPurpose
useCustomer
Get customer, checkout, attach, check
usePricingTable
Get products with scenarios
import { AutumnProvider } from "autumn-js/react";

<AutumnProvider>{children}</AutumnProvider>

Handler Imports

FrameworkImport
Next.js
autumn-js/next
React Router
autumn-js/react-router
Hono
autumn-js/hono
Express
autumn-js/express
Fastify
autumn-js/fastify
Generic
autumn-js/backend

Common Gotchas

  1. URL field - Checkout URL is
    data.url
    , not
    data.checkout_url
  2. Frontend checks - For UX only. Always enforce on backend
  3. Track after success - Only track usage after work completes
  4. Credit systems - Track metered features, not the credit system itself
  5. Cancel via free plan - Prefer
    attach({ product_id: "free" })
    over
    cancel()
  6. Idempotent creation -
    customers.create
    returns existing customer if ID exists

Resources