[{"data":1,"prerenderedAt":299},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fdocs\u002Fauthentication":60},[4,8,12,16,20,24,28,32,36,40,44,48,52,56],{"path":5,"title":6,"description":7},"\u002Fdocs\u002Fquickstart","Quickstart","Read both sides of an INE from your backend and receive structured JSON.",{"path":9,"title":10,"description":11},"\u002Fdocs\u002Fauthentication","Authentication","Keep company API keys on the server and separate them from dashboard access.",{"path":13,"title":14,"description":15},"\u002Fdocs\u002Fcreate-reading","Create a reading","Submit one front and back pair with a stable idempotency key.",{"path":17,"title":18,"description":19},"\u002Fdocs\u002Fretrieve-result","Retrieve a result","Read an existing job without repeating extraction or consuming another unit.",{"path":21,"title":22,"description":23},"\u002Fdocs\u002Fresponse-fields","Response fields","Choose the standard or extended response and use literal fields with review warnings.",{"path":25,"title":26,"description":27},"\u002Fdocs\u002Ferrors-and-retries","Errors and retries","Recover from errors without accidentally creating another charged reading.",{"path":29,"title":30,"description":31},"\u002Fdocs\u002Flimits-and-billing","Limits and billing","Plan allowances, shared admission limits and how reading units are counted.",{"path":33,"title":34,"description":35},"\u002Fdocs\u002Fprivacy-and-security","Privacy and security","Understand result retention, access controls and your backend's responsibilities.",{"path":37,"title":38,"description":39},"\u002Fdocs\u002Fexamples","Integration examples","Copyable server-side Node.js, Python and cURL examples with one POST per attempt.",{"path":41,"title":42,"description":43},"\u002Fdocs\u002Fdashboard","Dashboard usage","View your company's quota and request counts without exposing OCR data.",{"path":45,"title":46,"description":47},"\u002Fdocs\u002Fextended-reading","Extended extraction","Opt in to printed fields, separated address components, provenance and review checks.",{"path":49,"title":50,"description":51},"\u002Fdocs\u002Fwebhooks","Completion webhooks","Receive signed completion events without exposing OCR data in callbacks.",{"path":53,"title":54,"description":55},"\u002Fdocs\u002Fevaluation","Evaluation and limitations","Measured illustration results, remaining errors, and the limits of the extended profile.",{"path":57,"title":58,"description":59},"\u002Fdocs\u002Faddress-parts","Address parts","Use separate address inputs while retaining literal OCR and exact text sources.",{"id":61,"title":10,"body":62,"description":11,"extension":293,"meta":294,"navigation":295,"path":9,"seo":296,"stem":297,"__hash__":298},"docs\u002Fdocs\u002F02.authentication.md",{"type":63,"value":64,"toc":288},"minimark",[65,74,97,100,105,112,123,127,258,271,274,278,284],[66,67,68,69,73],"p",{},"Every extraction POST and result GET requires a company API key in the ",[70,71,72],"code",{},"X-API-Key"," header.",[75,76,81],"pre",{"className":77,"code":78,"language":79,"meta":80,"style":80},"language-http shiki shiki-themes material-theme-lighter github-light github-light","X-API-Key: YOUR_SERVER_API_KEY\nAccept: application\u002Fjson\n","http","",[70,82,83,91],{"__ignoreMap":80},[84,85,88],"span",{"class":86,"line":87},"line",1,[84,89,90],{},"X-API-Key: YOUR_SERVER_API_KEY\n",[84,92,94],{"class":86,"line":93},2,[84,95,96],{},"Accept: application\u002Fjson\n",[66,98,99],{},"Use HTTPS. Store the key in a server environment variable or secret manager, and load it at runtime. Never put it in browser JavaScript, a mobile application, source control, public URLs or logs. Your users call your backend; your backend calls INE API.",[101,102,104],"h2",{"id":103},"company-access","Company access",[66,106,107,108,111],{},"Several users can submit through the same company integration. Give each business transaction its own ",[70,109,110],{},"Idempotency-Key",". The company's monthly quota, two active jobs and ten new jobs per rolling minute are shared across its users and integrations.",[66,113,114,115,118,119,122],{},"Only the company that owns a job can retrieve it. Possessing a ",[70,116,117],{},"request_id"," alone does not grant access. A result lookup with another company's key returns ",[70,120,121],{},"404",".",[101,124,126],{"id":125},"invalid-or-revoked-keys","Invalid or revoked keys",[75,128,132],{"className":129,"code":130,"language":131,"meta":80,"style":80},"language-json shiki shiki-themes material-theme-lighter github-light github-light","{\n  \"request_id\": \"00000000-0000-4000-8000-000000000001\",\n  \"error\": {\n    \"code\": \"invalid_api_key\",\n    \"message\": \"Invalid or revoked API key.\",\n    \"action\": \"check_api_key\"\n  }\n}\n","json",[70,133,134,140,168,183,205,226,246,252],{"__ignoreMap":80},[84,135,136],{"class":86,"line":87},[84,137,139],{"class":138},"sYEpm","{\n",[84,141,142,146,149,152,155,159,163,165],{"class":86,"line":93},[84,143,145],{"class":144},"s4hL5","  \"",[84,147,117],{"class":148},"sup7M",[84,150,151],{"class":144},"\"",[84,153,154],{"class":138},":",[84,156,158],{"class":157},"sU42L"," \"",[84,160,162],{"class":161},"sN0tt","00000000-0000-4000-8000-000000000001",[84,164,151],{"class":157},[84,166,167],{"class":138},",\n",[84,169,171,173,176,178,180],{"class":86,"line":170},3,[84,172,145],{"class":144},[84,174,175],{"class":148},"error",[84,177,151],{"class":144},[84,179,154],{"class":138},[84,181,182],{"class":138}," {\n",[84,184,186,189,192,194,196,198,201,203],{"class":86,"line":185},4,[84,187,188],{"class":144},"    \"",[84,190,70],{"class":191},"s2tOn",[84,193,151],{"class":144},[84,195,154],{"class":138},[84,197,158],{"class":157},[84,199,200],{"class":161},"invalid_api_key",[84,202,151],{"class":157},[84,204,167],{"class":138},[84,206,208,210,213,215,217,219,222,224],{"class":86,"line":207},5,[84,209,188],{"class":144},[84,211,212],{"class":191},"message",[84,214,151],{"class":144},[84,216,154],{"class":138},[84,218,158],{"class":157},[84,220,221],{"class":161},"Invalid or revoked API key.",[84,223,151],{"class":157},[84,225,167],{"class":138},[84,227,229,231,234,236,238,240,243],{"class":86,"line":228},6,[84,230,188],{"class":144},[84,232,233],{"class":191},"action",[84,235,151],{"class":144},[84,237,154],{"class":138},[84,239,158],{"class":157},[84,241,242],{"class":161},"check_api_key",[84,244,245],{"class":157},"\"\n",[84,247,249],{"class":86,"line":248},7,[84,250,251],{"class":138},"  }\n",[84,253,255],{"class":86,"line":254},8,[84,256,257],{"class":138},"}\n",[66,259,260,261,264,265,270],{},"This response uses HTTP ",[70,262,263],{},"401",". Check your backend configuration or contact ",[266,267,269],"a",{"href":268},"mailto:ecodevcontact@gmail.com","support"," for provisioning, rotation or revocation. Share a request identifier when available; never send your secret key in a support message.",[66,272,273],{},"The service stores a hash of the API key for authentication. This does not make a leaked key harmless: anyone holding an active key can submit jobs and access that company's unexpired results.",[101,275,277],{"id":276},"dashboard-access-is-separate","Dashboard access is separate",[66,279,280,281,122],{},"The private usage dashboard uses a revocable access code and an eight-hour session. Its code is not an OCR API key. Do not paste an API key into the dashboard login. See ",[266,282,283],{"href":41},"dashboard usage",[285,286,287],"style",{},"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 .sYEpm, html code.shiki .sYEpm{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#24292E}html pre.shiki code .s4hL5, html code.shiki .s4hL5{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#005CC5}html pre.shiki code .sup7M, html code.shiki .sup7M{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#005CC5}html pre.shiki code .sU42L, html code.shiki .sU42L{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#032F62}html pre.shiki code .sN0tt, html code.shiki .sN0tt{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#032F62}html pre.shiki code .s2tOn, html code.shiki .s2tOn{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#005CC5}",{"title":80,"searchDepth":93,"depth":93,"links":289},[290,291,292],{"id":103,"depth":93,"text":104},{"id":125,"depth":93,"text":126},{"id":276,"depth":93,"text":277},"md",{},{"title":10},{"title":10,"description":11},"docs\u002F02.authentication","EZc8ZOCFCqo7cBUvOSSVAJLSUDqo5J1j_CYUy3Rtn-U",1790659707419]