burnwatch 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +276 -214
  3. package/billing/anthropic.json +49 -0
  4. package/billing/billing.schema.json +213 -0
  5. package/billing/browserbase.json +68 -0
  6. package/billing/google-gemini.json +66 -0
  7. package/billing/inngest.json +45 -0
  8. package/billing/openai.json +70 -0
  9. package/billing/posthog.json +61 -0
  10. package/billing/resend.json +49 -0
  11. package/billing/scrapfly.json +38 -0
  12. package/billing/supabase.json +32 -0
  13. package/billing/upstash.json +65 -0
  14. package/billing/vercel.json +85 -0
  15. package/billing/voyage-ai.json +42 -0
  16. package/dist/cli.js +477 -286
  17. package/dist/cli.js.map +1 -1
  18. package/dist/cost-impact.d.ts +8 -4
  19. package/dist/cost-impact.js +261 -72
  20. package/dist/cost-impact.js.map +1 -1
  21. package/dist/{detector-myYS2eVC.d.ts → detector-DiBj3WjE.d.ts} +1 -1
  22. package/dist/hooks/on-file-change.js +271 -88
  23. package/dist/hooks/on-file-change.js.map +1 -1
  24. package/dist/hooks/on-prompt.js.map +1 -1
  25. package/dist/hooks/on-session-start.js +104 -79
  26. package/dist/hooks/on-session-start.js.map +1 -1
  27. package/dist/hooks/on-stop.js +65 -46
  28. package/dist/hooks/on-stop.js.map +1 -1
  29. package/dist/index.d.ts +6 -4
  30. package/dist/index.js +286 -113
  31. package/dist/index.js.map +1 -1
  32. package/dist/interactive-init.d.ts +2 -2
  33. package/dist/interactive-init.js +21 -19
  34. package/dist/interactive-init.js.map +1 -1
  35. package/dist/mcp-server.js +719 -88
  36. package/dist/mcp-server.js.map +1 -1
  37. package/dist/{types-BwIeWOYc.d.ts → types-CUAiYzmE.d.ts} +2 -0
  38. package/llms.txt +1 -1
  39. package/package.json +2 -1
  40. package/registry.json +12 -68
  41. package/skills/burnwatch-interview/SKILL.md +2 -4
  42. package/skills/setup-burnwatch/SKILL.md +7 -9
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "anthropic",
4
+ "name": "Anthropic (Claude)",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://www.anthropic.com/pricing",
7
+ "notes": "Token pricing varies dramatically by model (60x between Haiku and Opus). Admin API key required for billing data. Prompt caching gives 90% discount on cached input tokens. Batch API gives 50% discount.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "input_tokens",
11
+ "name": "Input tokens",
12
+ "unit": "token",
13
+ "ratePerUnit": 3.00,
14
+ "ratePer": 1000000,
15
+ "variants": [
16
+ { "id": "haiku", "name": "Claude 3.5 Haiku", "ratePerUnit": 0.80, "ratePer": 1000000, "codePatterns": ["haiku", "claude-3[.-]5-haiku", "claude-3-haiku"], "isDefault": false },
17
+ { "id": "sonnet", "name": "Claude Sonnet 4", "ratePerUnit": 3.00, "ratePer": 1000000, "codePatterns": ["sonnet", "claude-sonnet", "claude-4-sonnet"], "isDefault": true },
18
+ { "id": "opus", "name": "Claude Opus 4", "ratePerUnit": 15.00, "ratePer": 1000000, "codePatterns": ["opus", "claude-opus", "claude-4-opus"], "isDefault": false }
19
+ ]
20
+ },
21
+ {
22
+ "id": "output_tokens",
23
+ "name": "Output tokens",
24
+ "unit": "token",
25
+ "ratePerUnit": 15.00,
26
+ "ratePer": 1000000,
27
+ "variants": [
28
+ { "id": "haiku", "name": "Claude 3.5 Haiku", "ratePerUnit": 4.00, "ratePer": 1000000, "codePatterns": ["haiku"] },
29
+ { "id": "sonnet", "name": "Claude Sonnet 4", "ratePerUnit": 15.00, "ratePer": 1000000, "codePatterns": ["sonnet"], "isDefault": true },
30
+ { "id": "opus", "name": "Claude Opus 4", "ratePerUnit": 75.00, "ratePer": 1000000, "codePatterns": ["opus"] }
31
+ ]
32
+ }
33
+ ],
34
+ "plans": [
35
+ { "id": "api_usage", "name": "API Usage", "monthlyBase": 0, "isDefault": true },
36
+ { "id": "max_100", "name": "Max ($100/mo)", "monthlyBase": 100 },
37
+ { "id": "max_200", "name": "Max ($200/mo)", "monthlyBase": 200 },
38
+ { "id": "pro", "name": "Pro ($20/mo)", "monthlyBase": 20 }
39
+ ],
40
+ "costMultipliers": [
41
+ { "id": "opus_model", "name": "Opus model usage", "factor": 5, "description": "Opus costs ~5x Sonnet for input and ~5x for output. If code uses opus, multiply base estimate by 5.", "codePatterns": ["opus", "claude-opus"] },
42
+ { "id": "long_context", "name": "Long context (>100K tokens)", "factor": 2, "description": "Long conversations or document analysis can easily consume 100K+ input tokens per call", "codePatterns": ["max_tokens.*[5-9]\\d{3,}", "maxTokens.*[5-9]\\d{3,}"] }
43
+ ],
44
+ "typicalDevUsage": {
45
+ "callsPerDevHour": 5,
46
+ "unitsPerCall": 2000,
47
+ "unitName": "tokens"
48
+ }
49
+ }
@@ -0,0 +1,213 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://burnwatch.dev/schemas/billing-manifest.json",
4
+ "title": "Burnwatch Billing Manifest",
5
+ "description": "Describes how a service charges, what's included in each plan, and what overage rates apply. Community contributors: add a new service by creating a <service-id>.json file in this directory following this schema.",
6
+ "type": "object",
7
+ "required": ["$schema", "serviceId", "name", "lastVerified", "billingDimensions", "plans"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "$schema": {
11
+ "type": "string",
12
+ "description": "Path to this schema file"
13
+ },
14
+ "serviceId": {
15
+ "type": "string",
16
+ "description": "Must match the service ID in registry.json"
17
+ },
18
+ "name": {
19
+ "type": "string",
20
+ "description": "Human-readable service name"
21
+ },
22
+ "lastVerified": {
23
+ "type": "string",
24
+ "format": "date",
25
+ "description": "When this pricing data was last verified against the service's pricing page (YYYY-MM-DD)"
26
+ },
27
+ "pricingUrl": {
28
+ "type": "string",
29
+ "format": "uri",
30
+ "description": "URL to the service's pricing page for verification"
31
+ },
32
+ "notes": {
33
+ "type": "string",
34
+ "description": "Freeform notes about this service's billing quirks"
35
+ },
36
+ "billingDimensions": {
37
+ "type": "array",
38
+ "description": "Each dimension is a separate axis the service charges on (e.g., input tokens, output tokens, storage, bandwidth). Most services have 1-3 dimensions.",
39
+ "items": {
40
+ "$ref": "#/$defs/BillingDimension"
41
+ },
42
+ "minItems": 1
43
+ },
44
+ "plans": {
45
+ "type": "array",
46
+ "description": "Available plan tiers. Each plan specifies what's included and any overrides to default rates.",
47
+ "items": {
48
+ "$ref": "#/$defs/Plan"
49
+ },
50
+ "minItems": 1
51
+ },
52
+ "costMultipliers": {
53
+ "type": "array",
54
+ "description": "Feature flags or usage patterns that multiply the base cost (e.g., anti-bot bypass on Scrapfly, long browser sessions on Browserbase). Used by cost-impact analysis.",
55
+ "items": {
56
+ "$ref": "#/$defs/CostMultiplier"
57
+ }
58
+ },
59
+ "typicalDevUsage": {
60
+ "type": "object",
61
+ "description": "Typical usage patterns during development. Helps cost-impact make better projections than the generic '50 dev runs/month' default.",
62
+ "properties": {
63
+ "callsPerDevHour": {
64
+ "type": "number",
65
+ "description": "How many API calls a developer typically makes per hour of active development"
66
+ },
67
+ "unitsPerCall": {
68
+ "type": "number",
69
+ "description": "Average units consumed per API call (e.g., ~1000 tokens per LLM call, 1 credit per scrape)"
70
+ },
71
+ "unitName": {
72
+ "type": "string",
73
+ "description": "What the unit is (tokens, credits, sessions, emails, etc.)"
74
+ }
75
+ },
76
+ "required": ["callsPerDevHour", "unitsPerCall", "unitName"]
77
+ }
78
+ },
79
+ "$defs": {
80
+ "BillingDimension": {
81
+ "type": "object",
82
+ "required": ["id", "name", "unit", "ratePerUnit"],
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "id": {
86
+ "type": "string",
87
+ "description": "Machine-readable ID (e.g., 'input_tokens', 'output_tokens', 'browser_hours', 'credits')"
88
+ },
89
+ "name": {
90
+ "type": "string",
91
+ "description": "Human-readable name (e.g., 'Input tokens', 'Browser hours')"
92
+ },
93
+ "unit": {
94
+ "type": "string",
95
+ "description": "Unit name for display (e.g., 'token', 'credit', 'session', 'email', 'GB')"
96
+ },
97
+ "ratePerUnit": {
98
+ "type": "number",
99
+ "description": "Default cost per unit in USD. For token-based services, this is per-token (not per million). For 'per million' pricing, divide by 1,000,000."
100
+ },
101
+ "ratePer": {
102
+ "type": "number",
103
+ "default": 1,
104
+ "description": "If the rate is quoted 'per N units' (e.g., '$3 per 1M tokens'), set this to N (1000000) and ratePerUnit to the dollar amount ($3). The engine computes: cost = (units / ratePer) * ratePerUnit"
105
+ },
106
+ "variants": {
107
+ "type": "array",
108
+ "description": "If the rate varies by model, feature, or tier (e.g., Haiku vs Opus), list each variant here. The engine uses the variant matching the detected model in code.",
109
+ "items": {
110
+ "$ref": "#/$defs/DimensionVariant"
111
+ }
112
+ }
113
+ }
114
+ },
115
+ "DimensionVariant": {
116
+ "type": "object",
117
+ "required": ["id", "name", "ratePerUnit"],
118
+ "additionalProperties": false,
119
+ "properties": {
120
+ "id": {
121
+ "type": "string",
122
+ "description": "Machine-readable variant ID (e.g., 'haiku', 'sonnet', 'opus')"
123
+ },
124
+ "name": {
125
+ "type": "string",
126
+ "description": "Human-readable name (e.g., 'Claude 3.5 Haiku')"
127
+ },
128
+ "ratePerUnit": {
129
+ "type": "number",
130
+ "description": "Rate for this variant in the same units as the parent dimension"
131
+ },
132
+ "ratePer": {
133
+ "type": "number",
134
+ "description": "Override ratePer for this variant"
135
+ },
136
+ "codePatterns": {
137
+ "type": "array",
138
+ "description": "Regex patterns that identify this variant in source code (e.g., 'claude-3-5-haiku', 'claude-3.5-haiku'). Used by cost-impact to pick the right rate.",
139
+ "items": { "type": "string" }
140
+ },
141
+ "isDefault": {
142
+ "type": "boolean",
143
+ "description": "Use this variant's rate when no specific model is detected in code"
144
+ }
145
+ }
146
+ },
147
+ "Plan": {
148
+ "type": "object",
149
+ "required": ["id", "name", "monthlyBase"],
150
+ "additionalProperties": false,
151
+ "properties": {
152
+ "id": {
153
+ "type": "string",
154
+ "description": "Machine-readable plan ID (e.g., 'free', 'pro', 'startup')"
155
+ },
156
+ "name": {
157
+ "type": "string",
158
+ "description": "Human-readable plan name (e.g., 'Pro ($25/mo)'). Must match registry.json plan names."
159
+ },
160
+ "monthlyBase": {
161
+ "type": "number",
162
+ "description": "Fixed monthly cost in USD"
163
+ },
164
+ "included": {
165
+ "type": "object",
166
+ "description": "Units included in this plan before overages. Keys are billingDimension IDs, values are included amounts.",
167
+ "additionalProperties": { "type": "number" }
168
+ },
169
+ "overageRates": {
170
+ "type": "object",
171
+ "description": "Per-unit overage rates that override the default dimension rate. Keys are billingDimension IDs.",
172
+ "additionalProperties": { "type": "number" }
173
+ },
174
+ "hardCap": {
175
+ "type": "boolean",
176
+ "description": "If true, usage beyond plan limits is blocked rather than charged as overage"
177
+ },
178
+ "isDefault": {
179
+ "type": "boolean",
180
+ "description": "Whether this is the most common plan tier"
181
+ }
182
+ }
183
+ },
184
+ "CostMultiplier": {
185
+ "type": "object",
186
+ "required": ["id", "name", "factor", "description"],
187
+ "additionalProperties": false,
188
+ "properties": {
189
+ "id": {
190
+ "type": "string",
191
+ "description": "Machine-readable ID (e.g., 'antibot', 'js_render', 'long_session')"
192
+ },
193
+ "name": {
194
+ "type": "string",
195
+ "description": "Human-readable name"
196
+ },
197
+ "factor": {
198
+ "type": "number",
199
+ "description": "Multiplier applied to base cost (e.g., 5 means 5x the base rate)"
200
+ },
201
+ "description": {
202
+ "type": "string",
203
+ "description": "Explains when and why this multiplier applies"
204
+ },
205
+ "codePatterns": {
206
+ "type": "array",
207
+ "description": "Regex patterns in source code that indicate this multiplier is active (e.g., 'antibot.*true', 'render_js.*true')",
208
+ "items": { "type": "string" }
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "browserbase",
4
+ "name": "Browserbase",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://www.browserbase.com/pricing",
7
+ "notes": "Browserbase charges per browser-hour (metered by the minute, first minute rounded up), NOT per session. Proxy bandwidth is a separate billing axis at $10-12/GB. Concurrent session limits and session duration caps vary by plan.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "browser_hours",
11
+ "name": "Browser hours",
12
+ "unit": "hour",
13
+ "ratePerUnit": 0.10,
14
+ "ratePer": 1,
15
+ "variants": [
16
+ { "id": "standard", "name": "Standard browser", "ratePerUnit": 0.10, "ratePer": 1, "codePatterns": ["createSession", "sessions.create"], "isDefault": true }
17
+ ]
18
+ },
19
+ {
20
+ "id": "proxy_bandwidth",
21
+ "name": "Proxy bandwidth",
22
+ "unit": "GB",
23
+ "ratePerUnit": 10.00,
24
+ "ratePer": 1,
25
+ "variants": [
26
+ { "id": "standard", "name": "Standard proxy", "ratePerUnit": 10.00, "ratePer": 1, "codePatterns": ["proxy", "proxies"], "isDefault": true }
27
+ ]
28
+ }
29
+ ],
30
+ "plans": [
31
+ {
32
+ "id": "free",
33
+ "name": "Free (1 browser-hour)",
34
+ "monthlyBase": 0,
35
+ "included": { "browser_hours": 1 },
36
+ "hardCap": true,
37
+ "isDefault": true
38
+ },
39
+ {
40
+ "id": "developer",
41
+ "name": "Developer ($20/mo)",
42
+ "monthlyBase": 20,
43
+ "included": { "browser_hours": 100, "proxy_bandwidth": 1 },
44
+ "overageRates": { "browser_hours": 0.12, "proxy_bandwidth": 12.00 }
45
+ },
46
+ {
47
+ "id": "startup",
48
+ "name": "Startup ($99/mo)",
49
+ "monthlyBase": 99,
50
+ "included": { "browser_hours": 500, "proxy_bandwidth": 5 },
51
+ "overageRates": { "browser_hours": 0.10, "proxy_bandwidth": 10.00 }
52
+ },
53
+ {
54
+ "id": "scale",
55
+ "name": "Scale (custom)",
56
+ "monthlyBase": 0
57
+ }
58
+ ],
59
+ "costMultipliers": [
60
+ { "id": "long_session", "name": "Long-running sessions", "factor": 10, "description": "A scraping job that keeps a browser open for 10 minutes uses 10x the hours of a quick 1-minute page load", "codePatterns": ["keepAlive", "timeout.*[3-9]\\d{4,}", "waitForTimeout"] },
61
+ { "id": "stealth_mode", "name": "Stealth/anti-detection", "factor": 1.5, "description": "Stealth mode sessions may run longer due to human-like delays", "codePatterns": ["stealth", "antiDetection", "humanDelay"] }
62
+ ],
63
+ "typicalDevUsage": {
64
+ "callsPerDevHour": 3,
65
+ "unitsPerCall": 0.05,
66
+ "unitName": "browser-hours"
67
+ }
68
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "google-gemini",
4
+ "name": "Google Gemini (AI Studio / Vertex)",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://ai.google.dev/pricing",
7
+ "notes": "AI Studio offers a generous free tier. Paid tier pricing varies dramatically by model. Gemini 2.0 Flash is extremely cheap. Context caching reduces input token cost by ~75%. Grounding with Google Search adds per-request cost.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "input_tokens",
11
+ "name": "Input tokens",
12
+ "unit": "token",
13
+ "ratePerUnit": 0.075,
14
+ "ratePer": 1000000,
15
+ "variants": [
16
+ { "id": "flash_2", "name": "Gemini 2.0 Flash", "ratePerUnit": 0.075, "ratePer": 1000000, "codePatterns": ["gemini-2\\.0-flash", "gemini-2-flash"], "isDefault": true },
17
+ { "id": "flash_lite", "name": "Gemini 2.0 Flash-Lite", "ratePerUnit": 0.0375, "ratePer": 1000000, "codePatterns": ["flash-lite", "gemini-2\\.0-flash-lite"] },
18
+ { "id": "pro_2", "name": "Gemini 2.5 Pro", "ratePerUnit": 1.25, "ratePer": 1000000, "codePatterns": ["gemini-2\\.5-pro", "gemini-pro"] },
19
+ { "id": "flash_thinking", "name": "Gemini 2.0 Flash Thinking", "ratePerUnit": 0.075, "ratePer": 1000000, "codePatterns": ["flash-thinking", "thinking-exp"] }
20
+ ]
21
+ },
22
+ {
23
+ "id": "output_tokens",
24
+ "name": "Output tokens",
25
+ "unit": "token",
26
+ "ratePerUnit": 0.30,
27
+ "ratePer": 1000000,
28
+ "variants": [
29
+ { "id": "flash_2", "name": "Gemini 2.0 Flash", "ratePerUnit": 0.30, "ratePer": 1000000, "codePatterns": ["gemini-2\\.0-flash"], "isDefault": true },
30
+ { "id": "flash_lite", "name": "Gemini 2.0 Flash-Lite", "ratePerUnit": 0.15, "ratePer": 1000000, "codePatterns": ["flash-lite"] },
31
+ { "id": "pro_2", "name": "Gemini 2.5 Pro", "ratePerUnit": 10.00, "ratePer": 1000000, "codePatterns": ["gemini-2\\.5-pro", "gemini-pro"] },
32
+ { "id": "flash_thinking", "name": "Gemini 2.0 Flash Thinking", "ratePerUnit": 0.30, "ratePer": 1000000, "codePatterns": ["flash-thinking"] }
33
+ ]
34
+ },
35
+ {
36
+ "id": "images",
37
+ "name": "Image generation",
38
+ "unit": "image",
39
+ "ratePerUnit": 0.039,
40
+ "ratePer": 1,
41
+ "variants": [
42
+ { "id": "imagen3", "name": "Imagen 3", "ratePerUnit": 0.04, "ratePer": 1, "codePatterns": ["imagen"], "isDefault": true }
43
+ ]
44
+ }
45
+ ],
46
+ "plans": [
47
+ {
48
+ "id": "free",
49
+ "name": "Free (AI Studio)",
50
+ "monthlyBase": 0,
51
+ "included": { "input_tokens": 1000000, "output_tokens": 1000000 },
52
+ "hardCap": false,
53
+ "isDefault": true
54
+ },
55
+ {
56
+ "id": "pay_as_you_go",
57
+ "name": "Pay-as-you-go",
58
+ "monthlyBase": 0
59
+ }
60
+ ],
61
+ "typicalDevUsage": {
62
+ "callsPerDevHour": 6,
63
+ "unitsPerCall": 2000,
64
+ "unitName": "tokens"
65
+ }
66
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "inngest",
4
+ "name": "Inngest",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://www.inngest.com/pricing",
7
+ "notes": "Inngest bills per 'execution' — each function run AND each step within that run count as separate executions. A function with 1 trigger + 3 steps = 4 executions. Free tier includes 50K executions/mo. Pro is $75/mo with 1M executions included. Tiered overage pricing applies beyond plan limits.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "executions",
11
+ "name": "Executions (runs + steps)",
12
+ "unit": "execution",
13
+ "ratePerUnit": 0.05,
14
+ "ratePer": 1000,
15
+ "variants": [
16
+ { "id": "standard", "name": "Standard execution", "ratePerUnit": 0.05, "ratePer": 1000, "codePatterns": ["inngest\\.send", "createFunction", "inngest"], "isDefault": true }
17
+ ]
18
+ }
19
+ ],
20
+ "plans": [
21
+ {
22
+ "id": "free",
23
+ "name": "Free (50K executions/mo)",
24
+ "monthlyBase": 0,
25
+ "included": { "executions": 50000 },
26
+ "hardCap": true,
27
+ "isDefault": true
28
+ },
29
+ {
30
+ "id": "pro",
31
+ "name": "Pro ($75/mo)",
32
+ "monthlyBase": 75,
33
+ "included": { "executions": 1000000 },
34
+ "overageRates": { "executions": 0.05 }
35
+ }
36
+ ],
37
+ "costMultipliers": [
38
+ { "id": "multi_step", "name": "Multi-step functions", "factor": 4, "description": "Each step in a function counts as a separate execution. A 3-step function costs 4x (1 run + 3 steps) a single-step function.", "codePatterns": ["step\\.run", "step\\.sleep", "step\\.waitForEvent", "step\\.invoke"] }
39
+ ],
40
+ "typicalDevUsage": {
41
+ "callsPerDevHour": 5,
42
+ "unitsPerCall": 4,
43
+ "unitName": "executions"
44
+ }
45
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "openai",
4
+ "name": "OpenAI",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://openai.com/api/pricing/",
7
+ "notes": "Token pricing varies by model. GPT-4o-mini is extremely cheap. Image generation (DALL-E) is per-image, not per-token. Embedding models are much cheaper than completion models.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "input_tokens",
11
+ "name": "Input tokens",
12
+ "unit": "token",
13
+ "ratePerUnit": 2.50,
14
+ "ratePer": 1000000,
15
+ "variants": [
16
+ { "id": "gpt4o_mini", "name": "GPT-4o mini", "ratePerUnit": 0.15, "ratePer": 1000000, "codePatterns": ["gpt-4o-mini", "gpt4o-mini"], "isDefault": false },
17
+ { "id": "gpt4o", "name": "GPT-4o", "ratePerUnit": 2.50, "ratePer": 1000000, "codePatterns": ["gpt-4o(?!-mini)", "gpt4o(?!-mini)"], "isDefault": true },
18
+ { "id": "o1_mini", "name": "o1-mini", "ratePerUnit": 3.00, "ratePer": 1000000, "codePatterns": ["o1-mini"] },
19
+ { "id": "o1", "name": "o1", "ratePerUnit": 15.00, "ratePer": 1000000, "codePatterns": ["(?<![\\w-])o1(?!-mini)"] },
20
+ { "id": "gpt4_turbo", "name": "GPT-4 Turbo", "ratePerUnit": 10.00, "ratePer": 1000000, "codePatterns": ["gpt-4-turbo", "gpt-4-1106"] }
21
+ ]
22
+ },
23
+ {
24
+ "id": "output_tokens",
25
+ "name": "Output tokens",
26
+ "unit": "token",
27
+ "ratePerUnit": 10.00,
28
+ "ratePer": 1000000,
29
+ "variants": [
30
+ { "id": "gpt4o_mini", "name": "GPT-4o mini", "ratePerUnit": 0.60, "ratePer": 1000000, "codePatterns": ["gpt-4o-mini"], "isDefault": false },
31
+ { "id": "gpt4o", "name": "GPT-4o", "ratePerUnit": 10.00, "ratePer": 1000000, "codePatterns": ["gpt-4o(?!-mini)"], "isDefault": true },
32
+ { "id": "o1_mini", "name": "o1-mini", "ratePerUnit": 12.00, "ratePer": 1000000, "codePatterns": ["o1-mini"] },
33
+ { "id": "o1", "name": "o1", "ratePerUnit": 60.00, "ratePer": 1000000, "codePatterns": ["(?<![\\w-])o1(?!-mini)"] }
34
+ ]
35
+ },
36
+ {
37
+ "id": "embedding_tokens",
38
+ "name": "Embedding tokens",
39
+ "unit": "token",
40
+ "ratePerUnit": 0.02,
41
+ "ratePer": 1000000,
42
+ "variants": [
43
+ { "id": "small", "name": "text-embedding-3-small", "ratePerUnit": 0.02, "ratePer": 1000000, "codePatterns": ["embedding-3-small", "text-embedding-3-small"], "isDefault": true },
44
+ { "id": "large", "name": "text-embedding-3-large", "ratePerUnit": 0.13, "ratePer": 1000000, "codePatterns": ["embedding-3-large", "text-embedding-3-large"] }
45
+ ]
46
+ },
47
+ {
48
+ "id": "images",
49
+ "name": "Image generation",
50
+ "unit": "image",
51
+ "ratePerUnit": 0.04,
52
+ "ratePer": 1,
53
+ "variants": [
54
+ { "id": "dalle3_standard", "name": "DALL-E 3 Standard 1024x1024", "ratePerUnit": 0.04, "ratePer": 1, "codePatterns": ["dall-e-3", "dalle-3"], "isDefault": true },
55
+ { "id": "dalle3_hd", "name": "DALL-E 3 HD 1024x1024", "ratePerUnit": 0.08, "ratePer": 1, "codePatterns": ["quality.*hd", "hd.*quality"] }
56
+ ]
57
+ }
58
+ ],
59
+ "plans": [
60
+ { "id": "api_usage", "name": "API Usage", "monthlyBase": 0, "isDefault": true },
61
+ { "id": "plus", "name": "ChatGPT Plus ($20/mo)", "monthlyBase": 20 },
62
+ { "id": "pro", "name": "ChatGPT Pro ($200/mo)", "monthlyBase": 200 },
63
+ { "id": "team", "name": "ChatGPT Team ($25/user/mo)", "monthlyBase": 25 }
64
+ ],
65
+ "typicalDevUsage": {
66
+ "callsPerDevHour": 8,
67
+ "unitsPerCall": 1500,
68
+ "unitName": "tokens"
69
+ }
70
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "posthog",
4
+ "name": "PostHog",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://posthog.com/pricing",
7
+ "notes": "PostHog uses a generous free tier per product. Each product (analytics, session replay, feature flags, surveys, data pipeline) bills independently. Analytics free tier is 1M events/mo. Session replay is 5K sessions/mo free. Pricing is volume-tiered — per-event cost decreases at higher volumes.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "analytics_events",
11
+ "name": "Product analytics events",
12
+ "unit": "event",
13
+ "ratePerUnit": 0.00005,
14
+ "ratePer": 1,
15
+ "variants": [
16
+ { "id": "standard", "name": "Standard events", "ratePerUnit": 0.00005, "ratePer": 1, "codePatterns": ["posthog\\.capture", "posthog-js", "@posthog"], "isDefault": true }
17
+ ]
18
+ },
19
+ {
20
+ "id": "session_replays",
21
+ "name": "Session replay recordings",
22
+ "unit": "recording",
23
+ "ratePerUnit": 0.005,
24
+ "ratePer": 1,
25
+ "variants": [
26
+ { "id": "standard", "name": "Standard recording", "ratePerUnit": 0.005, "ratePer": 1, "codePatterns": ["session_recording", "recordCrossOriginIframes"], "isDefault": true }
27
+ ]
28
+ },
29
+ {
30
+ "id": "feature_flag_requests",
31
+ "name": "Feature flag requests",
32
+ "unit": "request",
33
+ "ratePerUnit": 0.0001,
34
+ "ratePer": 1,
35
+ "variants": [
36
+ { "id": "standard", "name": "Standard request", "ratePerUnit": 0.0001, "ratePer": 1, "codePatterns": ["getFeatureFlag", "isFeatureEnabled", "feature_flags"], "isDefault": true }
37
+ ]
38
+ }
39
+ ],
40
+ "plans": [
41
+ {
42
+ "id": "free",
43
+ "name": "Free (generous per-product limits)",
44
+ "monthlyBase": 0,
45
+ "included": { "analytics_events": 1000000, "session_replays": 5000, "feature_flag_requests": 1000000 },
46
+ "hardCap": false,
47
+ "isDefault": true
48
+ },
49
+ {
50
+ "id": "usage",
51
+ "name": "Pay-as-you-go (beyond free tier)",
52
+ "monthlyBase": 0,
53
+ "overageRates": { "analytics_events": 0.00005, "session_replays": 0.005, "feature_flag_requests": 0.0001 }
54
+ }
55
+ ],
56
+ "typicalDevUsage": {
57
+ "callsPerDevHour": 0,
58
+ "unitsPerCall": 0,
59
+ "unitName": "events"
60
+ }
61
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "./billing.schema.json",
3
+ "serviceId": "resend",
4
+ "name": "Resend",
5
+ "lastVerified": "2026-03-25",
6
+ "pricingUrl": "https://resend.com/pricing",
7
+ "notes": "Resend charges per email sent. Free tier includes 100 emails/day (3000/mo). Pro plan is $20/mo with 50K emails included. Overage is $0.90 per 1000 emails. Transactional email only — no marketing automation.",
8
+ "billingDimensions": [
9
+ {
10
+ "id": "emails",
11
+ "name": "Emails sent",
12
+ "unit": "email",
13
+ "ratePerUnit": 0.90,
14
+ "ratePer": 1000,
15
+ "variants": [
16
+ { "id": "standard", "name": "Standard email", "ratePerUnit": 0.90, "ratePer": 1000, "codePatterns": ["resend", "emails\\.send", "@resend"], "isDefault": true }
17
+ ]
18
+ }
19
+ ],
20
+ "plans": [
21
+ {
22
+ "id": "free",
23
+ "name": "Free (100/day, 3000/mo)",
24
+ "monthlyBase": 0,
25
+ "included": { "emails": 3000 },
26
+ "hardCap": true,
27
+ "isDefault": true
28
+ },
29
+ {
30
+ "id": "pro",
31
+ "name": "Pro ($20/mo, 50K emails)",
32
+ "monthlyBase": 20,
33
+ "included": { "emails": 50000 },
34
+ "overageRates": { "emails": 0.90 }
35
+ },
36
+ {
37
+ "id": "scale",
38
+ "name": "Scale ($90/mo, 100K emails)",
39
+ "monthlyBase": 90,
40
+ "included": { "emails": 100000 },
41
+ "overageRates": { "emails": 0.90 }
42
+ }
43
+ ],
44
+ "typicalDevUsage": {
45
+ "callsPerDevHour": 2,
46
+ "unitsPerCall": 1,
47
+ "unitName": "emails"
48
+ }
49
+ }