{"asOf":"2026-10-28","storesIpAddresses":false,"endpoint":"/api/gotchas","usage":"GET /api/gotchas?provider={slug}","curatedProviders":["anthropic","openai","openrouter","e2b","browserbase","firecrawl","neon","resend","qdrant","langfuse"],"items":[{"providerId":"anthropic","smokeTestCmd":"curl -sS https://api.anthropic.com/v1/models -H \"x-api-key: $ANTHROPIC_API_KEY\" -H \"anthropic-version: 2023-06-01\" | head -c 200","rateLimitCeiling":"Tier 1: 50 RPM / 40K-80K ITPM; Tier 4: 4,000 RPM / 400K+ ITPM.","timeoutOrPayloadTrap":"HTTP 529 Overloaded_error during peak US hours; retired 2024 snapshot IDs (claude-3-5-sonnet-20240620) return 404 not_found_error.","day2ProductionGotchas":["Always configure automatic 529/429 failover to OpenRouter or AWS Bedrock.","Enable prompt caching (cache_control: ephemeral) on system prompts >1,024 tokens to cut input cost by up to 90%."]},{"providerId":"openai","smokeTestCmd":"curl -sS https://api.openai.com/v1/models -H \"Authorization: Bearer $OPENAI_API_KEY\" | head -c 200","rateLimitCeiling":"Tier 1: 500 RPM / 30K-200K TPM; Tier 5: 10,000+ RPM.","timeoutOrPayloadTrap":"HTTP 429 insufficient_quota when prepaid wallet hits $0 (auto-recharge off by default); text-embedding-3-large defaults to 3072d (breaks 1536d indexes unless dimensions:1536 is passed).","day2ProductionGotchas":["Distinguish 429 rate_limit_exceeded (backoff) from 429 insufficient_quota (failover immediately).","tts-1 and tts-1-hd retire on 2027-01-06; migrate voice pipelines to gpt-4o-mini-tts or Deepgram/ElevenLabs."]},{"providerId":"openrouter","smokeTestCmd":"curl -sS https://openrouter.ai/api/v1/auth/key -H \"Authorization: Bearer $OPENROUTER_API_KEY\"","rateLimitCeiling":"Free models: 20 RPM / 50-1000 RPD; Paid credits: dynamic upstream capacity.","timeoutOrPayloadTrap":"Upstream provider timeouts on long reasoning turns unless provider.allow_fallbacks is enabled.","day2ProductionGotchas":["Pass HTTP-Referer and X-Title headers for transparent attribution and rank telemetry.","Set provider: { allow_fallbacks: true, data_collection: 'deny' } for zero-data-retention routing."]},{"providerId":"e2b","smokeTestCmd":"curl -sS https://api.e2b.dev/sandboxes -H \"X-API-Key: $E2B_API_KEY\"","rateLimitCeiling":"Hobby: 20 concurrent sandboxes; Pro: 100+ concurrent sandboxes.","timeoutOrPayloadTrap":"Default sandbox TTL is 5 minutes unless timeoutMs is extended; 512MB RAM sandboxes OOM (exit 137) on Chromium/Next.js builds.","day2ProductionGotchas":["Explicitly call sandbox.kill() in a finally{} block so idle microVMs do not accrue vCPU-second charges.","Use custom pre-warmed templates for heavy Python/Node dependencies to keep cold start <200ms."]},{"providerId":"browserbase","smokeTestCmd":"curl -sS https://api.browserbase.com/v1/sessions -H \"X-BB-API-Key: $BROWSERBASE_API_KEY\" | head -c 200","rateLimitCeiling":"Concurrency-capped by plan (3 to 100+ parallel browsers).","timeoutOrPayloadTrap":"Unclosed CDP WebSocket sessions bill until session timeout; residential proxy bandwidth bills per GB.","day2ProductionGotchas":["Use playwright-core connectOverCDP instead of bundling full playwright in serverless functions.","Block image/font/video media routes when scraping text to cut residential proxy GB spend by 80%."]},{"providerId":"firecrawl","smokeTestCmd":"curl -sS -X POST https://api.firecrawl.dev/v1/scrape -H \"Authorization: Bearer $FIRECRAWL_API_KEY\" -H \"Content-Type: application/json\" -d '{\"url\":\"https://example.com\",\"formats\":[\"markdown\"]}' | head -c 200","rateLimitCeiling":"Plan-tiered RPM on /v1/scrape and /v1/crawl.","timeoutOrPayloadTrap":"Async /v1/crawl jobs require polling or webhook completion; synchronous /v1/scrape times out >30s on slow SPAs.","day2ProductionGotchas":["Pass onlyMainContent: true to strip navbars/footers and cut downstream LLM input tokens by 60%."]},{"providerId":"neon","smokeTestCmd":"node -e 'fetch(\"https://console.neon.tech/api/v2/projects\",{headers:{Authorization:\"Bearer \"+process.env.NEON_API_KEY}}).then(r=>console.log(r.status))'","rateLimitCeiling":"Direct TCP connections cap at max_connections per compute size; pooled -pooler hostname supports 10,000 concurrent connections.","timeoutOrPayloadTrap":"Scale-to-zero cold start adds 300-500ms on first query after 5m idle; direct TCP from serverless exhausts slots (Postgres 53300).","day2ProductionGotchas":["Always use the -pooler hostname or @neondatabase/serverless HTTP driver in Vercel/Cloudflare Workers."]},{"providerId":"resend","smokeTestCmd":"curl -sS https://api.resend.com/domains -H \"Authorization: Bearer $RESEND_API_KEY\"","rateLimitCeiling":"Default 2 requests/sec per account (burst headers returned in ratelimit-remaining).","timeoutOrPayloadTrap":"Free tier is capped at 100 emails/day (3,000/mo); Paid overages require enabling Transactional Overages in team settings.","day2ProductionGotchas":["Use the /emails/batch endpoint (up to 100 emails/call) to avoid hitting the 2 req/sec rate limit.","Configure custom return-path + DKIM/SPF/DMARC before sending to Gmail/Yahoo recipients."]},{"providerId":"qdrant","smokeTestCmd":"curl -sS \"$QDRANT_URL/collections\" -H \"api-key: $QDRANT_API_KEY\"","rateLimitCeiling":"Cluster RAM/vCPU bound; unindexed payload filters trigger full collection scans.","timeoutOrPayloadTrap":"Upserting 3072-dim vectors into a 1536-dim collection throws DimensionMismatchError.","day2ProductionGotchas":["Create payload indexes (createPayloadIndex) on tenant_id and jtbd before running filtered vector searches.","Enable scalar quantization (int8) to cut RAM usage by 4x with <1% recall loss."]},{"providerId":"langfuse","smokeTestCmd":"curl -sS https://cloud.langfuse.com/api/public/health","rateLimitCeiling":"Hobby: 50,000 units/mo free; ingestion batches up to 3.5MB.","timeoutOrPayloadTrap":"Serverless functions exiting before langfuse.flushAsync() drop the final trace batch.","day2ProductionGotchas":["Always await langfuse.flushAsync() in serverless waitUntil() or finally{} blocks."]}]}