← Semua artikel

Apa Itu Rate Limit API? Penyebab HTTP 429 dan Cara Menanganinya

Diperbarui 22 Oct 2026

Kamu menjalankan script API dan awalnya semua request mendapatkan status 200. Setelah beberapa ratus request, server mulai membalas 429 Too Many Requests. Ditunggu beberapa saat, request kembali normal. Kondisi seperti ini biasanya berarti kamu sedang berhadapan dengan rate limit.

Rate limit merupakan mekanisme yang digunakan server untuk membatasi berapa banyak request yang boleh dilakukan client dalam periode tertentu. Tujuannya bukan cuma mencegah serangan. Rate limiting juga membantu menjaga kapasitas server, membagi resource secara lebih adil, mengontrol penggunaan API, dan mencegah satu client menghabiskan seluruh kapasitas layanan.

Yang sering salah dipahami adalah rate limit dianggap selalu berdasarkan IP. Padahal sebuah API bisa membatasi berdasarkan API key, akun, user ID, endpoint, cookie, organization, token, bahkan kombinasi beberapa sinyal sekaligus.

Karena itu kalau mendapatkan 429, solusi yang benar bukan otomatis mengganti IP. Client sebaiknya membaca aturan API, melihat response header, mengurangi request rate, menerapkan queue, retry yang terbatas, dan menghormati Retry-After jika tersedia.

Kalau belum familiar dengan arti 429, baca juga artikel Mengenal HTTP Status Code.

Apa Itu Rate Limit?

Rate limit adalah aturan yang membatasi jumlah operasi atau request dalam jangka waktu tertentu.

Contohnya sebuah API mempunyai aturan:

Rate Limit

100 request per menit

Artinya client hanya diperbolehkan membuat sejumlah request tertentu di dalam window tersebut.

Jika request terlalu banyak, server dapat:

  • mengembalikan HTTP 429,
  • menunda request,
  • menolak request tertentu,
  • mengurangi throughput,
  • atau pada kondisi tertentu memutus koneksi.

Kenapa API Membutuhkan Rate Limit?

Bayangkan server API memiliki kapasitas menangani satu juta request per menit.

Tanpa rate limit, satu client yang salah konfigurasi bisa saja mengirim:

500.000 request / menit

sendirian.

Akibatnya pengguna lain ikut terkena dampak.

Rate limit membantu mengatur distribusi resource.

Client A
Client B
Client C
→
Rate Limiter
→
API Server

Fungsi Rate Limiting

Rate limiting bisa digunakan untuk berbagai tujuan:

  • melindungi server dari overload,
  • mengurangi abuse,
  • membatasi penggunaan berdasarkan paket layanan,
  • mencegah request tidak sengaja dalam jumlah besar,
  • mengurangi brute-force attempt,
  • membagi kapasitas API antarclient,
  • menjaga database dan backend dependency tetap stabil.

Apa Arti HTTP 429 Too Many Requests?

429 Too Many Requests menunjukkan bahwa client mengirim terlalu banyak request dalam periode tertentu.

Contoh response:

HTTP/1.1 429 Too Many Requests

Status ini didefinisikan dalam RFC 6585.

Server juga dapat memberikan penjelasan lebih lanjut melalui response body atau response header.

Referensi teknisnya dapat dibaca di RFC 6585 — Additional HTTP Status Codes.

Apa Itu Retry-After?

Retry-After adalah response header yang memberi informasi kapan client sebaiknya mencoba request lagi.

Contoh:

HTTP/1.1 429 Too Many Requests Retry-After: 60

Artinya client diminta menunggu sekitar 60 detik sebelum melakukan request berikutnya.

Nilainya juga dapat diberikan dalam bentuk tanggal HTTP.

Retry-After: Wed, 21 Oct 2026 08:00:00 GMT

Kenapa Retry-After Harus Dihormati?

Kalau server sudah memberitahu client untuk berhenti selama 60 detik tetapi script malah terus mengirim request setiap 100 milidetik, server akan terus menerima traffic yang sebenarnya sudah diminta berhenti.

Hal ini bisa:

  • memperpanjang rate limiting,
  • meningkatkan error,
  • membebani server,
  • membuat integration diblokir,
  • atau memicu policy abuse.

Karena itu client yang baik harus bisa melakukan pause.

Request
→
429
→
Wait
→
Retry

Rate Limit Tidak Selalu Berdasarkan IP

Ini salah satu konsep terpenting.

RFC 6585 tidak mewajibkan server menggunakan IP untuk menentukan client.

Server bisa menghitung berdasarkan:

  • IP address,
  • API key,
  • access token,
  • akun,
  • session,
  • cookie,
  • endpoint,
  • organization,
  • resource tertentu.

Jadi mengganti IP belum tentu mereset rate limit.

Contoh Rate Limit Berdasarkan IP

Misalnya:

IP 198.51.100.10 Limit: 100 request / menit

Semua request dari IP tersebut menggunakan counter yang sama.

Request 1 Request 2 ... Request 100 Request 101 → 429

Rate Limit Berdasarkan API Key

API juga bisa menggunakan credential sebagai identitas.

API_KEY_A Limit: 10.000 request / jam

Kalau API key yang sama digunakan dari lima server berbeda, request tetap dapat masuk ke counter yang sama.

Server A
Server B
Server C
→
API_KEY_A
→
Shared Limit

Rate Limit Berdasarkan User

Layanan yang mempunyai akun dapat menghitung request berdasarkan user ID.

Contohnya:

User Free
1.000 request / hari

User Pro
50.000 request / hari

Dengan desain seperti ini, perubahan alamat IP tidak mengubah quota akun.

Rate Limit Bisa Berbeda per Endpoint

Tidak semua endpoint harus mempunyai batas yang sama.

Contohnya:

Endpoint Limit
GET /users 1.000 request / menit
POST /login 10 request / menit
GET /search 30 request / menit

Endpoint login biasanya membutuhkan pembatasan lebih ketat daripada endpoint read-only biasa.

Apa Itu Rate Limit Window?

Window adalah periode waktu yang digunakan untuk menghitung request.

Contohnya:

100 request / 60 detik

Artinya server mempunyai window 60 detik.

Ada beberapa algoritma berbeda untuk menerapkan window tersebut.

Fixed Window Rate Limiting

Fixed window membagi waktu menjadi blok tetap.

Contohnya:

10:00:00 - 10:00:59 Limit 100 request 10:01:00 - 10:01:59 Limit reset

Implementasinya sederhana, tetapi ada edge case di batas window.

Client bisa mengirim banyak request pada:

10:00:59

kemudian kembali mengirim banyak request pada:

10:01:00

sehingga secara waktu nyata terjadi burst cukup besar.

Sliding Window

Sliding window menghitung request berdasarkan rentang waktu yang bergerak bersama waktu saat ini.

Misalnya pada pukul:

10:01:30

server menghitung request dari:

10:00:30 sampai 10:01:30

Pendekatan ini membuat limit lebih halus daripada fixed boundary.

Token Bucket

Token bucket membayangkan client mempunyai sejumlah token.

Setiap request memakai token.

Bucket capacity: 100 token Request: -1 token

Token kemudian diisi kembali berdasarkan rate tertentu.

Metode ini memungkinkan burst kecil selama bucket masih mempunyai token tanpa membiarkan request berjalan tanpa batas.

Token Bucket
100
→
Request
-1
→
Remaining
99

Leaky Bucket

Leaky bucket sering dibayangkan seperti antrean yang mengeluarkan request dengan kecepatan terkontrol.

Request masuk ke queue, kemudian diproses dengan rate tertentu.

Burst Request
→
Queue
→
Rate Stabil

Pendekatan seperti ini membantu meratakan burst traffic.

Rate Limiting vs Throttling

Kedua istilah sering dipakai bergantian, tetapi secara konsep bisa dibedakan.

Konsep Perilaku
Rate Limiting Request di atas batas dapat ditolak.
Throttling Request dapat diperlambat atau throughput dibatasi.

Implementasi nyata bisa menggunakan kombinasi keduanya.

Rate Limit vs Quota

Rate limit biasanya fokus pada frekuensi.

Quota lebih sering berarti total pemakaian dalam periode lebih panjang.

Contoh:

Jenis Contoh
Rate Limit 100 request / menit
Daily Quota 100.000 request / hari
Monthly Quota 1 juta request / bulan

Bagaimana Tahu API Hampir Mencapai Limit?

Banyak API memberikan informasi melalui response header.

Formatnya tidak standar untuk semua API, tetapi contoh yang sering ditemui:

X-RateLimit-Limit: 5000 X-RateLimit-Remaining: 125 X-RateLimit-Reset: 1792573200

Artinya kurang lebih:

Header Arti
X-RateLimit-Limit Batas maksimum.
X-RateLimit-Remaining Sisa request.
X-RateLimit-Reset Waktu reset.

Contoh Rate Limit Header GitHub API

GitHub REST API menggunakan header seperti:

x-ratelimit-limit x-ratelimit-remaining x-ratelimit-used x-ratelimit-reset x-ratelimit-resource

Client bisa memakai informasi tersebut untuk mengatur pace request sebelum benar-benar terkena limit.

Jangan Menunggu Sampai Remaining = 0

Kalau aplikasi mengetahui sisa quota, jauh lebih baik mulai memperlambat request lebih awal.

Contoh:

Remaining > 1000 → normal Remaining < 100 → kurangi concurrency Remaining = 0 → tunggu reset

Dengan pola seperti ini, aplikasi lebih stabil dibanding terus mengirim request sampai ditolak.

Butuh Proxy untuk Testing API dari Jalur Jaringan Berbeda?

GudangProxy menyediakan daftar proxy gratis berdasarkan negara, protokol, tingkat anonimitas, dan status koneksi. Proxy bisa digunakan untuk pengujian jaringan atau lokasi yang memang diizinkan tanpa mengabaikan rate limit dan kebijakan API.

Lihat Daftar Proxy Gratis →

Apa Hubungan Proxy dengan Rate Limit?

Proxy mengubah jalur koneksi dan dapat membuat server tujuan melihat IP proxy sebagai source IP.

Kalau sebuah layanan melakukan rate limit murni berdasarkan IP, maka setiap exit IP dapat mempunyai counter berbeda sesuai implementasi server.

Tetapi jangan langsung menyimpulkan bahwa proxy merupakan solusi untuk melewati limit.

Server bisa membatasi berdasarkan:

  • akun,
  • API key,
  • token,
  • session,
  • cookie,
  • organization,
  • IP,
  • kombinasi beberapa identifier.

Kenapa Mengganti Proxy Belum Tentu Menghilangkan 429?

Misalnya rate limit berdasarkan API key:

API KEY: abc123 Limit: 5.000 request/jam

Request melalui:

Proxy A Proxy B Proxy C

tetap memakai:

API KEY abc123

maka server bisa tetap menghitung semuanya sebagai satu quota.

Rotasi IP Bukan Pengganti Rate Control

Kalau penyedia API mengatakan:

100 request / menit

client sebaiknya mengatur aplikasi supaya tetap berada di batas tersebut.

Menggunakan banyak IP untuk menghindari pembatasan yang sengaja diterapkan service bisa melanggar Terms of Service dan berujung pada pemblokiran integrasi.

Proxy lebih cocok digunakan untuk kebutuhan seperti:

  • network testing,
  • geo testing,
  • monitoring endpoint dari lokasi berbeda,
  • memisahkan traffic aplikasi,
  • testing konfigurasi jaringan.

Kenapa Concurrency Bisa Memicu Rate Limit?

Bayangkan limit API:

60 request / menit

Aplikasi mempunyai 100 worker dan semuanya mengirim request bersamaan.

100 Worker
→
100 Request Sekaligus
→
Rate Limit

Walaupun script hanya berjalan beberapa detik, burst-nya sudah melewati kapasitas yang diizinkan.

Gunakan Queue untuk Mengontrol Request

Daripada seluruh worker menembak API sekaligus, gunakan queue.

100 job ↓ Queue ↓ 5 concurrent worker ↓ API

Concurrency menjadi lebih terkontrol dan traffic lebih mudah diprediksi.

Apa Itu Exponential Backoff?

Exponential backoff membuat jeda retry bertambah setiap kali terjadi kegagalan.

Contoh:

Retry 1 → 1 detik Retry 2 → 2 detik Retry 3 → 4 detik Retry 4 → 8 detik Retry 5 → 16 detik

Tujuannya mencegah client terus membanjiri server yang sedang meminta traffic dikurangi.

Kenapa Perlu Jitter?

Bayangkan 10.000 client terkena 429 pada saat yang sama.

Kalau semuanya retry tepat setelah 60 detik:

10.000 client ↓ 60 detik ↓ 10.000 request bersamaan

server bisa terkena traffic spike baru.

Jitter menambahkan sedikit variasi acak pada waktu tunggu.

Contohnya:

Base wait: 8 detik Client A: 8.2 detik Client B: 9.1 detik Client C: 8.7 detik

Traffic menjadi lebih tersebar.

Contoh Retry yang Buruk

while True: request_api()

Kalau API sedang rate limited, loop seperti ini bisa terus menghasilkan error tanpa henti.

Contoh Pola Retry yang Lebih Sehat

request ↓ 429? ↓ baca Retry-After ↓ wait ↓ retry terbatas ↓ jika gagal terus → stop / error

Selalu berikan maksimum retry.

Contoh Rate Limit Handling dengan Python

import time import requests url = "https://api.example.com/data" for attempt in range(5): response = requests.get(url, timeout=15) if response.status_code != 429: response.raise_for_status() print(response.json()) break retry_after = response.headers.get("Retry-After") if retry_after and retry_after.isdigit(): wait = int(retry_after) else: wait = 2 ** attempt print(f"Rate limited. Tunggu {wait} detik.") time.sleep(wait)

Contoh tersebut sengaja dibatasi lima percobaan sehingga script tidak retry tanpa batas.

Handling 429 di JavaScript

async function fetchWithRetry(url, maxRetry = 5) { for (let attempt = 0; attempt < maxRetry; attempt++) { const response = await fetch(url); if (response.status !== 429) { if (!response.ok) { throw new Error(`HTTP ${response.status}`); } return response; } const retryAfter = response.headers.get("retry-after"); let waitMs; if (retryAfter && /^\d+$/.test(retryAfter)) { waitMs = Number(retryAfter) * 1000; } else { waitMs = Math.pow(2, attempt) * 1000; } await new Promise(resolve => setTimeout(resolve, waitMs)); } throw new Error("Rate limit terus terjadi."); }

Retry-After Bisa Berupa Tanggal

Jangan menganggap nilainya selalu angka detik.

Header dapat berbentuk:

Retry-After: 120

atau:

Retry-After: Wed, 21 Oct 2026 08:00:00 GMT

HTTP client production sebaiknya mampu memahami kedua bentuk kalau API memang menggunakannya.

Apakah Semua 429 Punya Retry-After?

Tidak.

RFC mengizinkan server menyertakan Retry-After, tetapi header tersebut tidak wajib selalu ada.

Kalau tidak tersedia, client bisa mengikuti dokumentasi API atau memakai backoff yang wajar.

Rate Limit Header Tidak Selalu Sama

Setiap provider bisa mempunyai format sendiri.

Contoh:

X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset

API lain mungkin memakai nama berbeda atau mengikuti standar header yang berbeda.

Karena itu jangan membuat client berdasarkan asumsi tanpa membaca dokumentasi API.

Primary dan Secondary Rate Limit

Sebuah layanan bisa mempunyai lebih dari satu jenis limit.

GitHub, misalnya, membedakan primary rate limit dan secondary rate limit.

Primary limit berhubungan dengan quota request utama.

Secondary limit dapat digunakan untuk membatasi pola penggunaan tertentu yang terlalu agresif, misalnya concurrency atau aktivitas yang dianggap berlebihan.

Jadi kondisi:

Remaining masih ada tetapi request tetap ditolak

bisa terjadi pada API yang mempunyai mekanisme pembatas tambahan.

Kenapa Authenticated Request Bisa Punya Limit Berbeda?

API dapat memberikan quota berbeda berdasarkan apakah request mempunyai identitas yang jelas.

Contohnya:

Request Rate Limit
Unauthenticated Lebih rendah
Authenticated Lebih tinggi

GitHub merupakan salah satu API yang memberikan batas lebih tinggi pada banyak authenticated request dibanding request anonymous.

Gunakan Caching untuk Mengurangi Request

Salah satu cara terbaik mengurangi rate limit adalah jangan meminta data yang sama berulang kali kalau memang tidak perlu.

Misalnya API response valid selama lima menit.

Daripada:

request setiap user membuka halaman

gunakan:

API ↓ cache 5 menit ↓ user request memakai cache

Conditional Request juga Bisa Membantu

HTTP mempunyai mekanisme seperti ETag dan conditional request.

Contoh:

If-None-Match: "abc123"

Kalau data belum berubah, server dapat merespons:

304 Not Modified

Beberapa API bahkan memberikan perlakuan rate limit yang lebih efisien untuk conditional request.

Polling Terlalu Sering Adalah Sumber Masalah Umum

Misalnya status job hanya berubah setiap beberapa menit, tetapi aplikasi melakukan polling:

setiap 100 ms

Itu berarti:

10 request / detik 600 request / menit

Padahal polling setiap 5 detik mungkin sudah cukup.

Gunakan Webhook Kalau Tersedia

Kalau provider API menyediakan webhook, aplikasi tidak perlu terus bertanya apakah sesuatu sudah berubah.

Polling:

Client → API? Client → API? Client → API? Client → API?

Webhook:

Event terjadi ↓ Server mengirim notification ↓ Client menerima

Untuk event-driven workflow, webhook bisa jauh lebih efisien.

Batch Request Lebih Efisien Jika API Mendukung

Daripada:

GET /users/1 GET /users/2 GET /users/3 GET /users/4

API tertentu mungkin menyediakan:

GET /users?ids=1,2,3,4

Satu request bisa menggantikan beberapa request terpisah.

Jangan Mengirim Data yang Tidak Dibutuhkan

Jika API mendukung field selection atau pagination, gunakan secara efisien.

Contohnya daripada mengambil:

100.000 record

kalau hanya membutuhkan:

100 record terbaru

request lebih kecil dan workload server juga berkurang.

Pagination dan Rate Limit

Pagination bisa membuat request bertambah banyak.

Misalnya API memberikan 100 item per halaman dan ada 10.000 item.

10.000 / 100 = 100 request

Client perlu menghitung kebutuhan request supaya tidak melewati quota.

Rate Limit di Web Scraping

Website juga dapat menerapkan pembatasan request walaupun tidak mempunyai API publik.

Signal-nya bisa berupa:

  • HTTP 429,
  • 403,
  • challenge page,
  • connection slowdown,
  • temporary block.

Scraping yang diizinkan tetap sebaiknya mempunyai request pacing dan mengikuti aturan website.

robots.txt dan Rate Limit Apakah Sama?

Tidak.

robots.txt adalah mekanisme yang menyampaikan aturan crawling kepada crawler yang mematuhinya.

Rate limit adalah enforcement mengenai seberapa cepat atau banyak request boleh dilakukan.

Mekanisme Fungsi
robots.txt Crawling directives.
Rate Limit Membatasi request rate.

429 vs 403 Apa Bedanya?

429 berarti terlalu banyak request.

403 berarti server memahami request tetapi menolak akses.

Status Makna Umum
403 Access forbidden.
429 Request rate terlalu tinggi.

Tapi sebuah provider bisa menggunakan policy sendiri dan tidak selalu memilih status yang sama.

429 vs 503 Apa Bedanya?

429 Too Many Requests biasanya menunjukkan pembatasan terhadap client.

503 Service Unavailable biasanya menunjukkan server atau service sementara tidak siap menerima request.

Status Fokus Masalah
429 Client terlalu banyak request.
503 Service tidak tersedia sementara.

Keduanya dapat menggunakan Retry-After.

Apa Itu Retry Storm?

Retry storm terjadi ketika banyak client yang gagal langsung mencoba ulang tanpa koordinasi.

Contohnya server overload menghasilkan 503.

Seribu client langsung retry setiap 100 ms.

Server Overload
→
Error
→
Mass Retry
→
Lebih Overload

Backoff dan jitter membantu memutus siklus tersebut.

Rate Limiting pada Login Endpoint

Endpoint login biasanya perlu perlindungan khusus.

Rate limit bisa diterapkan per:

  • IP,
  • username,
  • account,
  • device,
  • kombinasi beberapa sinyal.

Kalau hanya per-IP, pengguna di belakang NAT atau CGNAT bisa saling memengaruhi.

NAT, CGNAT, dan Rate Limit per-IP

Beberapa pengguna dapat terlihat datang dari public IP yang sama.

Contohnya:

User A ┐ User B ├─ CGNAT → Public IP X User C ┘

Kalau sebuah service membatasi secara kasar berdasarkan IP, aktivitas beberapa pengguna bisa masuk ke counter yang sama.

Ini salah satu alasan sistem besar sering memakai lebih dari satu sinyal untuk rate limiting.

Rate Limit pada Server Sendiri

Kalau kamu mengelola API sendiri, rate limiting sebaiknya dilakukan pada layer yang tepat.

Bisa berada pada:

  • application server,
  • API gateway,
  • reverse proxy,
  • CDN,
  • WAF,
  • load balancer tertentu.

Contoh Rate Limiting dengan Reverse Proxy

Secara arsitektur:

Client
→
Reverse Proxy
Rate Limit
→
API Server

Request berlebihan dapat dihentikan sebelum mencapai backend utama.

Kenapa Rate Limit Perlu Observability?

Tanpa log dan metric, administrator tidak tahu apakah limit terlalu ketat atau terlalu longgar.

Metric yang berguna antara lain:

  • request per second,
  • jumlah 429,
  • top client,
  • endpoint paling ramai,
  • remaining quota,
  • retry frequency,
  • latency.

Cara Troubleshooting HTTP 429

1. Baca Response Body

API sering menjelaskan alasan limit.

2. Cek Retry-After

Retry-After

Kalau ada, hormati nilainya.

3. Cek Header Rate Limit

Cari informasi seperti:

X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset

4. Baca Dokumentasi API

Jangan menebak algoritma rate limit.

5. Kurangi Concurrency

Batasi jumlah worker aktif.

6. Gunakan Queue

Atur traffic supaya lebih stabil.

7. Terapkan Backoff

Hindari retry agresif.

8. Cache Data

Jangan mengambil data yang sama berulang kali tanpa alasan.

9. Gunakan Webhook Jika Ada

Kurangi kebutuhan polling.

10. Hentikan Retry Setelah Batas Tertentu

Jangan buat loop retry tak terbatas.

Kesalahan Umum Saat Menangani Rate Limit

  • langsung mengganti proxy setiap mendapat 429,
  • menganggap semua limit berdasarkan IP,
  • mengabaikan Retry-After,
  • retry tanpa batas,
  • memakai concurrency terlalu tinggi,
  • polling terlalu sering,
  • tidak membaca rate-limit header,
  • tidak menggunakan cache,
  • tidak membedakan 429 dan 503,
  • menganggap authenticated dan anonymous request selalu punya quota yang sama.

Checklist Client API yang Baik

Fitur Sebaiknya Ada?
Timeout Ya
Retry terbatas Ya
Exponential backoff Ya
Jitter Bagus untuk concurrency besar
Retry-After support Ya
Rate-limit header monitoring Jika API menyediakannya
Caching Jika data memungkinkan
Queue Untuk workload besar
Maximum retry Ya

FAQ Rate Limit API

Apa itu rate limit API?

Rate limit API adalah aturan yang membatasi jumlah request yang boleh dilakukan client dalam jangka waktu atau quota tertentu.

Apa arti HTTP 429?

HTTP 429 Too Many Requests berarti client telah mengirim terlalu banyak request dalam periode tertentu menurut kebijakan server.

Apa fungsi Retry-After?

Retry-After memberi informasi berapa lama client sebaiknya menunggu sebelum mencoba request lagi.

Apakah 429 selalu berdasarkan IP?

Tidak. Rate limit bisa dihitung berdasarkan IP, akun, API key, token, cookie, resource, atau kombinasi beberapa identifier.

Apakah mengganti proxy bisa menghilangkan 429?

Belum tentu. Kalau rate limit berdasarkan API key atau akun, mengganti IP proxy tidak mereset counter. Menggunakan proxy untuk menghindari pembatasan layanan juga bisa melanggar kebijakan layanan.

Apa itu exponential backoff?

Exponential backoff adalah strategi retry dengan waktu tunggu yang bertambah setiap kali percobaan gagal.

Apa fungsi jitter?

Jitter menambahkan variasi pada waktu retry supaya banyak client tidak mencoba kembali pada waktu yang persis sama.

Apa beda rate limit dan quota?

Rate limit biasanya membatasi frekuensi request dalam periode pendek, sedangkan quota membatasi total pemakaian dalam periode lebih panjang.

Apa beda 429 dan 503?

429 biasanya menunjukkan client terlalu banyak request, sedangkan 503 berarti service sementara tidak siap menangani request.

Bagaimana cara menghindari rate limit secara benar?

Kurangi request rate, gunakan cache, queue, batching, webhook bila tersedia, hormati Retry-After, baca header quota, dan ikuti dokumentasi serta kebijakan API.