[{"data":1,"prerenderedAt":1219},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-rate-limits":82,"-docs-guides-rate-limits-surround":1215},[4,9,40,61],{"title":5,"path":6,"stem":7,"order":8},"Changelog","\u002Fdocs\u002Fchangelog","docs\u002F4.changelog",4,{"title":10,"path":11,"stem":12,"children":13,"page":39},"Api","\u002Fdocs\u002Fapi","docs\u002Fapi",[14,18,22,26,30,34],{"title":15,"path":16,"stem":17},"Overview","\u002Fdocs\u002Fapi\u002Foverview","docs\u002Fapi\u002F1.overview",{"title":19,"path":20,"stem":21},"Quotes","\u002Fdocs\u002Fapi\u002Fquotes","docs\u002Fapi\u002F2.quotes",{"title":23,"path":24,"stem":25},"Authors","\u002Fdocs\u002Fapi\u002Fauthors","docs\u002Fapi\u002F3.authors",{"title":27,"path":28,"stem":29},"Playlists","\u002Fdocs\u002Fapi\u002Fplaylists","docs\u002Fapi\u002F4.playlists",{"title":31,"path":32,"stem":33},"Categories","\u002Fdocs\u002Fapi\u002Fcategories","docs\u002Fapi\u002F5.categories",{"title":35,"path":36,"stem":37,"order":38},"API Reference","\u002Fdocs\u002Fapi\u002F_dir","docs\u002Fapi\u002F_dir",3,false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[45,49,53,57],{"title":46,"path":47,"stem":48},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002Fgetting-started\u002F1.introduction",{"title":50,"path":51,"stem":52},"Authentication","\u002Fdocs\u002Fgetting-started\u002Fauthentication","docs\u002Fgetting-started\u002F2.authentication",{"title":54,"path":55,"stem":56},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002Fgetting-started\u002F3.quickstart",{"title":41,"path":58,"stem":59,"order":60},"\u002Fdocs\u002Fgetting-started\u002F_dir","docs\u002Fgetting-started\u002F_dir",1,{"title":62,"path":63,"stem":64,"children":65,"page":39},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[66,70,74,78],{"title":67,"path":68,"stem":69},"Rate Limits & Pricing","\u002Fdocs\u002Fguides\u002Frate-limits","docs\u002Fguides\u002F1.rate-limits",{"title":71,"path":72,"stem":73},"Error Handling","\u002Fdocs\u002Fguides\u002Ferror-handling","docs\u002Fguides\u002F2.error-handling",{"title":75,"path":76,"stem":77},"SDKs & Libraries","\u002Fdocs\u002Fguides\u002Fsdks","docs\u002Fguides\u002F3.sdks",{"title":62,"path":79,"stem":80,"order":81},"\u002Fdocs\u002Fguides\u002F_dir","docs\u002Fguides\u002F_dir",2,{"id":83,"title":67,"body":84,"description":1208,"extension":1209,"links":1210,"meta":1211,"navigation":527,"path":68,"seo":1213,"stem":69,"__hash__":1214},"docs\u002Fdocs\u002Fguides\u002F1.rate-limits.md",{"type":85,"value":86,"toc":1186},"minimark",[87,91,95,100,174,187,191,202,207,210,255,259,317,321,328,386,389,393,396,956,960,992,996,1007,1029,1033,1036,1061,1064,1068,1078,1116,1119,1123,1126,1141,1145,1149,1156,1160,1168,1172,1175,1179,1182],[88,89,67],"h1",{"id":90},"rate-limits-pricing",[92,93,94],"p",{},"The Quote Gallery API uses rate limiting to ensure fair usage and reliable performance for all developers. Your rate limit depends on your subscription tier.",[96,97,99],"h2",{"id":98},"tiers","Tiers",[101,102,103,122],"table",{},[104,105,106],"thead",{},[107,108,109,113,116,119],"tr",{},[110,111,112],"th",{},"Tier",[110,114,115],{},"Requests \u002F Hour",[110,117,118],{},"Price",[110,120,121],{},"Best For",[123,124,125,142,158],"tbody",{},[107,126,127,134,137,139],{},[128,129,130],"td",{},[131,132,133],"strong",{},"Free",[128,135,136],{},"100",[128,138,133],{},[128,140,141],{},"Testing, prototyping, personal projects",[107,143,144,149,152,155],{},[128,145,146],{},[131,147,148],{},"Hobby",[128,150,151],{},"500",[128,153,154],{},"€4.99\u002Fmo",[128,156,157],{},"Small apps, side projects, indie developers",[107,159,160,165,168,171],{},[128,161,162],{},[131,163,164],{},"Premium",[128,166,167],{},"2,000",[128,169,170],{},"€14.99\u002Fmo",[128,172,173],{},"Production applications, high-traffic integrations",[175,176,178,179,182,183,186],"callout",{"type":177},"tip","If you have an active ",[131,180,181],{},"Supporter subscription"," for the Quote Gallery website, you automatically receive a ",[131,184,185],{},"25% bundle discount"," on all paid API tiers.",[96,188,190],{"id":189},"how-rate-limiting-works","How Rate Limiting Works",[92,192,193,194,197,198,201],{},"Rate limits are applied ",[131,195,196],{},"per API key"," and reset ",[131,199,200],{},"every hour"," on a rolling window basis.",[203,204,206],"h3",{"id":205},"rate-limit-headers","Rate Limit Headers",[92,208,209],{},"Every API response includes headers that help you track your usage:",[101,211,212,222],{},[104,213,214],{},[107,215,216,219],{},[110,217,218],{},"Header",[110,220,221],{},"Description",[123,223,224,235,245],{},[107,225,226,232],{},[128,227,228],{},[229,230,231],"code",{},"X-RateLimit-Limit",[128,233,234],{},"Maximum requests allowed per hour for your tier",[107,236,237,242],{},[128,238,239],{},[229,240,241],{},"X-RateLimit-Remaining",[128,243,244],{},"Number of requests remaining in the current window",[107,246,247,252],{},[128,248,249],{},[229,250,251],{},"X-RateLimit-Reset",[128,253,254],{},"Unix timestamp (seconds) when the rate limit window resets",[203,256,258],{"id":257},"example-response-headers","Example Response Headers",[260,261,266],"pre",{"className":262,"code":263,"language":264,"meta":265,"style":265},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","HTTP\u002F1.1 200 OK\nContent-Type: application\u002Fjson\nX-RateLimit-Limit: 500\nX-RateLimit-Remaining: 487\nX-RateLimit-Reset: 1704070800\n","bash","",[229,267,268,284,292,300,308],{"__ignoreMap":265},[269,270,272,276,280],"span",{"class":271,"line":60},"line",[269,273,275],{"class":274},"sBMFI","HTTP\u002F1.1",[269,277,279],{"class":278},"sbssI"," 200",[269,281,283],{"class":282},"sfazB"," OK\n",[269,285,286,289],{"class":271,"line":81},[269,287,288],{"class":274},"Content-Type:",[269,290,291],{"class":282}," application\u002Fjson\n",[269,293,294,297],{"class":271,"line":38},[269,295,296],{"class":274},"X-RateLimit-Limit:",[269,298,299],{"class":278}," 500\n",[269,301,302,305],{"class":271,"line":8},[269,303,304],{"class":274},"X-RateLimit-Remaining:",[269,306,307],{"class":278}," 487\n",[269,309,311,314],{"class":271,"line":310},5,[269,312,313],{"class":274},"X-RateLimit-Reset:",[269,315,316],{"class":278}," 1704070800\n",[96,318,320],{"id":319},"exceeding-your-rate-limit","Exceeding Your Rate Limit",[92,322,323,324,327],{},"When you exceed your rate limit, the API returns a ",[229,325,326],{},"429 Too Many Requests"," response:",[260,329,333],{"className":330,"code":331,"language":332,"meta":265,"style":265},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"error\": \"Rate limit exceeded\",\n  \"status\": 429\n}\n","json",[229,334,335,341,367,381],{"__ignoreMap":265},[269,336,337],{"class":271,"line":60},[269,338,340],{"class":339},"sMK4o","{\n",[269,342,343,346,350,353,356,359,362,364],{"class":271,"line":81},[269,344,345],{"class":339},"  \"",[269,347,349],{"class":348},"spNyl","error",[269,351,352],{"class":339},"\"",[269,354,355],{"class":339},":",[269,357,358],{"class":339}," \"",[269,360,361],{"class":282},"Rate limit exceeded",[269,363,352],{"class":339},[269,365,366],{"class":339},",\n",[269,368,369,371,374,376,378],{"class":271,"line":38},[269,370,345],{"class":339},[269,372,373],{"class":348},"status",[269,375,352],{"class":339},[269,377,355],{"class":339},[269,379,380],{"class":278}," 429\n",[269,382,383],{"class":271,"line":8},[269,384,385],{"class":339},"}\n",[92,387,388],{},"The response will also include the rate limit headers so you know when you can retry.",[203,390,392],{"id":391},"handling-rate-limits-gracefully","Handling Rate Limits Gracefully",[92,394,395],{},"Here's a recommended pattern for handling rate limits with automatic retry:",[397,398,399,845],"tabs",{},[400,401,403],"tabs-item",{"label":402},"JavaScript",[260,404,408],{"className":405,"code":406,"language":407,"meta":265,"style":265},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","async function fetchWithRetry(url, options, maxRetries = 3) {\n  for (let attempt = 0; attempt \u003C= maxRetries; attempt++) {\n    const response = await fetch(url, options)\n\n    if (response.status === 429) {\n      const resetTime = response.headers.get('X-RateLimit-Reset')\n      const waitMs = resetTime\n        ? (Number(resetTime) * 1000) - Date.now()\n        : Math.pow(2, attempt) * 1000 \u002F\u002F Exponential backoff fallback\n\n      console.log(`Rate limited. Retrying in ${Math.ceil(waitMs \u002F 1000)}s...`)\n      await new Promise((resolve) => setTimeout(resolve, Math.max(waitMs, 1000)))\n      continue\n    }\n\n    return response\n  }\n\n  throw new Error('Max retries exceeded due to rate limiting')\n}\n","js",[229,409,410,452,496,523,529,554,588,601,641,674,679,729,781,787,793,798,807,813,818,840],{"__ignoreMap":265},[269,411,412,415,418,422,425,429,432,435,437,440,443,446,449],{"class":271,"line":60},[269,413,414],{"class":348},"async",[269,416,417],{"class":348}," function",[269,419,421],{"class":420},"s2Zo4"," fetchWithRetry",[269,423,424],{"class":339},"(",[269,426,428],{"class":427},"sHdIc","url",[269,430,431],{"class":339},",",[269,433,434],{"class":427}," options",[269,436,431],{"class":339},[269,438,439],{"class":427}," maxRetries",[269,441,442],{"class":339}," =",[269,444,445],{"class":278}," 3",[269,447,448],{"class":339},")",[269,450,451],{"class":339}," {\n",[269,453,454,458,462,465,469,471,474,477,479,482,484,486,488,491,494],{"class":271,"line":81},[269,455,457],{"class":456},"s7zQu","  for",[269,459,461],{"class":460},"swJcz"," (",[269,463,464],{"class":348},"let",[269,466,468],{"class":467},"sTEyZ"," attempt",[269,470,442],{"class":339},[269,472,473],{"class":278}," 0",[269,475,476],{"class":339},";",[269,478,468],{"class":467},[269,480,481],{"class":339}," \u003C=",[269,483,439],{"class":467},[269,485,476],{"class":339},[269,487,468],{"class":467},[269,489,490],{"class":339},"++",[269,492,493],{"class":460},") ",[269,495,340],{"class":339},[269,497,498,501,504,506,509,512,514,516,518,520],{"class":271,"line":38},[269,499,500],{"class":348},"    const",[269,502,503],{"class":467}," response",[269,505,442],{"class":339},[269,507,508],{"class":456}," await",[269,510,511],{"class":420}," fetch",[269,513,424],{"class":460},[269,515,428],{"class":467},[269,517,431],{"class":339},[269,519,434],{"class":467},[269,521,522],{"class":460},")\n",[269,524,525],{"class":271,"line":8},[269,526,528],{"emptyLinePlaceholder":527},true,"\n",[269,530,531,534,536,539,542,544,547,550,552],{"class":271,"line":310},[269,532,533],{"class":456},"    if",[269,535,461],{"class":460},[269,537,538],{"class":467},"response",[269,540,541],{"class":339},".",[269,543,373],{"class":467},[269,545,546],{"class":339}," ===",[269,548,549],{"class":278}," 429",[269,551,493],{"class":460},[269,553,340],{"class":339},[269,555,557,560,563,565,567,569,572,574,577,579,582,584,586],{"class":271,"line":556},6,[269,558,559],{"class":348},"      const",[269,561,562],{"class":467}," resetTime",[269,564,442],{"class":339},[269,566,503],{"class":467},[269,568,541],{"class":339},[269,570,571],{"class":467},"headers",[269,573,541],{"class":339},[269,575,576],{"class":420},"get",[269,578,424],{"class":460},[269,580,581],{"class":339},"'",[269,583,251],{"class":282},[269,585,581],{"class":339},[269,587,522],{"class":460},[269,589,591,593,596,598],{"class":271,"line":590},7,[269,592,559],{"class":348},[269,594,595],{"class":467}," waitMs",[269,597,442],{"class":339},[269,599,600],{"class":467}," resetTime\n",[269,602,604,607,609,612,614,617,619,622,625,627,630,633,635,638],{"class":271,"line":603},8,[269,605,606],{"class":339},"        ?",[269,608,461],{"class":460},[269,610,611],{"class":420},"Number",[269,613,424],{"class":460},[269,615,616],{"class":467},"resetTime",[269,618,493],{"class":460},[269,620,621],{"class":339},"*",[269,623,624],{"class":278}," 1000",[269,626,493],{"class":460},[269,628,629],{"class":339},"-",[269,631,632],{"class":467}," Date",[269,634,541],{"class":339},[269,636,637],{"class":420},"now",[269,639,640],{"class":460},"()\n",[269,642,644,647,650,652,655,657,660,662,664,666,668,670],{"class":271,"line":643},9,[269,645,646],{"class":339},"        :",[269,648,649],{"class":467}," Math",[269,651,541],{"class":339},[269,653,654],{"class":420},"pow",[269,656,424],{"class":460},[269,658,659],{"class":278},"2",[269,661,431],{"class":339},[269,663,468],{"class":467},[269,665,493],{"class":460},[269,667,621],{"class":339},[269,669,624],{"class":278},[269,671,673],{"class":672},"sHwdD"," \u002F\u002F Exponential backoff fallback\n",[269,675,677],{"class":271,"line":676},10,[269,678,528],{"emptyLinePlaceholder":527},[269,680,682,685,687,690,692,695,698,701,704,706,709,712,715,717,719,722,725,727],{"class":271,"line":681},11,[269,683,684],{"class":467},"      console",[269,686,541],{"class":339},[269,688,689],{"class":420},"log",[269,691,424],{"class":460},[269,693,694],{"class":339},"`",[269,696,697],{"class":282},"Rate limited. Retrying in ",[269,699,700],{"class":339},"${",[269,702,703],{"class":467},"Math",[269,705,541],{"class":339},[269,707,708],{"class":420},"ceil",[269,710,711],{"class":467},"(waitMs ",[269,713,714],{"class":339},"\u002F",[269,716,624],{"class":278},[269,718,448],{"class":467},[269,720,721],{"class":339},"}",[269,723,724],{"class":282},"s...",[269,726,694],{"class":339},[269,728,522],{"class":460},[269,730,732,735,738,741,743,745,748,750,753,756,758,760,762,764,766,769,771,774,776,778],{"class":271,"line":731},12,[269,733,734],{"class":456},"      await",[269,736,737],{"class":339}," new",[269,739,740],{"class":274}," Promise",[269,742,424],{"class":460},[269,744,424],{"class":339},[269,746,747],{"class":427},"resolve",[269,749,448],{"class":339},[269,751,752],{"class":348}," =>",[269,754,755],{"class":420}," setTimeout",[269,757,424],{"class":460},[269,759,747],{"class":467},[269,761,431],{"class":339},[269,763,649],{"class":467},[269,765,541],{"class":339},[269,767,768],{"class":420},"max",[269,770,424],{"class":460},[269,772,773],{"class":467},"waitMs",[269,775,431],{"class":339},[269,777,624],{"class":278},[269,779,780],{"class":460},")))\n",[269,782,784],{"class":271,"line":783},13,[269,785,786],{"class":456},"      continue\n",[269,788,790],{"class":271,"line":789},14,[269,791,792],{"class":339},"    }\n",[269,794,796],{"class":271,"line":795},15,[269,797,528],{"emptyLinePlaceholder":527},[269,799,801,804],{"class":271,"line":800},16,[269,802,803],{"class":456},"    return",[269,805,806],{"class":467}," response\n",[269,808,810],{"class":271,"line":809},17,[269,811,812],{"class":339},"  }\n",[269,814,816],{"class":271,"line":815},18,[269,817,528],{"emptyLinePlaceholder":527},[269,819,821,824,826,829,831,833,836,838],{"class":271,"line":820},19,[269,822,823],{"class":456},"  throw",[269,825,737],{"class":339},[269,827,828],{"class":420}," Error",[269,830,424],{"class":460},[269,832,581],{"class":339},[269,834,835],{"class":282},"Max retries exceeded due to rate limiting",[269,837,581],{"class":339},[269,839,522],{"class":460},[269,841,843],{"class":271,"line":842},20,[269,844,385],{"class":339},[400,846,848],{"label":847},"Python",[260,849,853],{"className":850,"code":851,"language":852,"meta":265,"style":265},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import time\nimport requests\n\ndef fetch_with_retry(url, headers, params=None, max_retries=3):\n    for attempt in range(max_retries + 1):\n        response = requests.get(url, headers=headers, params=params)\n\n        if response.status_code == 429:\n            reset_time = response.headers.get('X-RateLimit-Reset')\n            if reset_time:\n                wait_seconds = max(int(reset_time) - int(time.time()), 1)\n            else:\n                wait_seconds = 2 ** attempt  # Exponential backoff\n\n            print(f'Rate limited. Retrying in {wait_seconds}s...')\n            time.sleep(wait_seconds)\n            continue\n\n        return response\n\n    raise Exception('Max retries exceeded due to rate limiting')\n","python",[229,854,855,860,865,869,874,879,884,888,893,898,903,908,913,918,922,927,932,937,941,946,950],{"__ignoreMap":265},[269,856,857],{"class":271,"line":60},[269,858,859],{},"import time\n",[269,861,862],{"class":271,"line":81},[269,863,864],{},"import requests\n",[269,866,867],{"class":271,"line":38},[269,868,528],{"emptyLinePlaceholder":527},[269,870,871],{"class":271,"line":8},[269,872,873],{},"def fetch_with_retry(url, headers, params=None, max_retries=3):\n",[269,875,876],{"class":271,"line":310},[269,877,878],{},"    for attempt in range(max_retries + 1):\n",[269,880,881],{"class":271,"line":556},[269,882,883],{},"        response = requests.get(url, headers=headers, params=params)\n",[269,885,886],{"class":271,"line":590},[269,887,528],{"emptyLinePlaceholder":527},[269,889,890],{"class":271,"line":603},[269,891,892],{},"        if response.status_code == 429:\n",[269,894,895],{"class":271,"line":643},[269,896,897],{},"            reset_time = response.headers.get('X-RateLimit-Reset')\n",[269,899,900],{"class":271,"line":676},[269,901,902],{},"            if reset_time:\n",[269,904,905],{"class":271,"line":681},[269,906,907],{},"                wait_seconds = max(int(reset_time) - int(time.time()), 1)\n",[269,909,910],{"class":271,"line":731},[269,911,912],{},"            else:\n",[269,914,915],{"class":271,"line":783},[269,916,917],{},"                wait_seconds = 2 ** attempt  # Exponential backoff\n",[269,919,920],{"class":271,"line":789},[269,921,528],{"emptyLinePlaceholder":527},[269,923,924],{"class":271,"line":795},[269,925,926],{},"            print(f'Rate limited. Retrying in {wait_seconds}s...')\n",[269,928,929],{"class":271,"line":800},[269,930,931],{},"            time.sleep(wait_seconds)\n",[269,933,934],{"class":271,"line":809},[269,935,936],{},"            continue\n",[269,938,939],{"class":271,"line":815},[269,940,528],{"emptyLinePlaceholder":527},[269,942,943],{"class":271,"line":820},[269,944,945],{},"        return response\n",[269,947,948],{"class":271,"line":842},[269,949,528],{"emptyLinePlaceholder":527},[269,951,953],{"class":271,"line":952},21,[269,954,955],{},"    raise Exception('Max retries exceeded due to rate limiting')\n",[96,957,959],{"id":958},"best-practices","Best Practices",[961,962,963,969,977,984,988],"field-group",{},[964,965,968],"field",{"name":966,"type":967},"Cache Aggressively","recommended","Cache API responses on your end whenever possible. Categories, for example, change rarely and can be cached for hours. This reduces your request count significantly.",[964,970,972,973,976],{"name":971,"type":967},"Use Pagination Wisely","Request only the data you need. Use the ",[229,974,975],{},"limit"," parameter to fetch smaller pages if you don't need all results at once.",[964,978,980,981,983],{"name":979,"type":967},"Monitor Your Usage","Check the ",[229,982,241],{}," header regularly. If you're consistently approaching your limit, consider upgrading your tier.",[964,985,987],{"name":986,"type":967},"Implement Exponential Backoff","When retrying after a rate limit error, use exponential backoff to avoid hammering the API with retry requests.",[964,989,991],{"name":990,"type":967},"Batch Where Possible","If you need data for multiple quotes, use the list endpoint with filters instead of making individual requests for each quote.",[96,993,995],{"id":994},"monitoring-your-usage","Monitoring Your Usage",[92,997,998,999,1006],{},"You can monitor your API usage in real time from the ",[1000,1001,1005],"a",{"href":1002,"rel":1003},"https:\u002F\u002Fquotegallery.nl\u002Fdashboard\u002Fapi-keys",[1004],"nofollow","Quote Gallery Dashboard",". The dashboard shows:",[1008,1009,1010,1017,1023],"ul",{},[1011,1012,1013,1016],"li",{},[131,1014,1015],{},"Current usage"," — requests made in the current window",[1011,1018,1019,1022],{},[131,1020,1021],{},"Historical usage"," — charts showing your usage over time",[1011,1024,1025,1028],{},[131,1026,1027],{},"Tier information"," — your current tier and rate limit",[96,1030,1032],{"id":1031},"upgrading-your-tier","Upgrading Your Tier",[92,1034,1035],{},"To upgrade your API tier:",[1037,1038,1039,1047,1055,1058],"ol",{},[1011,1040,1041,1042],{},"Sign in to your ",[1000,1043,1046],{"href":1044,"rel":1045},"https:\u002F\u002Fquotegallery.nl\u002Fauth\u002Flogin",[1004],"Quote Gallery account",[1011,1048,1049,1050],{},"Navigate to ",[1000,1051,1054],{"href":1052,"rel":1053},"https:\u002F\u002Fquotegallery.nl\u002Fdocs\u002Fapi\u002Fpricing",[1004],"API Pricing",[1011,1056,1057],{},"Select the tier that fits your needs",[1011,1059,1060],{},"Complete the checkout process",[92,1062,1063],{},"Your new rate limit takes effect immediately after payment.",[203,1065,1067],{"id":1066},"bundle-discount","Bundle Discount",[92,1069,1070,1071,1073,1074,1077],{},"If you already have a ",[131,1072,181],{}," for the Quote Gallery website, you receive a ",[131,1075,1076],{},"25% discount"," on all paid API tiers:",[101,1079,1080,1092],{},[104,1081,1082],{},[107,1083,1084,1086,1089],{},[110,1085,112],{},[110,1087,1088],{},"Regular Price",[110,1090,1091],{},"With Bundle Discount",[123,1093,1094,1105],{},[107,1095,1096,1100,1102],{},[128,1097,1098],{},[131,1099,148],{},[128,1101,154],{},[128,1103,1104],{},"€3.74\u002Fmo",[107,1106,1107,1111,1113],{},[128,1108,1109],{},[131,1110,164],{},[128,1112,170],{},[128,1114,1115],{},"€11.24\u002Fmo",[92,1117,1118],{},"The discount is applied automatically at checkout when you're logged in with an active Supporter subscription.",[96,1120,1122],{"id":1121},"cancellation","Cancellation",[92,1124,1125],{},"You can cancel your API subscription at any time from your dashboard. When cancelled:",[1008,1127,1128,1135,1138],{},[1011,1129,1130,1131,1134],{},"Your access ",[131,1132,1133],{},"immediately reverts"," to the Free tier (100 requests\u002Fhour)",[1011,1136,1137],{},"There are no long-term commitments or cancellation fees",[1011,1139,1140],{},"Your API key remains valid — only the rate limit changes",[96,1142,1144],{"id":1143},"faq","FAQ",[203,1146,1148],{"id":1147},"what-counts-as-a-request","What counts as a request?",[92,1150,1151,1152,1155],{},"Every API call counts as one request, regardless of the endpoint or whether it returns data or an error (except ",[229,1153,1154],{},"429"," responses, which are not counted against your limit).",[203,1157,1159],{"id":1158},"can-i-get-a-higher-rate-limit","Can I get a higher rate limit?",[92,1161,1162,1163,1167],{},"For enterprise needs exceeding 2,000 requests\u002Fhour, please ",[1000,1164,1166],{"href":1165},"mailto:support@quotegallery.nl","contact us"," to discuss custom plans.",[203,1169,1171],{"id":1170},"do-rate-limits-apply-to-all-endpoints-equally","Do rate limits apply to all endpoints equally?",[92,1173,1174],{},"Yes, all endpoints share the same rate limit pool for your API key. There are no per-endpoint limits.",[203,1176,1178],{"id":1177},"what-happens-if-i-need-a-temporary-burst","What happens if I need a temporary burst?",[92,1180,1181],{},"The rate limit is based on a rolling hour window. If you need occasional bursts, consider upgrading to a higher tier. Contact us for enterprise solutions with burst allowances.",[1183,1184,1185],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":265,"searchDepth":81,"depth":81,"links":1187},[1188,1189,1193,1196,1197,1198,1201,1202],{"id":98,"depth":81,"text":99},{"id":189,"depth":81,"text":190,"children":1190},[1191,1192],{"id":205,"depth":38,"text":206},{"id":257,"depth":38,"text":258},{"id":319,"depth":81,"text":320,"children":1194},[1195],{"id":391,"depth":38,"text":392},{"id":958,"depth":81,"text":959},{"id":994,"depth":81,"text":995},{"id":1031,"depth":81,"text":1032,"children":1199},[1200],{"id":1066,"depth":38,"text":1067},{"id":1121,"depth":81,"text":1122},{"id":1143,"depth":81,"text":1144,"children":1203},[1204,1205,1206,1207],{"id":1147,"depth":38,"text":1148},{"id":1158,"depth":38,"text":1159},{"id":1170,"depth":38,"text":1171},{"id":1177,"depth":38,"text":1178},"Understand API rate limits, tiers, and pricing for the Quote Gallery API.","md",null,{"icon":1212},"i-lucide-gauge",{"title":67,"description":1208},"JJNZsYdYMw4MQj1SwAb55bK7GuNtaw39s7nBqsCGP2c",[1216,1217],{"title":41,"path":58,"stem":59,"description":1210,"order":60,"children":-1},{"title":71,"path":72,"stem":73,"description":1218,"children":-1},"Learn about API error codes, response formats, and best practices for handling errors gracefully.",1774214573889]