[{"data":1,"prerenderedAt":2048},["ShallowReactive",2],{"doc-features\u002Fapi-keys":3,"content-query-sirM4mMvy5":4},null,{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"body":11,"_type":2042,"_id":2043,"_source":2044,"_file":2045,"_stem":2046,"_extension":2047},"\u002Fdocs\u002Ffeatures\u002Fapi-keys","features",false,"","API Keys","Generate and manage API keys for authentication",{"type":12,"children":13,"toc":2000},"root",[14,22,39,45,52,57,82,87,93,100,177,183,188,198,204,209,215,223,259,267,303,311,347,355,391,397,440,448,456,462,483,535,573,644,771,777,799,805,810,841,847,853,903,909,1046,1089,1095,1100,1108,1113,1141,1147,1153,1158,1189,1195,1200,1226,1236,1242,1247,1278,1288,1294,1299,1330,1340,1346,1352,1395,1401,1409,1463,1471,1504,1543,1549,1554,1588,1594,1600,1634,1640,1648,1653,1680,1686,1694,1699,1722,1728,1733,1751,1761,1767,1773,1778,1786,1791,1799,1805,1810,1958,1964,1994],{"type":15,"tag":16,"props":17,"children":19},"element","h1",{"id":18},"api-keys",[20],{"type":21,"value":9},"text",{"type":15,"tag":23,"props":24,"children":29},"div",{"className":25,"ariaHidden":28},[26,27],"docs-page-hero","docs-page-hero--clay","true",[30,32],{"type":21,"value":31},"\n  ",{"type":15,"tag":33,"props":34,"children":38},"img",{"src":35,"alt":8,"width":36,"height":37},"\u002Fimages\u002Fdocs-illustrations\u002Fapi-keys.svg",128,72,[],{"type":15,"tag":40,"props":41,"children":42},"p",{},[43],{"type":21,"value":44},"Create and manage API keys to authenticate your applications and integrations with CredVault.",{"type":15,"tag":46,"props":47,"children":49},"h2",{"id":48},"what-are-api-keys",[50],{"type":21,"value":51},"What are API Keys?",{"type":15,"tag":40,"props":53,"children":54},{},[55],{"type":21,"value":56},"API keys are secure credentials that allow:",{"type":15,"tag":58,"props":59,"children":60},"ul",{},[61,67,72,77],{"type":15,"tag":62,"props":63,"children":64},"li",{},[65],{"type":21,"value":66},"Your applications to connect to CredVault",{"type":15,"tag":62,"props":68,"children":69},{},[70],{"type":21,"value":71},"External tools to integrate with your platform",{"type":15,"tag":62,"props":73,"children":74},{},[75],{"type":21,"value":76},"Automated scripts to access your data",{"type":15,"tag":62,"props":78,"children":79},{},[80],{"type":21,"value":81},"Team members to use the API programmatically",{"type":15,"tag":40,"props":83,"children":84},{},[85],{"type":21,"value":86},"An API key proves \"I am authorized to access this\" without sharing passwords.",{"type":15,"tag":46,"props":88,"children":90},{"id":89},"creating-an-api-key",[91],{"type":21,"value":92},"Creating an API Key",{"type":15,"tag":94,"props":95,"children":97},"h3",{"id":96},"generate-new-key",[98],{"type":21,"value":99},"Generate New Key",{"type":15,"tag":101,"props":102,"children":103},"ol",{},[104,116,125,130,135,168],{"type":15,"tag":62,"props":105,"children":106},{},[107,109,114],{"type":21,"value":108},"Click ",{"type":15,"tag":110,"props":111,"children":112},"strong",{},[113],{"type":21,"value":9},{"type":21,"value":115}," in sidebar",{"type":15,"tag":62,"props":117,"children":118},{},[119,120],{"type":21,"value":108},{"type":15,"tag":110,"props":121,"children":122},{},[123],{"type":21,"value":124},"Create New Key",{"type":15,"tag":62,"props":126,"children":127},{},[128],{"type":21,"value":129},"Give it a name: \"Mobile App\", \"Data Pipeline\", \"AI Integration\"",{"type":15,"tag":62,"props":131,"children":132},{},[133],{"type":21,"value":134},"Choose permissions (see \"Scopes\" below)",{"type":15,"tag":62,"props":136,"children":137},{},[138,140],{"type":21,"value":139},"Set expiration (optional):\n",{"type":15,"tag":58,"props":141,"children":142},{},[143,148,153,158,163],{"type":15,"tag":62,"props":144,"children":145},{},[146],{"type":21,"value":147},"Never expires",{"type":15,"tag":62,"props":149,"children":150},{},[151],{"type":21,"value":152},"30 days",{"type":15,"tag":62,"props":154,"children":155},{},[156],{"type":21,"value":157},"90 days",{"type":15,"tag":62,"props":159,"children":160},{},[161],{"type":21,"value":162},"1 year",{"type":15,"tag":62,"props":164,"children":165},{},[166],{"type":21,"value":167},"Custom date",{"type":15,"tag":62,"props":169,"children":170},{},[171,172],{"type":21,"value":108},{"type":15,"tag":110,"props":173,"children":174},{},[175],{"type":21,"value":176},"Generate",{"type":15,"tag":94,"props":178,"children":180},{"id":179},"key-information",[181],{"type":21,"value":182},"Key Information",{"type":15,"tag":40,"props":184,"children":185},{},[186],{"type":21,"value":187},"Your key shows:",{"type":15,"tag":189,"props":190,"children":192},"pre",{"code":191},"Key Name: Production API Key\nCreated: 2024-06-12 10:30 UTC\nStatus: Active\nPermissions: Read databases, Run queries\nExpires: 2025-06-12\nLast Used: 2024-06-12 14:22 UTC\nLast Rotated: Never\n",[193],{"type":15,"tag":194,"props":195,"children":196},"code",{"__ignoreMap":8},[197],{"type":21,"value":191},{"type":15,"tag":46,"props":199,"children":201},{"id":200},"understanding-scopes",[202],{"type":21,"value":203},"Understanding Scopes",{"type":15,"tag":40,"props":205,"children":206},{},[207],{"type":21,"value":208},"Scopes limit what each key can do. Choose carefully:",{"type":15,"tag":94,"props":210,"children":212},{"id":211},"available-scopes",[213],{"type":21,"value":214},"Available Scopes",{"type":15,"tag":40,"props":216,"children":217},{},[218],{"type":15,"tag":110,"props":219,"children":220},{},[221],{"type":21,"value":222},"Read",{"type":15,"tag":58,"props":224,"children":225},{},[226,237,248],{"type":15,"tag":62,"props":227,"children":228},{},[229,235],{"type":15,"tag":194,"props":230,"children":232},{"className":231},[],[233],{"type":21,"value":234},"database:read",{"type":21,"value":236}," - Read data from databases",{"type":15,"tag":62,"props":238,"children":239},{},[240,246],{"type":15,"tag":194,"props":241,"children":243},{"className":242},[],[244],{"type":21,"value":245},"metadata:read",{"type":21,"value":247}," - View data catalog",{"type":15,"tag":62,"props":249,"children":250},{},[251,257],{"type":15,"tag":194,"props":252,"children":254},{"className":253},[],[255],{"type":21,"value":256},"logs:read",{"type":21,"value":258}," - View activity logs",{"type":15,"tag":40,"props":260,"children":261},{},[262],{"type":15,"tag":110,"props":263,"children":264},{},[265],{"type":21,"value":266},"Write",{"type":15,"tag":58,"props":268,"children":269},{},[270,281,292],{"type":15,"tag":62,"props":271,"children":272},{},[273,279],{"type":15,"tag":194,"props":274,"children":276},{"className":275},[],[277],{"type":21,"value":278},"database:write",{"type":21,"value":280}," - Insert\u002Fupdate\u002Fdelete data",{"type":15,"tag":62,"props":282,"children":283},{},[284,290],{"type":15,"tag":194,"props":285,"children":287},{"className":286},[],[288],{"type":21,"value":289},"notebook:create",{"type":21,"value":291}," - Create new notebooks",{"type":15,"tag":62,"props":293,"children":294},{},[295,301],{"type":15,"tag":194,"props":296,"children":298},{"className":297},[],[299],{"type":21,"value":300},"experiment:write",{"type":21,"value":302}," - Create ML experiments",{"type":15,"tag":40,"props":304,"children":305},{},[306],{"type":15,"tag":110,"props":307,"children":308},{},[309],{"type":21,"value":310},"Execute",{"type":15,"tag":58,"props":312,"children":313},{},[314,325,336],{"type":15,"tag":62,"props":315,"children":316},{},[317,323],{"type":15,"tag":194,"props":318,"children":320},{"className":319},[],[321],{"type":21,"value":322},"query:execute",{"type":21,"value":324}," - Run queries",{"type":15,"tag":62,"props":326,"children":327},{},[328,334],{"type":15,"tag":194,"props":329,"children":331},{"className":330},[],[332],{"type":21,"value":333},"function:invoke",{"type":21,"value":335}," - Call serverless functions",{"type":15,"tag":62,"props":337,"children":338},{},[339,345],{"type":15,"tag":194,"props":340,"children":342},{"className":341},[],[343],{"type":21,"value":344},"orchestration:execute",{"type":21,"value":346}," - Trigger pipelines",{"type":15,"tag":40,"props":348,"children":349},{},[350],{"type":15,"tag":110,"props":351,"children":352},{},[353],{"type":21,"value":354},"Admin",{"type":15,"tag":58,"props":356,"children":357},{},[358,369,380],{"type":15,"tag":62,"props":359,"children":360},{},[361,367],{"type":15,"tag":194,"props":362,"children":364},{"className":363},[],[365],{"type":21,"value":366},"team:manage",{"type":21,"value":368}," - Add\u002Fremove team members",{"type":15,"tag":62,"props":370,"children":371},{},[372,378],{"type":15,"tag":194,"props":373,"children":375},{"className":374},[],[376],{"type":21,"value":377},"settings:modify",{"type":21,"value":379}," - Change configuration",{"type":15,"tag":62,"props":381,"children":382},{},[383,389],{"type":15,"tag":194,"props":384,"children":386},{"className":385},[],[387],{"type":21,"value":388},"billing:manage",{"type":21,"value":390}," - Modify billing",{"type":15,"tag":94,"props":392,"children":394},{"id":393},"best-practices-for-scopes",[395],{"type":21,"value":396},"Best Practices for Scopes",{"type":15,"tag":58,"props":398,"children":399},{},[400,410,420,430],{"type":15,"tag":62,"props":401,"children":402},{},[403,408],{"type":15,"tag":110,"props":404,"children":405},{},[406],{"type":21,"value":407},"Principle of least privilege",{"type":21,"value":409}," - Only grant needed permissions",{"type":15,"tag":62,"props":411,"children":412},{},[413,418],{"type":15,"tag":110,"props":414,"children":415},{},[416],{"type":21,"value":417},"Read-only keys",{"type":21,"value":419}," - For data analysis and dashboards",{"type":15,"tag":62,"props":421,"children":422},{},[423,428],{"type":15,"tag":110,"props":424,"children":425},{},[426],{"type":21,"value":427},"Write keys",{"type":21,"value":429}," - Only for data ingestion",{"type":15,"tag":62,"props":431,"children":432},{},[433,438],{"type":15,"tag":110,"props":434,"children":435},{},[436],{"type":21,"value":437},"Separate keys",{"type":21,"value":439}," - Different key for each application",{"type":15,"tag":40,"props":441,"children":442},{},[443],{"type":15,"tag":110,"props":444,"children":445},{},[446],{"type":21,"value":447},"Example scopes:",{"type":15,"tag":189,"props":449,"children":451},{"code":450},"Mobile app: database:read, notebook:read\nData pipeline: database:write, query:execute\nPublic dashboard: database:read only\nAdmin tool: all permissions\n",[452],{"type":15,"tag":194,"props":453,"children":454},{"__ignoreMap":8},[455],{"type":21,"value":450},{"type":15,"tag":46,"props":457,"children":459},{"id":458},"using-your-api-key",[460],{"type":21,"value":461},"Using Your API Key",{"type":15,"tag":40,"props":463,"children":464},{},[465,467,473,475,481],{"type":21,"value":466},"Send your key on every request. Prefer ",{"type":15,"tag":194,"props":468,"children":470},{"className":469},[],[471],{"type":21,"value":472},"X-API-Key",{"type":21,"value":474},". Bearer form also works when the token starts with ",{"type":15,"tag":194,"props":476,"children":478},{"className":477},[],[479],{"type":21,"value":480},"cvk_",{"type":21,"value":482},".",{"type":15,"tag":189,"props":484,"children":488},{"code":485,"language":486,"meta":8,"className":487,"style":8},"curl -sS https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers \\\n  -H \"X-API-Key: cvk_YOUR_KEY_HERE\"\n","bash","language-bash shiki shiki-themes github-dark",[489],{"type":15,"tag":194,"props":490,"children":491},{"__ignoreMap":8},[492,521],{"type":15,"tag":493,"props":494,"children":497},"span",{"class":495,"line":496},"line",1,[498,504,510,516],{"type":15,"tag":493,"props":499,"children":501},{"style":500},"--shiki-default:#B392F0",[502],{"type":21,"value":503},"curl",{"type":15,"tag":493,"props":505,"children":507},{"style":506},"--shiki-default:#79B8FF",[508],{"type":21,"value":509}," -sS",{"type":15,"tag":493,"props":511,"children":513},{"style":512},"--shiki-default:#9ECBFF",[514],{"type":21,"value":515}," https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers",{"type":15,"tag":493,"props":517,"children":518},{"style":506},[519],{"type":21,"value":520}," \\\n",{"type":15,"tag":493,"props":522,"children":524},{"class":495,"line":523},2,[525,530],{"type":15,"tag":493,"props":526,"children":527},{"style":506},[528],{"type":21,"value":529},"  -H",{"type":15,"tag":493,"props":531,"children":532},{"style":512},[533],{"type":21,"value":534}," \"X-API-Key: cvk_YOUR_KEY_HERE\"\n",{"type":15,"tag":189,"props":536,"children":538},{"code":537,"language":486,"meta":8,"className":487,"style":8},"curl -sS https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers \\\n  -H \"Authorization: Bearer cvk_YOUR_KEY_HERE\"\n",[539],{"type":15,"tag":194,"props":540,"children":541},{"__ignoreMap":8},[542,561],{"type":15,"tag":493,"props":543,"children":544},{"class":495,"line":496},[545,549,553,557],{"type":15,"tag":493,"props":546,"children":547},{"style":500},[548],{"type":21,"value":503},{"type":15,"tag":493,"props":550,"children":551},{"style":506},[552],{"type":21,"value":509},{"type":15,"tag":493,"props":554,"children":555},{"style":512},[556],{"type":21,"value":515},{"type":15,"tag":493,"props":558,"children":559},{"style":506},[560],{"type":21,"value":520},{"type":15,"tag":493,"props":562,"children":563},{"class":495,"line":523},[564,568],{"type":15,"tag":493,"props":565,"children":566},{"style":506},[567],{"type":21,"value":529},{"type":15,"tag":493,"props":569,"children":570},{"style":512},[571],{"type":21,"value":572}," \"Authorization: Bearer cvk_YOUR_KEY_HERE\"\n",{"type":15,"tag":189,"props":574,"children":578},{"code":575,"language":576,"meta":8,"className":577,"style":8},"import requests\n\nresp = requests.get(\n    \"https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers\",\n    headers={\"X-API-Key\": \"cvk_YOUR_KEY_HERE\"},\n)\nprint(resp.json())\n","python","language-python shiki shiki-themes github-dark",[579],{"type":15,"tag":194,"props":580,"children":581},{"__ignoreMap":8},[582,590,599,608,617,626,635],{"type":15,"tag":493,"props":583,"children":584},{"class":495,"line":496},[585],{"type":15,"tag":493,"props":586,"children":587},{},[588],{"type":21,"value":589},"import requests\n",{"type":15,"tag":493,"props":591,"children":592},{"class":495,"line":523},[593],{"type":15,"tag":493,"props":594,"children":596},{"emptyLinePlaceholder":595},true,[597],{"type":21,"value":598},"\n",{"type":15,"tag":493,"props":600,"children":602},{"class":495,"line":601},3,[603],{"type":15,"tag":493,"props":604,"children":605},{},[606],{"type":21,"value":607},"resp = requests.get(\n",{"type":15,"tag":493,"props":609,"children":611},{"class":495,"line":610},4,[612],{"type":15,"tag":493,"props":613,"children":614},{},[615],{"type":21,"value":616},"    \"https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers\",\n",{"type":15,"tag":493,"props":618,"children":620},{"class":495,"line":619},5,[621],{"type":15,"tag":493,"props":622,"children":623},{},[624],{"type":21,"value":625},"    headers={\"X-API-Key\": \"cvk_YOUR_KEY_HERE\"},\n",{"type":15,"tag":493,"props":627,"children":629},{"class":495,"line":628},6,[630],{"type":15,"tag":493,"props":631,"children":632},{},[633],{"type":21,"value":634},")\n",{"type":15,"tag":493,"props":636,"children":638},{"class":495,"line":637},7,[639],{"type":15,"tag":493,"props":640,"children":641},{},[642],{"type":21,"value":643},"print(resp.json())\n",{"type":15,"tag":189,"props":645,"children":649},{"code":646,"language":647,"meta":8,"className":648,"style":8},"const res = await fetch('https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers', {\n  headers: { 'X-API-Key': 'cvk_YOUR_KEY_HERE' }\n})\nconsole.log(await res.json())\n","javascript","language-javascript shiki shiki-themes github-dark",[650],{"type":15,"tag":194,"props":651,"children":652},{"__ignoreMap":8},[653,698,726,734],{"type":15,"tag":493,"props":654,"children":655},{"class":495,"line":496},[656,662,667,672,677,682,688,693],{"type":15,"tag":493,"props":657,"children":659},{"style":658},"--shiki-default:#F97583",[660],{"type":21,"value":661},"const",{"type":15,"tag":493,"props":663,"children":664},{"style":506},[665],{"type":21,"value":666}," res",{"type":15,"tag":493,"props":668,"children":669},{"style":658},[670],{"type":21,"value":671}," =",{"type":15,"tag":493,"props":673,"children":674},{"style":658},[675],{"type":21,"value":676}," await",{"type":15,"tag":493,"props":678,"children":679},{"style":500},[680],{"type":21,"value":681}," fetch",{"type":15,"tag":493,"props":683,"children":685},{"style":684},"--shiki-default:#E1E4E8",[686],{"type":21,"value":687},"(",{"type":15,"tag":493,"props":689,"children":690},{"style":512},[691],{"type":21,"value":692},"'https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers'",{"type":15,"tag":493,"props":694,"children":695},{"style":684},[696],{"type":21,"value":697},", {\n",{"type":15,"tag":493,"props":699,"children":700},{"class":495,"line":523},[701,706,711,716,721],{"type":15,"tag":493,"props":702,"children":703},{"style":684},[704],{"type":21,"value":705},"  headers: { ",{"type":15,"tag":493,"props":707,"children":708},{"style":512},[709],{"type":21,"value":710},"'X-API-Key'",{"type":15,"tag":493,"props":712,"children":713},{"style":684},[714],{"type":21,"value":715},": ",{"type":15,"tag":493,"props":717,"children":718},{"style":512},[719],{"type":21,"value":720},"'cvk_YOUR_KEY_HERE'",{"type":15,"tag":493,"props":722,"children":723},{"style":684},[724],{"type":21,"value":725}," }\n",{"type":15,"tag":493,"props":727,"children":728},{"class":495,"line":601},[729],{"type":15,"tag":493,"props":730,"children":731},{"style":684},[732],{"type":21,"value":733},"})\n",{"type":15,"tag":493,"props":735,"children":736},{"class":495,"line":610},[737,742,747,751,756,761,766],{"type":15,"tag":493,"props":738,"children":739},{"style":684},[740],{"type":21,"value":741},"console.",{"type":15,"tag":493,"props":743,"children":744},{"style":500},[745],{"type":21,"value":746},"log",{"type":15,"tag":493,"props":748,"children":749},{"style":684},[750],{"type":21,"value":687},{"type":15,"tag":493,"props":752,"children":753},{"style":658},[754],{"type":21,"value":755},"await",{"type":15,"tag":493,"props":757,"children":758},{"style":684},[759],{"type":21,"value":760}," res.",{"type":15,"tag":493,"props":762,"children":763},{"style":500},[764],{"type":21,"value":765},"json",{"type":15,"tag":493,"props":767,"children":768},{"style":684},[769],{"type":21,"value":770},"())\n",{"type":15,"tag":94,"props":772,"children":774},{"id":773},"interactive-testing",[775],{"type":21,"value":776},"Interactive testing",{"type":15,"tag":40,"props":778,"children":779},{},[780,782,790,792,798],{"type":21,"value":781},"Use the browser explorer at ",{"type":15,"tag":783,"props":784,"children":788},"a",{"href":785,"rel":786},"https:\u002F\u002Fcredvault.net\u002Fapi-docs",[787],"nofollow",[789],{"type":21,"value":785},{"type":21,"value":791},". See ",{"type":15,"tag":783,"props":793,"children":795},{"href":794},"\u002Fdocs\u002Fguides\u002Ftesting-api-swagger",[796],{"type":21,"value":797},"Testing APIs with Swagger UI",{"type":21,"value":482},{"type":15,"tag":94,"props":800,"children":802},{"id":801},"in-integrations",[803],{"type":21,"value":804},"In Integrations",{"type":15,"tag":40,"props":806,"children":807},{},[808],{"type":21,"value":809},"Many tools let you paste your API key:",{"type":15,"tag":101,"props":811,"children":812},{},[813,818,823,836],{"type":15,"tag":62,"props":814,"children":815},{},[816],{"type":21,"value":817},"Open integration settings (Zapier, Make, etc.)",{"type":15,"tag":62,"props":819,"children":820},{},[821],{"type":21,"value":822},"Find \"API Key\" or \"Authentication\" field",{"type":15,"tag":62,"props":824,"children":825},{},[826,828,834],{"type":21,"value":827},"Paste your CredVault API key (",{"type":15,"tag":194,"props":829,"children":831},{"className":830},[],[832],{"type":21,"value":833},"cvk_…",{"type":21,"value":835},")",{"type":15,"tag":62,"props":837,"children":838},{},[839],{"type":21,"value":840},"Test connection",{"type":15,"tag":46,"props":842,"children":844},{"id":843},"testing-api-keys",[845],{"type":21,"value":846},"Testing API Keys",{"type":15,"tag":94,"props":848,"children":850},{"id":849},"test-in-swagger",[851],{"type":21,"value":852},"Test in Swagger",{"type":15,"tag":101,"props":854,"children":855},{},[856,867,890],{"type":15,"tag":62,"props":857,"children":858},{},[859,861],{"type":21,"value":860},"Open ",{"type":15,"tag":783,"props":862,"children":864},{"href":785,"rel":863},[787],[865],{"type":21,"value":866},"\u002Fapi-docs",{"type":15,"tag":62,"props":868,"children":869},{},[870,871,876,878,883,885],{"type":21,"value":108},{"type":15,"tag":110,"props":872,"children":873},{},[874],{"type":21,"value":875},"Authorize",{"type":21,"value":877}," → paste your ",{"type":15,"tag":194,"props":879,"children":881},{"className":880},[],[882],{"type":21,"value":833},{"type":21,"value":884}," key into ",{"type":15,"tag":110,"props":886,"children":887},{},[888],{"type":21,"value":889},"ApiKeyAuth",{"type":15,"tag":62,"props":891,"children":892},{},[893,895,901],{"type":21,"value":894},"Try ",{"type":15,"tag":194,"props":896,"children":898},{"className":897},[],[899],{"type":21,"value":900},"GET \u002Fapi\u002Fv1\u002Fdata\u002F{collection}",{"type":21,"value":902}," with a collection name",{"type":15,"tag":94,"props":904,"children":906},{"id":905},"test-with-curl",[907],{"type":21,"value":908},"Test with curl",{"type":15,"tag":189,"props":910,"children":912},{"code":911,"language":486,"meta":8,"className":487,"style":8},"# Read\ncurl -sS https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers \\\n  -H \"X-API-Key: cvk_YOUR_KEY_HERE\"\n\n# Write\ncurl -sS -X POST https:\u002F\u002Fcredvault.net\u002Fapi\u002Fv1\u002Fdata\u002Fusers \\\n  -H \"X-API-Key: cvk_YOUR_KEY_HERE\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"name\":\"Ada\",\"email\":\"ada@example.com\"}'\n",[913],{"type":15,"tag":194,"props":914,"children":915},{"__ignoreMap":8},[916,925,944,955,962,970,999,1015,1032],{"type":15,"tag":493,"props":917,"children":918},{"class":495,"line":496},[919],{"type":15,"tag":493,"props":920,"children":922},{"style":921},"--shiki-default:#6A737D",[923],{"type":21,"value":924},"# Read\n",{"type":15,"tag":493,"props":926,"children":927},{"class":495,"line":523},[928,932,936,940],{"type":15,"tag":493,"props":929,"children":930},{"style":500},[931],{"type":21,"value":503},{"type":15,"tag":493,"props":933,"children":934},{"style":506},[935],{"type":21,"value":509},{"type":15,"tag":493,"props":937,"children":938},{"style":512},[939],{"type":21,"value":515},{"type":15,"tag":493,"props":941,"children":942},{"style":506},[943],{"type":21,"value":520},{"type":15,"tag":493,"props":945,"children":946},{"class":495,"line":601},[947,951],{"type":15,"tag":493,"props":948,"children":949},{"style":506},[950],{"type":21,"value":529},{"type":15,"tag":493,"props":952,"children":953},{"style":512},[954],{"type":21,"value":534},{"type":15,"tag":493,"props":956,"children":957},{"class":495,"line":610},[958],{"type":15,"tag":493,"props":959,"children":960},{"emptyLinePlaceholder":595},[961],{"type":21,"value":598},{"type":15,"tag":493,"props":963,"children":964},{"class":495,"line":619},[965],{"type":15,"tag":493,"props":966,"children":967},{"style":921},[968],{"type":21,"value":969},"# Write\n",{"type":15,"tag":493,"props":971,"children":972},{"class":495,"line":628},[973,977,981,986,991,995],{"type":15,"tag":493,"props":974,"children":975},{"style":500},[976],{"type":21,"value":503},{"type":15,"tag":493,"props":978,"children":979},{"style":506},[980],{"type":21,"value":509},{"type":15,"tag":493,"props":982,"children":983},{"style":506},[984],{"type":21,"value":985}," -X",{"type":15,"tag":493,"props":987,"children":988},{"style":512},[989],{"type":21,"value":990}," POST",{"type":15,"tag":493,"props":992,"children":993},{"style":512},[994],{"type":21,"value":515},{"type":15,"tag":493,"props":996,"children":997},{"style":506},[998],{"type":21,"value":520},{"type":15,"tag":493,"props":1000,"children":1001},{"class":495,"line":637},[1002,1006,1011],{"type":15,"tag":493,"props":1003,"children":1004},{"style":506},[1005],{"type":21,"value":529},{"type":15,"tag":493,"props":1007,"children":1008},{"style":512},[1009],{"type":21,"value":1010}," \"X-API-Key: cvk_YOUR_KEY_HERE\"",{"type":15,"tag":493,"props":1012,"children":1013},{"style":506},[1014],{"type":21,"value":520},{"type":15,"tag":493,"props":1016,"children":1018},{"class":495,"line":1017},8,[1019,1023,1028],{"type":15,"tag":493,"props":1020,"children":1021},{"style":506},[1022],{"type":21,"value":529},{"type":15,"tag":493,"props":1024,"children":1025},{"style":512},[1026],{"type":21,"value":1027}," \"Content-Type: application\u002Fjson\"",{"type":15,"tag":493,"props":1029,"children":1030},{"style":506},[1031],{"type":21,"value":520},{"type":15,"tag":493,"props":1033,"children":1035},{"class":495,"line":1034},9,[1036,1041],{"type":15,"tag":493,"props":1037,"children":1038},{"style":506},[1039],{"type":21,"value":1040},"  -d",{"type":15,"tag":493,"props":1042,"children":1043},{"style":512},[1044],{"type":21,"value":1045}," '{\"name\":\"Ada\",\"email\":\"ada@example.com\"}'\n",{"type":15,"tag":40,"props":1047,"children":1048},{},[1049,1051,1057,1059,1065,1067,1071,1073,1079,1081,1087],{"type":21,"value":1050},"Expected success: JSON with ",{"type":15,"tag":194,"props":1052,"children":1054},{"className":1053},[],[1055],{"type":21,"value":1056},"data",{"type":21,"value":1058}," (and ",{"type":15,"tag":194,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":21,"value":1064},"total",{"type":21,"value":1066}," on list queries).",{"type":15,"tag":1068,"props":1069,"children":1070},"br",{},[],{"type":21,"value":1072},"\nIf denied: ",{"type":15,"tag":194,"props":1074,"children":1076},{"className":1075},[],[1077],{"type":21,"value":1078},"401",{"type":21,"value":1080}," (bad key) or ",{"type":15,"tag":194,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":21,"value":1086},"403",{"type":21,"value":1088}," (missing scope).",{"type":15,"tag":94,"props":1090,"children":1092},{"id":1091},"usage-history",[1093],{"type":21,"value":1094},"Usage History",{"type":15,"tag":40,"props":1096,"children":1097},{},[1098],{"type":21,"value":1099},"See what your key has been used for:",{"type":15,"tag":189,"props":1101,"children":1103},{"code":1102},"2024-06-12 14:22 - GET \u002Fapi\u002Fv1\u002Fdata\u002Fusers (success)\n2024-06-12 14:25 - POST \u002Fapi\u002Fv1\u002Fdata\u002Fusers (success)\n2024-06-12 14:27 - GET \u002Fapi\u002Fv1\u002Fdata\u002Fexperiments (denied - insufficient scope)\n",[1104],{"type":15,"tag":194,"props":1105,"children":1106},{"__ignoreMap":8},[1107],{"type":21,"value":1102},{"type":15,"tag":40,"props":1109,"children":1110},{},[1111],{"type":21,"value":1112},"Click any entry to see:",{"type":15,"tag":58,"props":1114,"children":1115},{},[1116,1121,1126,1131,1136],{"type":15,"tag":62,"props":1117,"children":1118},{},[1119],{"type":21,"value":1120},"Exact request",{"type":15,"tag":62,"props":1122,"children":1123},{},[1124],{"type":21,"value":1125},"Response code",{"type":15,"tag":62,"props":1127,"children":1128},{},[1129],{"type":21,"value":1130},"Timestamp",{"type":15,"tag":62,"props":1132,"children":1133},{},[1134],{"type":21,"value":1135},"Source IP",{"type":15,"tag":62,"props":1137,"children":1138},{},[1139],{"type":21,"value":1140},"User agent",{"type":15,"tag":46,"props":1142,"children":1144},{"id":1143},"managing-keys",[1145],{"type":21,"value":1146},"Managing Keys",{"type":15,"tag":94,"props":1148,"children":1150},{"id":1149},"rename-key",[1151],{"type":21,"value":1152},"Rename Key",{"type":15,"tag":40,"props":1154,"children":1155},{},[1156],{"type":21,"value":1157},"Change the name anytime:",{"type":15,"tag":101,"props":1159,"children":1160},{},[1161,1166,1175,1180],{"type":15,"tag":62,"props":1162,"children":1163},{},[1164],{"type":21,"value":1165},"Click the key",{"type":15,"tag":62,"props":1167,"children":1168},{},[1169,1170],{"type":21,"value":108},{"type":15,"tag":110,"props":1171,"children":1172},{},[1173],{"type":21,"value":1174},"Edit",{"type":15,"tag":62,"props":1176,"children":1177},{},[1178],{"type":21,"value":1179},"Change name",{"type":15,"tag":62,"props":1181,"children":1182},{},[1183,1184],{"type":21,"value":108},{"type":15,"tag":110,"props":1185,"children":1186},{},[1187],{"type":21,"value":1188},"Save",{"type":15,"tag":94,"props":1190,"children":1192},{"id":1191},"pauseresume",[1193],{"type":21,"value":1194},"Pause\u002FResume",{"type":15,"tag":40,"props":1196,"children":1197},{},[1198],{"type":21,"value":1199},"Temporarily disable a key without deleting:",{"type":15,"tag":101,"props":1201,"children":1202},{},[1203,1207,1216,1221],{"type":15,"tag":62,"props":1204,"children":1205},{},[1206],{"type":21,"value":1165},{"type":15,"tag":62,"props":1208,"children":1209},{},[1210,1211],{"type":21,"value":108},{"type":15,"tag":110,"props":1212,"children":1213},{},[1214],{"type":21,"value":1215},"Pause",{"type":15,"tag":62,"props":1217,"children":1218},{},[1219],{"type":21,"value":1220},"Key won't work until resumed",{"type":15,"tag":62,"props":1222,"children":1223},{},[1224],{"type":21,"value":1225},"All data about usage is preserved",{"type":15,"tag":40,"props":1227,"children":1228},{},[1229,1234],{"type":15,"tag":110,"props":1230,"children":1231},{},[1232],{"type":21,"value":1233},"Use case:",{"type":21,"value":1235}," Pause during maintenance or migration",{"type":15,"tag":94,"props":1237,"children":1239},{"id":1238},"rotate-key",[1240],{"type":21,"value":1241},"Rotate Key",{"type":15,"tag":40,"props":1243,"children":1244},{},[1245],{"type":21,"value":1246},"Create a new key and invalidate the old one:",{"type":15,"tag":101,"props":1248,"children":1249},{},[1250,1254,1263,1268,1273],{"type":15,"tag":62,"props":1251,"children":1252},{},[1253],{"type":21,"value":1165},{"type":15,"tag":62,"props":1255,"children":1256},{},[1257,1258],{"type":21,"value":108},{"type":15,"tag":110,"props":1259,"children":1260},{},[1261],{"type":21,"value":1262},"Rotate",{"type":15,"tag":62,"props":1264,"children":1265},{},[1266],{"type":21,"value":1267},"New key is generated",{"type":15,"tag":62,"props":1269,"children":1270},{},[1271],{"type":21,"value":1272},"Old key stops working",{"type":15,"tag":62,"props":1274,"children":1275},{},[1276],{"type":21,"value":1277},"Update applications to use new key",{"type":15,"tag":40,"props":1279,"children":1280},{},[1281,1286],{"type":15,"tag":110,"props":1282,"children":1283},{},[1284],{"type":21,"value":1285},"Recommended:",{"type":21,"value":1287}," Rotate every 90 days or if exposed",{"type":15,"tag":94,"props":1289,"children":1291},{"id":1290},"delete-key",[1292],{"type":21,"value":1293},"Delete Key",{"type":15,"tag":40,"props":1295,"children":1296},{},[1297],{"type":21,"value":1298},"Permanently remove a key:",{"type":15,"tag":101,"props":1300,"children":1301},{},[1302,1306,1315,1320,1325],{"type":15,"tag":62,"props":1303,"children":1304},{},[1305],{"type":21,"value":1165},{"type":15,"tag":62,"props":1307,"children":1308},{},[1309,1310],{"type":21,"value":108},{"type":15,"tag":110,"props":1311,"children":1312},{},[1313],{"type":21,"value":1314},"Delete",{"type":15,"tag":62,"props":1316,"children":1317},{},[1318],{"type":21,"value":1319},"Confirm deletion",{"type":15,"tag":62,"props":1321,"children":1322},{},[1323],{"type":21,"value":1324},"Applications using this key will lose access",{"type":15,"tag":62,"props":1326,"children":1327},{},[1328],{"type":21,"value":1329},"Action is permanent",{"type":15,"tag":40,"props":1331,"children":1332},{},[1333,1338],{"type":15,"tag":110,"props":1334,"children":1335},{},[1336],{"type":21,"value":1337},"Warning:",{"type":21,"value":1339}," Make sure nothing uses this key first",{"type":15,"tag":46,"props":1341,"children":1343},{"id":1342},"security-best-practices",[1344],{"type":21,"value":1345},"Security Best Practices",{"type":15,"tag":94,"props":1347,"children":1349},{"id":1348},"protect-your-keys",[1350],{"type":21,"value":1351},"Protect Your Keys",{"type":15,"tag":58,"props":1353,"children":1354},{},[1355,1360,1365,1370,1375,1380,1385,1390],{"type":15,"tag":62,"props":1356,"children":1357},{},[1358],{"type":21,"value":1359},"✅ Store in secure password manager",{"type":15,"tag":62,"props":1361,"children":1362},{},[1363],{"type":21,"value":1364},"✅ Use environment variables, never hardcode",{"type":15,"tag":62,"props":1366,"children":1367},{},[1368],{"type":21,"value":1369},"✅ Don't share keys via email or chat",{"type":15,"tag":62,"props":1371,"children":1372},{},[1373],{"type":21,"value":1374},"✅ Don't commit keys to version control",{"type":15,"tag":62,"props":1376,"children":1377},{},[1378],{"type":21,"value":1379},"✅ Rotate keys regularly",{"type":15,"tag":62,"props":1381,"children":1382},{},[1383],{"type":21,"value":1384},"❌ Don't share keys between applications",{"type":15,"tag":62,"props":1386,"children":1387},{},[1388],{"type":21,"value":1389},"❌ Don't use one key for everything",{"type":15,"tag":62,"props":1391,"children":1392},{},[1393],{"type":21,"value":1394},"❌ Don't set expiration to \"never\" for sensitive operations",{"type":15,"tag":94,"props":1396,"children":1398},{"id":1397},"secure-storage",[1399],{"type":21,"value":1400},"Secure Storage",{"type":15,"tag":40,"props":1402,"children":1403},{},[1404],{"type":15,"tag":110,"props":1405,"children":1406},{},[1407],{"type":21,"value":1408},"In your application:",{"type":15,"tag":189,"props":1410,"children":1412},{"code":1411,"language":576,"meta":8,"className":577,"style":8},"# Good: Use environment variables\nimport os\napi_key = os.environ['CREDVAULT_API_KEY']\n\n# Bad: Don't hardcode\napi_key = \"cv_abc123...\"  # Visible in code!\n",[1413],{"type":15,"tag":194,"props":1414,"children":1415},{"__ignoreMap":8},[1416,1424,1432,1440,1447,1455],{"type":15,"tag":493,"props":1417,"children":1418},{"class":495,"line":496},[1419],{"type":15,"tag":493,"props":1420,"children":1421},{},[1422],{"type":21,"value":1423},"# Good: Use environment variables\n",{"type":15,"tag":493,"props":1425,"children":1426},{"class":495,"line":523},[1427],{"type":15,"tag":493,"props":1428,"children":1429},{},[1430],{"type":21,"value":1431},"import os\n",{"type":15,"tag":493,"props":1433,"children":1434},{"class":495,"line":601},[1435],{"type":15,"tag":493,"props":1436,"children":1437},{},[1438],{"type":21,"value":1439},"api_key = os.environ['CREDVAULT_API_KEY']\n",{"type":15,"tag":493,"props":1441,"children":1442},{"class":495,"line":610},[1443],{"type":15,"tag":493,"props":1444,"children":1445},{"emptyLinePlaceholder":595},[1446],{"type":21,"value":598},{"type":15,"tag":493,"props":1448,"children":1449},{"class":495,"line":619},[1450],{"type":15,"tag":493,"props":1451,"children":1452},{},[1453],{"type":21,"value":1454},"# Bad: Don't hardcode\n",{"type":15,"tag":493,"props":1456,"children":1457},{"class":495,"line":628},[1458],{"type":15,"tag":493,"props":1459,"children":1460},{},[1461],{"type":21,"value":1462},"api_key = \"cv_abc123...\"  # Visible in code!\n",{"type":15,"tag":40,"props":1464,"children":1465},{},[1466],{"type":15,"tag":110,"props":1467,"children":1468},{},[1469],{"type":21,"value":1470},"In configuration files:",{"type":15,"tag":189,"props":1472,"children":1474},{"code":1473,"language":486,"meta":8,"className":487,"style":8},"# .env file (add to .gitignore!)\nCREDVAULT_API_KEY=cv_abc123...\n",[1475],{"type":15,"tag":194,"props":1476,"children":1477},{"__ignoreMap":8},[1478,1486],{"type":15,"tag":493,"props":1479,"children":1480},{"class":495,"line":496},[1481],{"type":15,"tag":493,"props":1482,"children":1483},{"style":921},[1484],{"type":21,"value":1485},"# .env file (add to .gitignore!)\n",{"type":15,"tag":493,"props":1487,"children":1488},{"class":495,"line":523},[1489,1494,1499],{"type":15,"tag":493,"props":1490,"children":1491},{"style":684},[1492],{"type":21,"value":1493},"CREDVAULT_API_KEY",{"type":15,"tag":493,"props":1495,"children":1496},{"style":658},[1497],{"type":21,"value":1498},"=",{"type":15,"tag":493,"props":1500,"children":1501},{"style":512},[1502],{"type":21,"value":1503},"cv_abc123...\n",{"type":15,"tag":189,"props":1505,"children":1507},{"code":1506,"language":486,"meta":8,"className":487,"style":8},"# .gitignore\n.env\n.env.local\nsecrets\u002F\n",[1508],{"type":15,"tag":194,"props":1509,"children":1510},{"__ignoreMap":8},[1511,1519,1527,1535],{"type":15,"tag":493,"props":1512,"children":1513},{"class":495,"line":496},[1514],{"type":15,"tag":493,"props":1515,"children":1516},{"style":921},[1517],{"type":21,"value":1518},"# .gitignore\n",{"type":15,"tag":493,"props":1520,"children":1521},{"class":495,"line":523},[1522],{"type":15,"tag":493,"props":1523,"children":1524},{"style":500},[1525],{"type":21,"value":1526},".env\n",{"type":15,"tag":493,"props":1528,"children":1529},{"class":495,"line":601},[1530],{"type":15,"tag":493,"props":1531,"children":1532},{"style":500},[1533],{"type":21,"value":1534},".env.local\n",{"type":15,"tag":493,"props":1536,"children":1537},{"class":495,"line":610},[1538],{"type":15,"tag":493,"props":1539,"children":1540},{"style":500},[1541],{"type":21,"value":1542},"secrets\u002F\n",{"type":15,"tag":94,"props":1544,"children":1546},{"id":1545},"monitoring-access",[1547],{"type":21,"value":1548},"Monitoring Access",{"type":15,"tag":40,"props":1550,"children":1551},{},[1552],{"type":21,"value":1553},"Check who's using your keys:",{"type":15,"tag":101,"props":1555,"children":1556},{},[1557,1568,1573,1578,1583],{"type":15,"tag":62,"props":1558,"children":1559},{},[1560,1562,1566],{"type":21,"value":1561},"Go to ",{"type":15,"tag":110,"props":1563,"children":1564},{},[1565],{"type":21,"value":9},{"type":21,"value":1567}," dashboard",{"type":15,"tag":62,"props":1569,"children":1570},{},[1571],{"type":21,"value":1572},"See all keys and last used time",{"type":15,"tag":62,"props":1574,"children":1575},{},[1576],{"type":21,"value":1577},"Look for unexpected usage",{"type":15,"tag":62,"props":1579,"children":1580},{},[1581],{"type":21,"value":1582},"Delete any suspicious keys",{"type":15,"tag":62,"props":1584,"children":1585},{},[1586],{"type":21,"value":1587},"Check activity logs for unusual access",{"type":15,"tag":46,"props":1589,"children":1591},{"id":1590},"troubleshooting",[1592],{"type":21,"value":1593},"Troubleshooting",{"type":15,"tag":94,"props":1595,"children":1597},{"id":1596},"key-doesnt-work",[1598],{"type":21,"value":1599},"Key doesn't work",{"type":15,"tag":101,"props":1601,"children":1602},{},[1603,1608,1613,1618,1629],{"type":15,"tag":62,"props":1604,"children":1605},{},[1606],{"type":21,"value":1607},"Verify key is not paused",{"type":15,"tag":62,"props":1609,"children":1610},{},[1611],{"type":21,"value":1612},"Check expiration date",{"type":15,"tag":62,"props":1614,"children":1615},{},[1616],{"type":21,"value":1617},"Verify scopes allow the operation",{"type":15,"tag":62,"props":1619,"children":1620},{},[1621,1623],{"type":21,"value":1622},"Test with ",{"type":15,"tag":194,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":21,"value":1628},"Test Connection",{"type":15,"tag":62,"props":1630,"children":1631},{},[1632],{"type":21,"value":1633},"Check error message for reason",{"type":15,"tag":94,"props":1635,"children":1637},{"id":1636},"permission-denied-error",[1638],{"type":21,"value":1639},"Permission denied error",{"type":15,"tag":189,"props":1641,"children":1643},{"code":1642},"Error: \"Insufficient permissions for operation\"\n",[1644],{"type":15,"tag":194,"props":1645,"children":1646},{"__ignoreMap":8},[1647],{"type":21,"value":1642},{"type":15,"tag":40,"props":1649,"children":1650},{},[1651],{"type":21,"value":1652},"The key's scopes don't allow this operation:",{"type":15,"tag":101,"props":1654,"children":1655},{},[1656,1661,1670,1675],{"type":15,"tag":62,"props":1657,"children":1658},{},[1659],{"type":21,"value":1660},"Go to the key",{"type":15,"tag":62,"props":1662,"children":1663},{},[1664,1665],{"type":21,"value":108},{"type":15,"tag":110,"props":1666,"children":1667},{},[1668],{"type":21,"value":1669},"Edit Scopes",{"type":15,"tag":62,"props":1671,"children":1672},{},[1673],{"type":21,"value":1674},"Add needed permission",{"type":15,"tag":62,"props":1676,"children":1677},{},[1678],{"type":21,"value":1679},"Save and retry",{"type":15,"tag":94,"props":1681,"children":1683},{"id":1682},"key-expired",[1684],{"type":21,"value":1685},"Key expired",{"type":15,"tag":189,"props":1687,"children":1689},{"code":1688},"Error: \"API key has expired\"\n",[1690],{"type":15,"tag":194,"props":1691,"children":1692},{"__ignoreMap":8},[1693],{"type":21,"value":1688},{"type":15,"tag":40,"props":1695,"children":1696},{},[1697],{"type":21,"value":1698},"Create a new key or rotate the old one:",{"type":15,"tag":101,"props":1700,"children":1701},{},[1702,1707,1717],{"type":15,"tag":62,"props":1703,"children":1704},{},[1705],{"type":21,"value":1706},"Click the expired key",{"type":15,"tag":62,"props":1708,"children":1709},{},[1710,1711,1715],{"type":21,"value":108},{"type":15,"tag":110,"props":1712,"children":1713},{},[1714],{"type":21,"value":1262},{"type":21,"value":1716}," to replace with new",{"type":15,"tag":62,"props":1718,"children":1719},{},[1720],{"type":21,"value":1721},"Update applications with new key",{"type":15,"tag":94,"props":1723,"children":1725},{"id":1724},"lost-my-key",[1726],{"type":21,"value":1727},"Lost my key",{"type":15,"tag":40,"props":1729,"children":1730},{},[1731],{"type":21,"value":1732},"If you forgot to save your key:",{"type":15,"tag":101,"props":1734,"children":1735},{},[1736,1741,1746],{"type":15,"tag":62,"props":1737,"children":1738},{},[1739],{"type":21,"value":1740},"Create a new key (old one still works)",{"type":15,"tag":62,"props":1742,"children":1743},{},[1744],{"type":21,"value":1745},"Delete the old key when done",{"type":15,"tag":62,"props":1747,"children":1748},{},[1749],{"type":21,"value":1750},"Update applications to new key",{"type":15,"tag":40,"props":1752,"children":1753},{},[1754,1759],{"type":15,"tag":110,"props":1755,"children":1756},{},[1757],{"type":21,"value":1758},"Note:",{"type":21,"value":1760}," Keys shown only once. Save immediately after creation.",{"type":15,"tag":46,"props":1762,"children":1764},{"id":1763},"advanced-usage",[1765],{"type":21,"value":1766},"Advanced Usage",{"type":15,"tag":94,"props":1768,"children":1770},{"id":1769},"rate-limiting",[1771],{"type":21,"value":1772},"Rate Limiting",{"type":15,"tag":40,"props":1774,"children":1775},{},[1776],{"type":21,"value":1777},"Each key has rate limits:",{"type":15,"tag":189,"props":1779,"children":1781},{"code":1780},"Free tier: 100 requests\u002Fminute\nStarter: 500 requests\u002Fminute\nPro: 2000 requests\u002Fminute\nEnterprise: Unlimited (negotiated)\n",[1782],{"type":15,"tag":194,"props":1783,"children":1784},{"__ignoreMap":8},[1785],{"type":21,"value":1780},{"type":15,"tag":40,"props":1787,"children":1788},{},[1789],{"type":21,"value":1790},"If you hit limit:",{"type":15,"tag":189,"props":1792,"children":1794},{"code":1793},"Error: \"Rate limit exceeded\"\nWait: 60 seconds before retrying\nSolution: Upgrade plan or use multiple keys\n",[1795],{"type":15,"tag":194,"props":1796,"children":1797},{"__ignoreMap":8},[1798],{"type":21,"value":1793},{"type":15,"tag":94,"props":1800,"children":1802},{"id":1801},"webhook-signatures",[1803],{"type":21,"value":1804},"Webhook Signatures",{"type":15,"tag":40,"props":1806,"children":1807},{},[1808],{"type":21,"value":1809},"Verify webhooks come from CredVault:",{"type":15,"tag":189,"props":1811,"children":1813},{"code":1812,"language":576,"meta":8,"className":577,"style":8},"import hmac\n\n# Secret is your API key\nsecret = \"YOUR_API_KEY\"\nsignature = request.headers.get('X-Webhook-Signature')\nbody = request.get_data()\n\n# Calculate expected signature\nexpected = hmac.new(\n    secret.encode(),\n    body,\n    'sha256'\n).hexdigest()\n\n# Verify\nif signature != expected:\n    raise ValueError(\"Invalid signature\")\n",[1814],{"type":15,"tag":194,"props":1815,"children":1816},{"__ignoreMap":8},[1817,1825,1832,1840,1848,1856,1864,1871,1879,1887,1896,1905,1914,1923,1931,1940,1949],{"type":15,"tag":493,"props":1818,"children":1819},{"class":495,"line":496},[1820],{"type":15,"tag":493,"props":1821,"children":1822},{},[1823],{"type":21,"value":1824},"import hmac\n",{"type":15,"tag":493,"props":1826,"children":1827},{"class":495,"line":523},[1828],{"type":15,"tag":493,"props":1829,"children":1830},{"emptyLinePlaceholder":595},[1831],{"type":21,"value":598},{"type":15,"tag":493,"props":1833,"children":1834},{"class":495,"line":601},[1835],{"type":15,"tag":493,"props":1836,"children":1837},{},[1838],{"type":21,"value":1839},"# Secret is your API key\n",{"type":15,"tag":493,"props":1841,"children":1842},{"class":495,"line":610},[1843],{"type":15,"tag":493,"props":1844,"children":1845},{},[1846],{"type":21,"value":1847},"secret = \"YOUR_API_KEY\"\n",{"type":15,"tag":493,"props":1849,"children":1850},{"class":495,"line":619},[1851],{"type":15,"tag":493,"props":1852,"children":1853},{},[1854],{"type":21,"value":1855},"signature = request.headers.get('X-Webhook-Signature')\n",{"type":15,"tag":493,"props":1857,"children":1858},{"class":495,"line":628},[1859],{"type":15,"tag":493,"props":1860,"children":1861},{},[1862],{"type":21,"value":1863},"body = request.get_data()\n",{"type":15,"tag":493,"props":1865,"children":1866},{"class":495,"line":637},[1867],{"type":15,"tag":493,"props":1868,"children":1869},{"emptyLinePlaceholder":595},[1870],{"type":21,"value":598},{"type":15,"tag":493,"props":1872,"children":1873},{"class":495,"line":1017},[1874],{"type":15,"tag":493,"props":1875,"children":1876},{},[1877],{"type":21,"value":1878},"# Calculate expected signature\n",{"type":15,"tag":493,"props":1880,"children":1881},{"class":495,"line":1034},[1882],{"type":15,"tag":493,"props":1883,"children":1884},{},[1885],{"type":21,"value":1886},"expected = hmac.new(\n",{"type":15,"tag":493,"props":1888,"children":1890},{"class":495,"line":1889},10,[1891],{"type":15,"tag":493,"props":1892,"children":1893},{},[1894],{"type":21,"value":1895},"    secret.encode(),\n",{"type":15,"tag":493,"props":1897,"children":1899},{"class":495,"line":1898},11,[1900],{"type":15,"tag":493,"props":1901,"children":1902},{},[1903],{"type":21,"value":1904},"    body,\n",{"type":15,"tag":493,"props":1906,"children":1908},{"class":495,"line":1907},12,[1909],{"type":15,"tag":493,"props":1910,"children":1911},{},[1912],{"type":21,"value":1913},"    'sha256'\n",{"type":15,"tag":493,"props":1915,"children":1917},{"class":495,"line":1916},13,[1918],{"type":15,"tag":493,"props":1919,"children":1920},{},[1921],{"type":21,"value":1922},").hexdigest()\n",{"type":15,"tag":493,"props":1924,"children":1926},{"class":495,"line":1925},14,[1927],{"type":15,"tag":493,"props":1928,"children":1929},{"emptyLinePlaceholder":595},[1930],{"type":21,"value":598},{"type":15,"tag":493,"props":1932,"children":1934},{"class":495,"line":1933},15,[1935],{"type":15,"tag":493,"props":1936,"children":1937},{},[1938],{"type":21,"value":1939},"# Verify\n",{"type":15,"tag":493,"props":1941,"children":1943},{"class":495,"line":1942},16,[1944],{"type":15,"tag":493,"props":1945,"children":1946},{},[1947],{"type":21,"value":1948},"if signature != expected:\n",{"type":15,"tag":493,"props":1950,"children":1952},{"class":495,"line":1951},17,[1953],{"type":15,"tag":493,"props":1954,"children":1955},{},[1956],{"type":21,"value":1957},"    raise ValueError(\"Invalid signature\")\n",{"type":15,"tag":46,"props":1959,"children":1961},{"id":1960},"related-topics",[1962],{"type":21,"value":1963},"Related Topics",{"type":15,"tag":58,"props":1965,"children":1966},{},[1967,1978,1989],{"type":15,"tag":62,"props":1968,"children":1969},{},[1970,1976],{"type":15,"tag":783,"props":1971,"children":1973},{"href":1972},"\u002Fdocs\u002Ffeatures\u002Factivity-logs",[1974],{"type":21,"value":1975},"Activity Logs",{"type":21,"value":1977}," - See API usage",{"type":15,"tag":62,"props":1979,"children":1980},{},[1981,1987],{"type":15,"tag":783,"props":1982,"children":1984},{"href":1983},"\u002Fdocs\u002Ffeatures\u002Fdatabase-clusters",[1985],{"type":21,"value":1986},"Database Clusters",{"type":21,"value":1988}," - Access with APIs",{"type":15,"tag":62,"props":1990,"children":1991},{},[1992],{"type":21,"value":1993},"Orchestration (dashboard) — run jobs and pipelines from the sidebar",{"type":15,"tag":1995,"props":1996,"children":1997},"style",{},[1998],{"type":21,"value":1999},"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);}",{"title":8,"searchDepth":523,"depth":523,"links":2001},[2002,2003,2007,2011,2015,2020,2026,2031,2037,2041],{"id":48,"depth":523,"text":51},{"id":89,"depth":523,"text":92,"children":2004},[2005,2006],{"id":96,"depth":601,"text":99},{"id":179,"depth":601,"text":182},{"id":200,"depth":523,"text":203,"children":2008},[2009,2010],{"id":211,"depth":601,"text":214},{"id":393,"depth":601,"text":396},{"id":458,"depth":523,"text":461,"children":2012},[2013,2014],{"id":773,"depth":601,"text":776},{"id":801,"depth":601,"text":804},{"id":843,"depth":523,"text":846,"children":2016},[2017,2018,2019],{"id":849,"depth":601,"text":852},{"id":905,"depth":601,"text":908},{"id":1091,"depth":601,"text":1094},{"id":1143,"depth":523,"text":1146,"children":2021},[2022,2023,2024,2025],{"id":1149,"depth":601,"text":1152},{"id":1191,"depth":601,"text":1194},{"id":1238,"depth":601,"text":1241},{"id":1290,"depth":601,"text":1293},{"id":1342,"depth":523,"text":1345,"children":2027},[2028,2029,2030],{"id":1348,"depth":601,"text":1351},{"id":1397,"depth":601,"text":1400},{"id":1545,"depth":601,"text":1548},{"id":1590,"depth":523,"text":1593,"children":2032},[2033,2034,2035,2036],{"id":1596,"depth":601,"text":1599},{"id":1636,"depth":601,"text":1639},{"id":1682,"depth":601,"text":1685},{"id":1724,"depth":601,"text":1727},{"id":1763,"depth":523,"text":1766,"children":2038},[2039,2040],{"id":1769,"depth":601,"text":1772},{"id":1801,"depth":601,"text":1804},{"id":1960,"depth":523,"text":1963},"markdown","content:docs:features:api-keys.md","content","docs\u002Ffeatures\u002Fapi-keys.md","docs\u002Ffeatures\u002Fapi-keys","md",1794695986908]