Rate limit error responses tell users when they have sent too many requests in a short time. This helps keep the service fair and working well for everyone.
Rate limit error responses in Rest API
Start learning this pattern below
Jump into concepts and practice - no test required
HTTP/1.1 429 Too Many Requests Content-Type: application/json Retry-After: <seconds> { "error": "Rate limit exceeded", "message": "You have sent too many requests. Please wait before retrying." }
The status code 429 means "Too Many Requests".
The Retry-After header tells the client how many seconds to wait before trying again.
HTTP/1.1 429 Too Many Requests Content-Type: application/json Retry-After: 60 { "error": "Rate limit exceeded", "message": "Try again in 60 seconds." }
Retry-After, so the client decides when to retry.HTTP/1.1 429 Too Many Requests Content-Type: application/json { "error": "Rate limit exceeded", "message": "Please slow down your requests." }
This small web server limits each user to 3 requests every 10 seconds. If the user sends too many requests, it returns a 429 error with a message and tells how many seconds to wait.
from flask import Flask, request, jsonify import time app = Flask(__name__) # Simple rate limit: max 3 requests per 10 seconds per IP requests_log = {} @app.route('/data') def data(): ip = request.remote_addr now = time.time() window = 10 max_requests = 3 # Clean old requests requests_log.setdefault(ip, []) requests_log[ip] = [t for t in requests_log[ip] if now - t < window] if len(requests_log[ip]) >= max_requests: retry_after = window - (now - requests_log[ip][0]) response = jsonify({ "error": "Rate limit exceeded", "message": f"Try again in {int(retry_after)} seconds." }) response.status_code = 429 response.headers['Retry-After'] = str(int(retry_after)) return response requests_log[ip].append(now) return jsonify({"data": "Here is your data!"}) if __name__ == '__main__': app.run(debug=True)
Always include the Retry-After header if you want clients to know when to try again.
Use status code 429 specifically for rate limiting errors.
Be clear and polite in your error messages to help users understand what happened.
Rate limit errors use HTTP status 429 to tell users they sent too many requests.
The Retry-After header helps clients know when to retry.
Clear messages improve user experience and reduce confusion.
Practice
Solution
Step 1: Understand HTTP status codes for errors
HTTP status codes in the 400 range indicate client errors. Among them, 429 specifically means too many requests.Step 2: Identify the code for rate limiting
The 429 status code is defined to signal that the user has sent too many requests in a given time.Final Answer:
429 -> Option BQuick Check:
Rate limit error = 429 [OK]
- Confusing 429 with 404 (not found)
- Using 500 which is server error
- Choosing 401 which means unauthorized
Solution
Step 1: Identify headers related to retry timing
TheRetry-Afterheader is designed to tell clients how long to wait before retrying a request.Step 2: Confirm the correct header for rate limit retry
Other headers like Content-Type or Authorization do not indicate retry timing.Final Answer:
Retry-After -> Option AQuick Check:
Retry timing header = Retry-After [OK]
- Choosing Content-Type which describes data format
- Confusing Authorization with retry info
- Selecting User-Agent which identifies client software
HTTP/1.1 429 Too Many Requests
Retry-After: 120
Content-Type: application/json
{"error": "Rate limit exceeded. Try again later."}Solution
Step 1: Analyze the status code and headers
Status 429 means too many requests. The Retry-After header with value 120 means wait 120 seconds before retrying.Step 2: Interpret the JSON error message
The message confirms the rate limit was exceeded and advises to try again later.Final Answer:
The client sent too many requests and should wait 120 seconds before retrying -> Option DQuick Check:
429 + Retry-After = wait before retry [OK]
- Thinking client can retry immediately
- Confusing 429 with unauthorized error
- Assuming server error from 429
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{"error": "Too many requests"}
What is missing to improve client handling?Solution
Step 1: Identify missing headers for rate limit response
The response lacks the Retry-After header, which helps clients know when to retry.Step 2: Understand why Retry-After is important
Without Retry-After, clients may retry too soon, causing more errors or confusion.Final Answer:
A Retry-After header indicating when to retry -> Option AQuick Check:
Retry-After header missing = add it [OK]
- Changing status code to 500 which is wrong
- Adding Authorization header unrelated to rate limit
- Removing error message reduces clarity
Solution
Step 1: Choose correct status code for rate limiting
Status 429 is the standard code for rate limit errors, signaling client to slow down.Step 2: Include Retry-After header and clear message
Retry-After header tells client how long to wait. JSON message improves clarity and user experience.Step 3: Evaluate other options
403 is forbidden, not rate limit. 200 means success, which is misleading. 500 is server error, not client rate limit.Final Answer:
Return status 429 with a Retry-After header and a JSON message explaining the limit -> Option CQuick Check:
429 + Retry-After + clear message = best practice [OK]
- Using wrong status codes like 403 or 500
- Returning 200 status for errors
- Omitting Retry-After header
