specification: API Commons Rate Limits specificationVersion: '0.1' schema: https://raw.githubusercontent.com/api-evangelist/interface-research/main/schema/api-commons.yml#/$defs/RateLimits provider: Basecamp providerId: basecamp created: '2026-05-04' # Provenance stamped 2026-08-11: this artifact was written by the API Evangelist # bulk sweep dated 2026-05-04, not harvested from the provider. See roadmap#35. method: generated modified: '2026-05-05' reconciled: true tags: - Collaboration - Project Management - REST - SaaS - Team Communication - Rate Limiting description: Basecamp's bc3-api enforces multiple rate limits simultaneously, scoped per IP address with separate windows for GET vs POST and per-second/hour/day buckets. The most commonly hit limit is 50 requests per 10-second window per IP. Thresholds are dynamic and not published per-plan; integrators must handle backpressure rather than rely on static numbers. sources: - https://github.com/basecamp/bc3-api - https://github.com/basecamp/bc3-api/blob/master/README.md headers: retryAfter: Retry-After responseCodes: throttled: 429 serviceUnavailable: 503 limits: - name: Default per-IP throttle scope: IP metric: requests_per_10_seconds limit: 50 timeFrame: 10-seconds notes: Most commonly encountered limit. Multiple per-second/hour/day limits operate concurrently and are dynamically adjusted by Basecamp. - name: Per-method dynamic limits scope: IP metric: varies limit: 'dynamic — separate buckets for GET and POST, per-second/hour/day' notes: Documentation does not publish the exact thresholds; clients must observe 429 + Retry-After and back off. policies: - name: Backoff Strategy description: Implement exponential backoff with jitter and honor the Retry-After header on 429 responses. - name: Retry on 5xx description: 500, 502, 503, and 504 responses should be retried with exponential backoff. Do not retry 404s automatically. - name: Dynamic Backpressure description: Basecamp explicitly warns thresholds adjust dynamically. Treat rate limits as observed runtime signals rather than static configuration. - name: User-Agent Identification description: Basecamp requires a descriptive User-Agent header identifying the integration; missing/anonymous User-Agents may be blocked before rate limiting applies. maintainers: - FN: Kin Lane email: kin@apievangelist.com