mcpField
A
autumn-best-practices

autumn-best-practices

github.com/useautumnDevelopment183 installsUpdated 5w ago
Repository

About autumn-best-practices

autumn-best-practices is an integration guide for the Autumn billing SDK, aimed at developers using TypeScript or Python for subscriptions, usage billing, and credits. It covers common billing flows, React hooks, and framework handler imports.

Key features

  1. 01Subscription and usage billing patterns
  2. 02Credits and trial support
  3. 03Customer, checkout, and subscription methods
  4. 04React hooks reference
  5. 05Handler imports for multiple frameworks

Use cases

  1. 01Check feature access and record usage on the backend
  2. 02Implement Stripe checkout and purchase confirmation
  3. 03Show customer and pricing information in a React interface

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/useautumn/skills --skill autumn-best-practices

After installing, type/autumn-best-practicesin Claude Code to confirm it loaded.

Details

From the project README

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.createCreate or get customer (idempotent)
checkoutGet Stripe URL or payment preview
attachConfirm purchase (card on file)
cancelCancel subscription
checkVerify feature access
trackRecord usage
products.listGet products with billing scenarios

Core Config Options

OptionNotes
secretKeyRequired. From env AUTUMN_SECRET_KEY
baseURLOptional. 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
newNot subscribed
activeCurrently on plan
scheduledScheduled for future
upgradeHigher tier available
downgradeLower tier available
renewCancelled, can reactivate

Feature Types

TypeBehavior
booleanAccess granted or denied
meteredUsage tracked against limit
credit_systemPool for multiple features

React Hooks

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

<AutumnProvider>{children}</AutumnProvider>

Handler Imports

FrameworkImport
Next.jsautumn-js/next
React Routerautumn-js/react-router
Honoautumn-js/hono
Expressautumn-js/express
Fastifyautumn-js/fastify
Genericautumn-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

Comments

Markdown supported