autumn-add-usage-tracking
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAutumn Usage Tracking
Autumn使用追踪
Always consult docs.useautumn.com for code examples and latest API.
Autumn tracks feature usage and enforces limits. Backend checks required for security.
Quick Reference
快速参考
Core Pattern
核心模式
check → work → trackcheck → work → trackCheck Response
校验响应
| Field | Description |
|---|---|
| Can customer proceed |
| Units remaining |
| Total usage included in plan |
| No limit enforced |
| 字段 | 描述 |
|---|---|
| 客户是否可继续操作 |
| 剩余可用额度 |
| 套餐包含的总使用额度 |
| 无使用限制 |
Feature Types
功能类型
| Type | Behavior |
|---|---|
| Access granted or denied |
| Usage tracked against limit |
| Pool for multiple features |
| 类型 | 行为 |
|---|---|
| 授予或拒绝访问权限 |
| 根据限制追踪使用情况 |
| 为多个功能提供共享额度池 |
Security Model
安全模型
| Layer | Purpose | Trust |
|---|---|---|
| Frontend | UX (show/hide UI) | Untrusted |
| Backend | Enforcement | Required |
| 层级 | 用途 | 可信度 |
|---|---|---|
| 前端 | 用户体验(显示/隐藏UI) | 不可信 |
| 后端 | 执行权限限制 | 必须依赖(可信) |
Backend Implementation
后端实现
typescript
import { Autumn } from "autumn-js";
const autumn = new Autumn({ secretKey: process.env.AUTUMN_SECRET_KEY });
// 1. Check
const { data } = await autumn.check({ customer_id, feature_id: "api_calls" });
if (!data.allowed) return { error: "Limit reached" };
// 2. Work
const result = await doWork();
// 3. Track
await autumn.track({ customer_id, feature_id: "api_calls", value: 1 });
return result;python
from autumn import Autumn
autumn = Autumn('am_sk_test_xxx')
response = await autumn.check(customer_id="user_123", feature_id="api_calls")
if not response.allowed:
raise HTTPException(403, "Limit reached")
result = await do_work()
await autumn.track(customer_id="user_123", feature_id="api_calls", value=1)typescript
import { Autumn } from "autumn-js";
const autumn = new Autumn({ secretKey: process.env.AUTUMN_SECRET_KEY });
// 1. Check
const { data } = await autumn.check({ customer_id, feature_id: "api_calls" });
if (!data.allowed) return { error: "Limit reached" };
// 2. Work
const result = await doWork();
// 3. Track
await autumn.track({ customer_id, feature_id: "api_calls", value: 1 });
return result;python
from autumn import Autumn
autumn = Autumn('am_sk_test_xxx')
response = await autumn.check(customer_id="user_123", feature_id="api_calls")
if not response.allowed:
raise HTTPException(403, "Limit reached")
result = await do_work()
await autumn.track(customer_id="user_123", feature_id="api_calls", value=1)React Implementation
React实现
tsx
import { useCustomer } from "autumn-js/react";
const { check, refetch } = useCustomer();
const handleAction = async () => {
const { data } = await check({ featureId: "messages" });
if (!data?.allowed) {
showUpgradePrompt();
return;
}
await performAction();
await refetch();
};tsx
import { useCustomer } from "autumn-js/react";
const { check, refetch } = useCustomer();
const handleAction = async () => {
const { data } = await check({ featureId: "messages" });
if (!data?.allowed) {
showUpgradePrompt();
return;
}
await performAction();
await refetch();
};Displaying Usage
显示使用情况
tsx
const { customer } = useCustomer();
const feature = customer?.features?.api_calls;
<p>{feature?.balance} / {feature?.included_usage}</p>tsx
const { customer } = useCustomer();
const feature = customer?.features?.api_calls;
<p>{feature?.balance} / {feature?.included_usage}</p>Credit Systems
信用系统
Track the underlying metered feature, not the credit system:
typescript
// Config: credits → api_calls (1), image_gen (10)
// Wrong
await autumn.track({ customer_id, feature_id: "credits", value: 10 });
// Right - Autumn deducts 10 credits automatically
await autumn.track({ customer_id, feature_id: "image_gen", value: 1 });请追踪底层的计量型功能,而非信用系统本身:
typescript
// Config: credits → api_calls (1), image_gen (10)
// Wrong
await autumn.track({ customer_id, feature_id: "credits", value: 10 });
// Right - Autumn deducts 10 credits automatically
await autumn.track({ customer_id, feature_id: "image_gen", value: 1 });Common Gotchas
常见注意事项
- Track after success - Only track if work completes successfully
- Backend required - Frontend checks can be bypassed
- Credit systems - Track metered features, not the credit pool
- Idempotency - Use to prevent double-counting
idempotency_key - Batch tracking - Pass higher for bulk operations
value
- 成功后再追踪 - 仅当操作成功完成时才进行追踪
- 必须启用后端校验 - 前端校验可能被绕过
- 信用系统 - 追踪计量型功能,而非信用额度池
- 幂等性 - 使用避免重复统计
idempotency_key - 批量追踪 - 批量操作时传入更大的值
value