[{"data":1,"prerenderedAt":664},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-authentication":82,"-docs-getting-started-authentication-surround":659},[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":50,"body":84,"description":652,"extension":653,"links":654,"meta":655,"navigation":305,"path":51,"seo":657,"stem":52,"__hash__":658},"docs\u002Fdocs\u002Fgetting-started\u002F2.authentication.md",{"type":85,"value":86,"toc":639},"minimark",[87,91,100,105,141,146,150,158,198,203,330,334,385,389,406,410,413,483,487,538,542,545,600,612,618,622,635],[88,89,50],"h1",{"id":90},"authentication",[92,93,94,95,99],"p",{},"The Quote Gallery API uses ",[96,97,98],"strong",{},"API keys"," to authenticate requests. Every request to the API must include a valid API key in the request headers.",[101,102,104],"h2",{"id":103},"getting-your-api-key","Getting Your API Key",[106,107,108,122,132,138],"ol",{},[109,110,111,114,115],"li",{},[96,112,113],{},"Sign in"," to your ",[116,117,121],"a",{"href":118,"rel":119},"https:\u002F\u002Fquotegallery.nl\u002Fauth\u002Flogin",[120],"nofollow","Quote Gallery account",[109,123,124,125,128,129],{},"Navigate to your ",[96,126,127],{},"Dashboard"," → ",[96,130,131],{},"API Keys",[109,133,134,135],{},"Click ",[96,136,137],{},"Generate New Key",[109,139,140],{},"Copy your API key and store it securely",[142,143,145],"callout",{"type":144},"warning","Your API key is shown only once when created. Store it in a secure location like an environment variable or a secrets manager. If you lose it, you'll need to generate a new one.",[101,147,149],{"id":148},"using-your-api-key","Using Your API Key",[92,151,152,153,157],{},"Include your API key in the ",[154,155,156],"code",{},"X-API-Key"," header with every request:",[159,160,165],"pre",{"className":161,"code":162,"language":163,"meta":164,"style":164},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -H \"X-API-Key: your_api_key_here\" \\\n  https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes\n","bash","",[154,166,167,193],{"__ignoreMap":164},[168,169,171,175,179,183,186,189],"span",{"class":170,"line":60},"line",[168,172,174],{"class":173},"sBMFI","curl",[168,176,178],{"class":177},"sfazB"," -H",[168,180,182],{"class":181},"sMK4o"," \"",[168,184,185],{"class":177},"X-API-Key: your_api_key_here",[168,187,188],{"class":181},"\"",[168,190,192],{"class":191},"sTEyZ"," \\\n",[168,194,195],{"class":170,"line":81},[168,196,197],{"class":177},"  https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes\n",[199,200,202],"h3",{"id":201},"example-in-javascript","Example in JavaScript",[159,204,208],{"className":205,"code":206,"language":207,"meta":164,"style":164},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const response = await fetch('https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes', {\n  headers: {\n    'X-API-Key': process.env.QUOTE_GALLERY_API_KEY,\n  },\n})\n\nconst data = await response.json()\n","js",[154,209,210,247,258,286,291,300,307],{"__ignoreMap":164},[168,211,212,216,219,222,226,230,233,236,239,241,244],{"class":170,"line":60},[168,213,215],{"class":214},"spNyl","const",[168,217,218],{"class":191}," response ",[168,220,221],{"class":181},"=",[168,223,225],{"class":224},"s7zQu"," await",[168,227,229],{"class":228},"s2Zo4"," fetch",[168,231,232],{"class":191},"(",[168,234,235],{"class":181},"'",[168,237,238],{"class":177},"https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes",[168,240,235],{"class":181},[168,242,243],{"class":181},",",[168,245,246],{"class":181}," {\n",[168,248,249,253,256],{"class":170,"line":81},[168,250,252],{"class":251},"swJcz","  headers",[168,254,255],{"class":181},":",[168,257,246],{"class":181},[168,259,260,263,265,267,269,272,275,278,280,283],{"class":170,"line":38},[168,261,262],{"class":181},"    '",[168,264,156],{"class":251},[168,266,235],{"class":181},[168,268,255],{"class":181},[168,270,271],{"class":191}," process",[168,273,274],{"class":181},".",[168,276,277],{"class":191},"env",[168,279,274],{"class":181},[168,281,282],{"class":191},"QUOTE_GALLERY_API_KEY",[168,284,285],{"class":181},",\n",[168,287,288],{"class":170,"line":8},[168,289,290],{"class":181},"  },\n",[168,292,294,297],{"class":170,"line":293},5,[168,295,296],{"class":181},"}",[168,298,299],{"class":191},")\n",[168,301,303],{"class":170,"line":302},6,[168,304,306],{"emptyLinePlaceholder":305},true,"\n",[168,308,310,312,315,317,319,322,324,327],{"class":170,"line":309},7,[168,311,215],{"class":214},[168,313,314],{"class":191}," data ",[168,316,221],{"class":181},[168,318,225],{"class":224},[168,320,321],{"class":191}," response",[168,323,274],{"class":181},[168,325,326],{"class":228},"json",[168,328,329],{"class":191},"()\n",[199,331,333],{"id":332},"example-in-python","Example in Python",[159,335,339],{"className":336,"code":337,"language":338,"meta":164,"style":164},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import requests\nimport os\n\nresponse = requests.get(\n    'https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes',\n    headers={'X-API-Key': os.environ['QUOTE_GALLERY_API_KEY']}\n)\n\ndata = response.json()\n","python",[154,340,341,346,351,355,360,365,370,374,379],{"__ignoreMap":164},[168,342,343],{"class":170,"line":60},[168,344,345],{},"import requests\n",[168,347,348],{"class":170,"line":81},[168,349,350],{},"import os\n",[168,352,353],{"class":170,"line":38},[168,354,306],{"emptyLinePlaceholder":305},[168,356,357],{"class":170,"line":8},[168,358,359],{},"response = requests.get(\n",[168,361,362],{"class":170,"line":293},[168,363,364],{},"    'https:\u002F\u002Fquotegallery.nl\u002Fapi\u002Fv1\u002Fquotes',\n",[168,366,367],{"class":170,"line":302},[168,368,369],{},"    headers={'X-API-Key': os.environ['QUOTE_GALLERY_API_KEY']}\n",[168,371,372],{"class":170,"line":309},[168,373,299],{},[168,375,377],{"class":170,"line":376},8,[168,378,306],{"emptyLinePlaceholder":305},[168,380,382],{"class":170,"line":381},9,[168,383,384],{},"data = response.json()\n",[101,386,388],{"id":387},"security-best-practices","Security Best Practices",[390,391,392,398,402],"field-group",{},[393,394,397],"field",{"name":395,"type":396},"Environment Variables","recommended","Store your API key in environment variables, never hardcode it in your source code.",[393,399,401],{"name":400,"type":396},"Server-side Only","Only use your API key in server-side code. Never expose it in client-side JavaScript or mobile app bundles.",[393,403,405],{"name":404,"type":396},"Key Rotation","Rotate your API keys periodically. You can generate a new key and revoke the old one from your dashboard.",[101,407,409],{"id":408},"error-responses","Error Responses",[92,411,412],{},"If authentication fails, the API will return one of the following errors:",[414,415,416,432],"table",{},[417,418,419],"thead",{},[420,421,422,426,429],"tr",{},[423,424,425],"th",{},"Status Code",[423,427,428],{},"Message",[423,430,431],{},"Description",[433,434,435,454,468],"tbody",{},[420,436,437,443,448],{},[438,439,440],"td",{},[154,441,442],{},"401",[438,444,445],{},[154,446,447],{},"Missing API key",[438,449,450,451,453],{},"No ",[154,452,156],{}," header was provided in the request.",[420,455,456,460,465],{},[438,457,458],{},[154,459,442],{},[438,461,462],{},[154,463,464],{},"Invalid API key",[438,466,467],{},"The provided API key is not valid or has been revoked.",[420,469,470,475,480],{},[438,471,472],{},[154,473,474],{},"429",[438,476,477],{},[154,478,479],{},"Rate limit exceeded",[438,481,482],{},"You've exceeded the rate limit for your current tier.",[199,484,486],{"id":485},"example-error-response","Example Error Response",[159,488,491],{"className":489,"code":490,"language":326,"meta":164,"style":164},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"error\": \"Invalid API key\",\n  \"status\": 401\n}\n",[154,492,493,498,518,533],{"__ignoreMap":164},[168,494,495],{"class":170,"line":60},[168,496,497],{"class":181},"{\n",[168,499,500,503,506,508,510,512,514,516],{"class":170,"line":81},[168,501,502],{"class":181},"  \"",[168,504,505],{"class":214},"error",[168,507,188],{"class":181},[168,509,255],{"class":181},[168,511,182],{"class":181},[168,513,464],{"class":177},[168,515,188],{"class":181},[168,517,285],{"class":181},[168,519,520,522,525,527,529],{"class":170,"line":38},[168,521,502],{"class":181},[168,523,524],{"class":214},"status",[168,526,188],{"class":181},[168,528,255],{"class":181},[168,530,532],{"class":531},"sbssI"," 401\n",[168,534,535],{"class":170,"line":8},[168,536,537],{"class":181},"}\n",[101,539,541],{"id":540},"api-tiers","API Tiers",[92,543,544],{},"Your API key is associated with a tier that determines your rate limits:",[414,546,547,560],{},[417,548,549],{},[420,550,551,554,557],{},[423,552,553],{},"Tier",[423,555,556],{},"Requests \u002F Hour",[423,558,559],{},"Price",[433,561,562,574,587],{},[420,563,564,569,572],{},[438,565,566],{},[96,567,568],{},"Free",[438,570,571],{},"100",[438,573,568],{},[420,575,576,581,584],{},[438,577,578],{},[96,579,580],{},"Hobby",[438,582,583],{},"500",[438,585,586],{},"€4.99\u002Fmo",[420,588,589,594,597],{},[438,590,591],{},[96,592,593],{},"Premium",[438,595,596],{},"2,000",[438,598,599],{},"€14.99\u002Fmo",[142,601,603,604,607,608,611],{"type":602},"tip","If you have an active ",[96,605,606],{},"Supporter subscription"," for the Quote Gallery website, you automatically receive a ",[96,609,610],{},"25% discount"," on all paid API tiers.",[92,613,614,615,617],{},"For more details on rate limits and pricing, see the ",[116,616,67],{"href":68}," guide.",[101,619,621],{"id":620},"whats-next","What's Next?",[623,624,625,630],"card-group",{},[626,627,629],"card",{"icon":628,"title":54,"to":55},"i-lucide-zap","Make your first API call in under 5 minutes.",[626,631,634],{"icon":632,"title":633,"to":16},"i-lucide-code","API Reference (v1)","Explore all available endpoints.",[636,637,638],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":164,"searchDepth":81,"depth":81,"links":640},[641,642,646,647,650,651],{"id":103,"depth":81,"text":104},{"id":148,"depth":81,"text":149,"children":643},[644,645],{"id":201,"depth":38,"text":202},{"id":332,"depth":38,"text":333},{"id":387,"depth":81,"text":388},{"id":408,"depth":81,"text":409,"children":648},[649],{"id":485,"depth":38,"text":486},{"id":540,"depth":81,"text":541},{"id":620,"depth":81,"text":621},"Learn how to authenticate with the Quote Gallery API using API keys.","md",null,{"icon":656},"i-lucide-key",{"title":50,"description":652},"b1ro6o2MyLFAAbzZw_xDkpvhwnHDiOgA2JEbiecQWzY",[660,662],{"title":46,"path":47,"stem":48,"description":661,"children":-1},"Learn about Quote Gallery, its features, and what you can build with the API.",{"title":54,"path":55,"stem":56,"description":663,"children":-1},"Make your first API call to the Quote Gallery API in under 5 minutes.",1774214573888]