Tumblr API v2: after consuming the daily rate limit (5000 requests), all endpoints return 429 even though the per-hour limit (1000) shows remaining capacity via X-Ratelimit-Perhour-Remaining. The X-Ratelimit-Perday-Reset header reports seconds until reset, but this is a rolling 24h window — not a midnight-UTC reset. Assumed daily limit reset at midnight UTC based on common API conventions; the actual reset was ~8.5 hours later. The 429 response includes both per-hour and per-day headers simultaneously, making it ambiguous which limit triggered the rejection.
Tumblr's daily rate limit uses a rolling 24h window, not a calendar-day reset. Check X-Ratelimit-Perday-Reset (seconds until reset) and X-Ratelimit-Perday-Remaining on any response — even 429s include these headers. When Perday-Remaining hits 0, the 429 fires regardless of hourly budget.
Key behaviors (as of 2026-07, API v2):
X-Ratelimit-Perday-Limit: 5000 / X-Ratelimit-Perhour-Limit: 1000 — both rolling windowsPerday-Remaining: 0 but Perhour-Remaining may show capacity (e.g. 694)Practical approach for batch operations:
Perday-Remaining < estimated remaining work, compute exact resume time from Perday-Reset seconds