mcpField
T
tl-openmeter-api

tl-openmeter-api

github.com/toddlevy开发145 次安装1 周前更新
代码仓库

关于 tl-openmeter-api

tl-openmeter-api 是 OpenMeter REST API 的项目无关参考技能,面向开发者与集成维护者。它按官方 API 标签整理端点,并提供 OpenAPI 规范及计量、订阅、账单等流程说明。

主要功能

  1. 01按官方标签整理 API 端点
  2. 02提供 OpenAPI 3.0 规范
  3. 03涵盖事件、计量与用量查询
  4. 04说明产品目录和订阅操作
  5. 05记录账单、通知与客户流程

适用场景

  1. 01查找事件摄取或用量查询接口
  2. 02管理客户、计划与订阅
  3. 03排查计量和账单生命周期问题
  4. 04设置阈值通知规则

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/toddlevy/tl-agent-skills --skill tl-openmeter-api

安装后在 Claude Code 中输入/tl-openmeter-api确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
README.md
references/
billing.md
notifications.md
product-catalog.md
REFERENCE.md
self-hosted-troubleshooting.md
subscriptions-deep-dive.md

详细介绍

OpenMeter API

与项目无关的 OpenMeter REST API 参考。按 OpenAPI 3.0 规范中的官方 API 标签组织。

套件

技能用途
tl-openmeter-api本技能:REST API 参考
tl-openmeter-local-dev本地开发环境设置:Docker、ngrok、Stripe App、Webhooks
tl-openmeter-api-mcp-server用于从 Cursor 调用本地 OpenMeter 的 MCP 服务

使用场景

  • “如何将事件接入 OpenMeter?”
  • “创建一个带订阅的 OpenMeter 客户”
  • “查询某个 Meter 的用量”
  • “设置阈值告警通知规则”
  • “管理账单发票”
  • “安装 Stripe Marketplace 应用”
  • 调试用量计量、账单或订阅生命周期

资源

官方 API 标签

OpenMeter API 将端点组织为以下 15 个标签:

#标签说明
1Apps管理应用集成(列出、获取、更新、卸载)
2App: Custom Invoicing对接第三方发票和支付系统
3App: StripeStripe 账单支持(API 密钥、Webhook、结账)
4Billing账单配置、发票、客户覆盖项、待处理行项目
5Customers客户生命周期、应用数据、Stripe 关联、权益值
6Debug内部指标(Prometheus 格式)
7Entitlements用量限制、基于配额的定价、功能访问权限
8EventsCloudEvents 接入与列表查询
9Lookup Information静态数据(货币、进度)
10Meters聚合规则、用量查询、分组依据
11Notifications阈值告警的渠道、规则、事件
12Portal通过限定范围的令牌提供面向消费者的用量仪表板
13Product Catalog计划、功能、附加项(版本管理、费率卡、发布生命周期)
14Subjects已弃用 — 请使用带有 usageAttribution.subjectKeys 的 Customers
15Subscriptions客户计划分配、取消、更改、迁移、恢复

Base URL 和身份验证

  • Base URL: OPENMETER_URL(例如,本地环境为 http://localhost:8888,也可以是已部署的 URL)
  • 身份验证: Authorization: Bearer <OPENMETER_API_KEY>。本地可自托管实例通常无需身份验证。
  • Content-Type: 大多数端点使用 application/json;POST /api/v1/events 使用 application/cloudevents+json

概念

Meter (aggregates events) → Feature (metered entitlement) → Plan (limits + pricing)
                                                                    ↓
Customer (subject keys) ←→ Subscription (customer + plan = active entitlements)
                                    ↓
                              Billing Profile → Invoices (via Stripe/Sandbox/Custom App)
  • Meter: 事件的聚合规则(COUNT、SUM 等)。事件通过与 eventType 匹配的 type 引用 Meter。
  • Feature: 关联 Meter 或布尔值;用于计划费率卡中的配额和超额用量。
  • Plan: 包含阶段和费率卡。与 Features 和 Addons 一同属于 Product Catalog。
  • Addon: 模块化费率卡套餐,可附加到计划或订阅。
  • Customer: 包含 usageAttribution.subjectKeys;事件的 subject 必须与之匹配,用量才能归属于该客户。
  • Subscription: 将客户关联到计划;有效订阅会授予权益。
  • Entitlement: 客户对某项功能的访问权限,并带有用量跟踪和限制。
  • Grant: 针对某项权益的一次性额度或用量分配。
  • Notification: 达到权益阈值时触发的自动告警。
  • App: 账单服务提供商集成(Stripe、Sandbox、Custom Invoicing)。

1. 事件

接收: POST /api/v1/events | Content-Type: application/cloudevents+json

{
  "specversion": "1.0",
  "id": "unique-event-id",
  "type": "api_request",
  "source": "my-app",
  "subject": "user_abc123",
  "time": "2026-02-14T12:00:00Z",
  "data": { "value": 1, "path": "/v1/events", "method": "GET" }
}
字段必填说明
type是必须与计量器的 eventType 匹配
subject是必须与客户的 usageAttribution.subjectKeys 匹配
source是标识产生事件的系统
id是幂等键(24 小时内去重)
time建议填写ISO 8601 时间戳
data建议填写任意载荷;计量器使用 $.path 进行 groupBy

列出事件: GET /api/v1/events?from=...&to=...&subject=...&hasError=...


2. 计量器

操作方法路径
列出GET/api/v1/meters
创建POST/api/v1/meters
获取GET/api/v1/meters/{meterIdOrSlug}
更新PUT/api/v1/meters/{meterIdOrSlug}
删除DELETE/api/v1/meters/{meterIdOrSlug}
查询用量GET/api/v1/meters/{meterIdOrSlug}/query?subject=...&from=...&to=...&windowSize=HOUR
查询(POST)POST/api/v1/meters/{meterIdOrSlug}/query
分组值GET/api/v1/meters/{meterIdOrSlug}/group-by/{groupBy}/values
列出主体GET/api/v1/meters/{meterIdOrSlug}/subjects

聚合类型: COUNT、SUM、AVG、MIN、MAX、UNIQUE_COUNT

窗口大小: MINUTE、HOUR、DAY、MONTH


3. 产品目录

套餐、功能和附加项都位于此标签下。有关版本生命周期、费率卡和详细示例,请参阅 references/product-catalog.md。

功能
操作方法路径
列出GET/api/v1/features
创建POST/api/v1/features
获取GET/api/v1/features/{featureId}
删除DELETE/api/v1/features/{featureId}
套餐
操作方法路径
列出GET/api/v1/plans
创建POST/api/v1/plans
获取GET/api/v1/plans/{planIdOrKey}
更新PUT/api/v1/plans/{planIdOrKey}
删除DELETE/api/v1/plans/{planIdOrKey}
创建下一版本POST/api/v1/plans/{planIdOrKey}/next
发布POST/api/v1/plans/{planIdOrKey}/publish
归档POST/api/v1/plans/{planIdOrKey}/archive
套餐附加项CRUD/api/v1/plans/{planIdOrKey}/addons/...
附加项
操作方法路径
列出GET/api/v1/addons
创建POST/api/v1/addons
获取GET/api/v1/addons/{addonIdOrKey}
更新PUT/api/v1/addons/{addonIdOrKey}
删除DELETE/api/v1/addons/{addonIdOrKey}
发布POST/api/v1/addons/{addonIdOrKey}/publish
归档POST/api/v1/addons/{addonIdOrKey}/archive

重要: 套餐和附加项的键必须使用 snake_case(^[a-z0-9]+(?:_[a-z0-9]+)*$)。费率卡的 upToAmount 必须是字符串。创建订阅时使用 plan: { "key": "plan_key" },而不是直接使用 planId。套餐遵循草稿 -> 已发布 -> 已归档的生命周期。


4. 客户

操作方法路径
列出GET/api/v1/customers?page=...&pageSize=...&subject=...&planKey=...
创建POST/api/v1/customers
获取GET/api/v1/customers/{customerIdOrKey}
删除DELETE/api/v1/customers/{id}
获取访问权限GET/api/v1/customers/{id}/access
订阅GET/api/v1/customers/{id}/subscriptions
权益值GET/api/v1/customers/{id}/entitlements/{featureKey}/value
Stripe 数据GET/PUT/api/v1/customers/{id}/stripe
Stripe 门户POST/api/v1/customers/{id}/stripe/portal
应用数据GET/PUT/DELETE/api/v1/customers/{id}/apps/{appIdOrType}

注意: 如果客户有有效订阅或尚未结清的发票,DELETE 会返回 409。客户删除流程请参阅 references/billing.md。


5. 订阅

操作方法路径
创建POST/api/v1/subscriptions
获取GET/api/v1/subscriptions/{id}
编辑PATCH/api/v1/subscriptions/{id}
删除DELETE/api/v1/subscriptions/{id}
取消POST/api/v1/subscriptions/{id}/cancel
更改计划POST/api/v1/subscriptions/{id}/change
迁移POST/api/v1/subscriptions/{id}/migrate
恢复POST/api/v1/subscriptions/{id}/restore
取消计划取消POST/api/v1/subscriptions/{id}/unschedule-cancelation
订阅附加项GET/POST/api/v1/subscriptions/{id}/addons
订阅自定义与迁移

关于完整的 PATCH customizations 架构(add_item / remove_item)、stretch_phase 操作、订阅状态允许操作矩阵,以及旧版计划版本迁移模式,请参阅订阅深入解析。


6. 权益

操作方法路径
列出全部GET/api/v1/entitlements
按 ID 获取GET/api/v1/entitlements/{id}
每位客户的值GET/api/v1/customers/{id}/entitlements/{featureKey}/value
历史记录GET/api/v1/subjects/{subjectIdOrKey}/entitlements/{idOrKey}/history
重置用量POST/api/v1/subjects/{subjectIdOrKey}/entitlements/{id}/reset
覆盖PUT/api/v1/subjects/{subjectIdOrKey}/entitlements/{idOrKey}/override
授予POST/GET/DELETE/api/v1/subjects/.../entitlements/.../grants, /api/v1/grants/...

7. 计费

有关发票生命周期、删除客户流程和费率卡架构,请参阅 references/billing.md。

资源操作基础路径
配置文件列出、创建、获取、更新、删除/api/v1/billing/profiles
客户覆盖项列出、插入或更新、获取、删除/api/v1/billing/profiles/{id}/customer-overrides
发票列出、获取、更新、删除、模拟/api/v1/billing/invoices
发票操作推进、批准、重试、作废、快照、重新计算税费POST on /api/v1/billing/invoices/{id}/{action}
待处理明细行创建、开具发票/api/v1/billing/customers/{id}/invoices/pending-lines

发票生命周期: gathering → draft → issuing → issued → (paid | void | uncollectible)


8. 通知

有关渠道、规则和事件详情,请参阅 references/notifications.md。

资源操作基础路径
渠道列出、创建、获取、更新、删除/api/v1/notification/channels
规则列出、创建、获取、更新、删除、测试/api/v1/notification/rules
事件列出、获取、重新发送/api/v1/notification/events

注意: 通过 API 创建渠道仅限 Cloud(由 Svix 支持)。可自托管版本使用 YAML 配置。


9. 应用

操作方法路径
列出应用GET/api/v1/apps
获取应用GET/api/v1/apps/{id}
更新应用PUT/api/v1/apps/{id}
卸载DELETE/api/v1/apps/{id}
应用:Stripe
操作方法路径
更新 Stripe 密钥PUT/api/v1/apps/{id}/stripe/api-key
Stripe webhookPOST/api/v1/apps/{id}/stripe/webhook
结账会话POST/api/v1/stripe/checkout/sessions
应用:自定义开票
操作方法路径
同步草稿POST/api/v1/apps/{id}/custom-invoicing/draft-synchronized
同步开具中状态POST/api/v1/apps/{id}/custom-invoicing/issuing-synchronized
更新付款状态POST/api/v1/apps/{id}/custom-invoicing/update-payment-status
Marketplace
操作方法路径
列出商品GET/api/v1/marketplace/listings
获取商品GET/api/v1/marketplace/listings/{type}
安装(通用)POST/api/v1/marketplace/listings/{type}/install
安装(API 密钥)POST/api/v1/marketplace/listings/{type}/install/apikey
安装(OAuth2 URL)GET/api/v1/marketplace/listings/{type}/install/oauth2
安装(OAuth2 授权)POST/api/v1/marketplace/listings/{type}/install/oauth2/authorize

10. 门户

操作方法路径
创建令牌POST/api/v1/portal/tokens
列出令牌GET/api/v1/portal/tokens
使令牌失效POST/api/v1/portal/tokens/invalidate
查询计量器GET/api/v1/portal/meters/{meterSlug}/query

11. 查询信息

操作方法路径
列出货币GET/api/v1/currencies
获取进度GET/api/v1/progress

12. 调试

操作方法路径
获取指标GET/api/v1/debug/metrics

13. Subjects(已弃用)

请改用 Customers,并使用 usageAttribution.subjectKeys。

操作方法路径
列出GET/api/v1/subjects
创建或更新POST/api/v1/subjects
获取GET/api/v1/subjects/{subjectIdOrKey}
删除DELETE/api/v1/subjects/{subjectIdOrKey}

常见问题与错误

症状原因修复方法
DELETE customer 返回 409存在有效订阅或未结清的发票先取消订阅,再作废或删除发票
400 "single draft version"存在重复的计划草稿如果计划键已存在,则跳过创建
400 "only Plans in [draft scheduled] can be published"计划已处于活动状态符合预期 — 跳过发布
POST /notification/channels 返回 500可自托管版本:尚未实现本地环境使用 YAML 配置;仅 Cloud 支持 API
PATCH invoice 返回 405不支持 PATCH使用 POST 子路径:/advance、/approve、/void
未归属用量Subject 不匹配事件的 subject 必须与 usageAttribution.subjectKeys 匹配
未找到计划键格式错误使用 snake_case:pro、pro_plus
事件未计量类型不匹配事件的 type 必须与计量器的 eventType 相同
未对超额用量计费阶梯格式错误upToAmount 必须为字符串;同时包含 flatPrice 和 unitPrice
ID 格式类似 01G65Z...ULID 格式标准格式;正则表达式:^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$

自托管故障排查:Railway/Kafka

请参阅自托管故障排查,了解“事件未计量”故障模式(Kafka 卷、主题配置、重启顺序)以及 sink-worker 分区不稳定问题。


参考资料

第一方文档
SDK
相关技能
参考

完整的 OpenAPI 3.0 规范已随附于 assets/openapi-spec.json。请求/响应架构、查询参数和错误代码均以此为准。

评论

支持 Markdown