Here's a comprehensive bug report for Autumn: Subject: CRITICAL BUG: React SDK check() Function Completely Ignores All Balance Parameters - Feature Unusable Priority: Critical - Complete feature failure Summary: The Autumn React SDK's check() function has a fundamental bug where ALL balance-related parameters are completely ignored, making dynamic quota checking impossible. We've conducted exhaustive testing across multiple parameter formats and confirmed the issue affects every variation. Bug Details: 1. Complete Parameter Failure The check() function ignores balance parameters regardless of format used: // Test 1: Documentation-recommended format await check({ featureId: "podcast_import_minutes", requiredQuantity: 5 }) // Result: required_balance: 1 (ignored our 5) // Test 2: TypeScript definition format await check({ featureId: "podcast_import_minutes", requiredBalance: 5 }) // Result: required_balance: 1 (ignored our 5) // Test 3: Python/Node.js SDK format await check({ featureId: "podcast_import_minutes", required_quantity: 5 }) // Result: required_balance: 1 (ignored our 5) 2. Consistent Evidence Across All Tests Console Output (Proof): [TEST] Sending these exact parameters to Autumn: {featureId: 'podcast_import_minutes', required_quantity: 5} [TEST] Expected required_balance in result: 5 Actual: 1 API Response (Always the same): { "data": { "allowed": true, "feature_id": "podcast_import_minutes", "customer_id": "3193494f-a733-46fa-bc8b-66a2325a3b70", "required_balance": 1, "unlimited": false, "interval": "month", "balance": 1, "usage": 0, "included_usage": 300, "next_reset_at": 1758966323344, "overage_allowed": false }, "error": null } 3. Cross-SDK Inconsistency SDK Parameter Status Evidence Python required_quantity=5 ✅ Works Per your docs Node.js required_quantity: 5 ✅ Works Per your docs React requiredQuantity: 5 ❌ Broken Documented but ignored React requiredBalance: 5 ❌ Broken TypeScript-only, ignored React required_quantity: 5 ❌ Broken Snake case, ignored 4. Documentation vs Reality Gap Your React Documentation Shows: const { allowed, check } = useCustomer(); const { data } = await check({ featureId: "messages", requiredQuantity: 3 }); TypeScript Definitions Show: interface CheckParams { featureId?: string; requiredBalance?: number; // Different parameter name! // requiredQuantity is not defined } Reality: Both parameters are completely ignored, SDK always defaults to checking for 1 unit. 5. Business Impact Critical Failures: Quota enforcement impossible: Users can exceed limits without detection Paywall never triggers: Always returns allowed: true Billing integration broken: Cannot implement usage-based pricing Security vulnerability: No protection against quota abuse Real-World Example: User has 1 minute available Requests operation requiring 5 minutes SDK returns allowed: true (should be false) User proceeds without upgrade prompt Business loses revenue, user exceeds quota 6. Reproduction Steps Environment: React 18 with TypeScript Autumn React SDK: autumn-js/react Integration: useCustomer hook Steps: Initialize useCustomer hook Call check() with ANY balance parameter > 1 Observe API response always shows required_balance: 1 Note allowed: true even when balance insufficient Expected vs Actual: // Input: Any value > current balance { featureId: "feature_name", [parameter]: 5 } // Expected Output { allowed: false, required_balance: 5 } // Actual Output { allowed: true, required_balance: 1 } 7. Technical Analysis Root Cause Hypothesis: React SDK may not be properly passing parameters to backend API Backend API might be defaulting to required_quantity: 1 when parameter missing Parameter name transformation (camelCase → snake_case) may be broken Evidence: Multiple parameter formats tested, all result in identical required_balance: 1 response, suggesting complete parameter transmission failure. 8. Immediate Impact on Production Workaround Required: We've been forced to implement custom backend balance checking to bypass the broken SDK: // Can't use Autumn's broken check() function // const result = await check({ featureId: "feature", requiredBalance: 5 }); // Must use custom backend instead const result = await apiRequest('/api/check-balance', { featureId: "feature", requiredMinutes: 5 }); 9. Requests for Resolution Immediate Actions Needed: Fix parameter transmission: Make React SDK actually send balance parameters to API Standardize parameter names: Use required_quantity like Python/Node.js SDKs Fix TypeScript definitions: Match actual working parameter names Add integration tests: Prevent regression of this critical functionality Documentation Updates: Remove misleading React examples until SDK is fixed Add warning about current React SDK limitations Provide working code examples once fixed Timeline: This is blocking our production billing system. Please prioritize as P0/Critical. Contact Information: [Your contact details] Additional Notes: We're happy to provide additional testing, logs, or assist with reproduction. This affects the core value proposition of using Autumn for quota management. This detailed bug report provides comprehensive evidence, clear reproduction steps, and demonstrates the business impact while maintaining a professional tone that should get their immediate attention.