[{"data":1,"prerenderedAt":698},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fdocs\u002Fextended-reading":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":46,"body":62,"description":47,"extension":692,"meta":693,"navigation":694,"path":45,"seo":695,"stem":696,"__hash__":697},"docs\u002Fdocs\u002F11.extended-reading.md",{"type":63,"value":64,"toc":685},"minimark",[65,78,86,192,197,371,394,406,410,518,538,542,569,595,630,637,641,648,651,654,658,678,681],[66,67,68,69,73,74,77],"p",{},"The default response stays compact: eight scalar fields and raw MRZ. Add ",[70,71,72],"code",{},"profile=extended"," to ",[70,75,76],{},"\u002Fapi\u002Fv3\u002Fine"," to request the expanded schema. This profile is a beta with evaluation in progress. Twenty supported fields does not mean twenty readable fields on every credential or 100% accuracy.",[66,79,80,81,85],{},"Read the ",[82,83,84],"a",{"href":53},"measured results and remaining limitations"," before deciding how to use this profile.",[87,88,93],"pre",{"className":89,"code":90,"language":91,"meta":92,"style":92},"language-bash shiki shiki-themes material-theme-lighter github-light github-light","curl https:\u002F\u002Focr.ecostudios.dev\u002Fapi\u002Fv3\u002Fine \\\n  -H \"X-API-Key: $INE_API_KEY\" \\\n  -H 'Idempotency-Key: your-unique-transaction-id' \\\n  -F 'profile=extended' \\\n  -F 'front=@front.jpg' \\\n  -F 'back=@back.webp'\n","bash","",[70,94,95,112,135,151,165,179],{"__ignoreMap":92},[96,97,100,104,108],"span",{"class":98,"line":99},"line",1,[96,101,103],{"class":102},"sDrxt","curl",[96,105,107],{"class":106},"sN0tt"," https:\u002F\u002Focr.ecostudios.dev\u002Fapi\u002Fv3\u002Fine",[96,109,111],{"class":110},"sitYm"," \\\n",[96,113,115,119,123,126,130,133],{"class":98,"line":114},2,[96,116,118],{"class":117},"s3mjZ","  -H",[96,120,122],{"class":121},"sU42L"," \"",[96,124,125],{"class":106},"X-API-Key: ",[96,127,129],{"class":128},"sQha-","$INE_API_KEY",[96,131,132],{"class":121},"\"",[96,134,111],{"class":110},[96,136,138,140,143,146,149],{"class":98,"line":137},3,[96,139,118],{"class":117},[96,141,142],{"class":121}," '",[96,144,145],{"class":106},"Idempotency-Key: your-unique-transaction-id",[96,147,148],{"class":121},"'",[96,150,111],{"class":110},[96,152,154,157,159,161,163],{"class":98,"line":153},4,[96,155,156],{"class":117},"  -F",[96,158,142],{"class":121},[96,160,72],{"class":106},[96,162,148],{"class":121},[96,164,111],{"class":110},[96,166,168,170,172,175,177],{"class":98,"line":167},5,[96,169,156],{"class":117},[96,171,142],{"class":121},[96,173,174],{"class":106},"front=@front.jpg",[96,176,148],{"class":121},[96,178,111],{"class":110},[96,180,182,184,186,189],{"class":98,"line":181},6,[96,183,156],{"class":117},[96,185,142],{"class":121},[96,187,188],{"class":106},"back=@back.webp",[96,190,191],{"class":121},"'\n",[193,194,196],"h2",{"id":195},"printed-fields","Printed fields",[198,199,200,216],"table",{},[201,202,203],"thead",{},[204,205,206,210,213],"tr",{},[207,208,209],"th",{},"Group",[207,211,212],{},"Fields",[207,214,215],{},"Where to look on the INE",[217,218,219,247,276,308,335],"tbody",{},[204,220,221,225,240],{},[222,223,224],"td",{},"Name",[222,226,227,230,231,230,234,230,237],{},[70,228,229],{},"full_name",", ",[70,232,233],{},"given_names",[70,235,236],{},"paternal_surname",[70,238,239],{},"maternal_surname",[222,241,242,243,246],{},"The holder's ",[70,244,245],{},"NOMBRE"," block; separate names require identifiable printed roles.",[204,248,249,252,263],{},[222,250,251],{},"Holder",[222,253,254,230,257,230,260],{},[70,255,256],{},"curp",[70,258,259],{},"date_of_birth",[70,261,262],{},"sex",[222,264,265,230,268,271,272,275],{},[70,266,267],{},"CURP",[70,269,270],{},"FECHA DE NACIMIENTO"," and ",[70,273,274],{},"SEXO",".",[204,277,278,281,301],{},[222,279,280],{},"Address",[222,282,283,230,286,230,289,230,292,230,295,230,298],{},[70,284,285],{},"address",[70,287,288],{},"street",[70,290,291],{},"neighborhood",[70,293,294],{},"municipality",[70,296,297],{},"state",[70,299,300],{},"postal_code",[222,302,303,304,307],{},"The visible ",[70,305,306],{},"DOMICILIO"," block, not codes elsewhere on the card.",[204,309,310,313,324],{},[222,311,312],{},"Electoral",[222,314,315,230,318,230,321],{},[70,316,317],{},"elector_key",[70,319,320],{},"section",[70,322,323],{},"registration_year",[222,325,326,230,329,271,332,275],{},[70,327,328],{},"CLAVE DE ELECTOR",[70,330,331],{},"SECCIÓN",[70,333,334],{},"AÑO DE REGISTRO",[204,336,337,340,354],{},[222,338,339],{},"Document",[222,341,342,230,345,230,348,230,351],{},[70,343,344],{},"issue_year",[70,346,347],{},"validity",[70,349,350],{},"cic",[70,352,353],{},"ocr",[222,355,356,230,359,362,363,366,367,370],{},[70,357,358],{},"EMISIÓN",[70,360,361],{},"VIGENCIA",", and explicitly identified ",[70,364,365],{},"CIC"," \u002F ",[70,368,369],{},"OCR"," outside MRZ. Availability varies by credential.",[66,372,373,374,378,379,381,382,385,386,390,391,393],{},"Use the ",[82,375,377],{"href":376},"\u002Fdocs\u002Fresponse-fields#additional-printed-fields-in-the-extended-profile","field-by-field reference"," for exact meanings. In particular, ",[70,380,320],{}," is an electoral section, while ",[70,383,384],{},"address_parts.block"," means an address ",[387,388,389],"em",{},"manzana",". ",[70,392,344],{}," is an issuance year, not an issue-count number.",[66,395,396,397,390,400,403,404,275],{},"All 20 printed scalar values are strings or ",[70,398,399],{},"null",[70,401,402],{},"data.mrz"," preserves the three raw lines when available. Leading zeroes are meaningful; never convert identifiers to numbers. Address components are extracted only when visibly supported; they are not enriched from an external address service. Names are not guessed by splitting a single text string. Unavailable, unreadable or conflicting values remain ",[70,405,399],{},[193,407,409],{"id":408},"response-metadata","Response metadata",[198,411,412,422],{},[201,413,414],{},[204,415,416,419],{},[207,417,418],{},"Property",[207,420,421],{},"Meaning",[217,423,424,437,465,480,494,504],{},[204,425,426,431],{},[222,427,428],{},[70,429,430],{},"profile",[222,432,433,436],{},[70,434,435],{},"extended",", identifying the selected API output profile.",[204,438,439,444],{},[222,440,441],{},[70,442,443],{},"sources.FIELD",[222,445,446,447,366,450,453,454,230,457,460,461,464],{},"Observed input side (",[70,448,449],{},"front",[70,451,452],{},"back",") and region (",[70,455,456],{},"name_block",[70,458,459],{},"address_block"," or ",[70,462,463],{},"printed_label",") for a printed field. It is not a measured image bounding box.",[204,466,467,472],{},[222,468,469],{},[70,470,471],{},"sources.address_parts.PART",[222,473,474,475,479],{},"Exact text offsets used by the deterministic parser; see ",[82,476,478],{"href":477},"\u002Fdocs\u002Faddress-parts#trace-a-part-to-its-source","source tracing",". This is different from the model's region observations.",[204,481,482,487],{},[222,483,484],{},[70,485,486],{},"checks",[222,488,489,490,493],{},"Separate format, checksum and consistency results. These do not overwrite the literal ",[70,491,492],{},"data"," values.",[204,495,496,501],{},[222,497,498],{},[70,499,500],{},"quality",[222,502,503],{},"Unvalidated observations about each supplied image, such as suspected glare. Not a confidence percentage or authenticity verdict.",[204,505,506,511],{},[222,507,508],{},[70,509,510],{},"needs_review",[222,512,513,514,517],{},"Always ",[70,515,516],{},"true",", even when individual checks pass.",[66,519,520,521,525,526,230,529,230,532,271,535,275],{},"Sources show how the output was obtained; they do not prove it matches the original card. See the ",[82,522,524],{"href":523},"\u002Fdocs\u002Fresponse-fields#standard-success-envelope","shared envelope properties"," for ",[70,527,528],{},"request_id",[70,530,531],{},"status",[70,533,534],{},"warnings",[70,536,537],{},"expires_at",[193,539,541],{"id":540},"separated-address-components","Separated address components",[66,543,544,545,271,548,551,552,555,556,558,559,562,563,565,566,568],{},"New extended readings also include ",[70,546,547],{},"data.address_parts",[70,549,550],{},"sources.address_parts",". A conservative parser separates supported labels in the existing OCR text into twelve nullable values, including street type\u002Fname, exterior\u002Finterior number, building (",[387,553,554],{},"edificio","), block (",[387,557,389],{},") and lot (",[387,560,561],{},"lote","). It makes no additional model call and leaves ",[70,564,285],{},", the complete ",[70,567,288],{}," line and the other twenty-field values unchanged.",[66,570,571,572,575,576,230,579,230,582,230,585,271,588,591,592,594],{},"For a fictional street ",[70,573,574],{},"CALLE EJEMPLO NO 012 EDIF B INT 04",", supported components can expose ",[70,577,578],{},"CALLE",[70,580,581],{},"EJEMPLO",[70,583,584],{},"012",[70,586,587],{},"B",[70,589,590],{},"04"," separately. Each populated component has a source field and exact substring offsets. Ambiguous or conflicting components remain ",[70,593,399],{},". This is parsing of OCR output, not address validation or enrichment.",[66,596,597,598,602,603,606,607,610,611,614,615,617,618,621,622,625,626,275],{},"Manzana and lote are ",[599,600,601],"strong",{},"optional parts of the printed DOMICILIO",", not dedicated electoral fields present on every INE. ",[70,604,605],{},"MZA 003 LT 007",", for example, can describe block ",[70,608,609],{},"003"," and lot ",[70,612,613],{},"007","; it says nothing about ",[70,616,331],{},". Interior (",[70,619,620],{},"unit",") and building (",[70,623,624],{},"building",") remain separate. See ",[82,627,629],{"href":628},"\u002Fdocs\u002Faddress-parts#block-lot-unit-and-building","block, lot, unit and building",[66,631,632,633,636],{},"The parser result is saved once with a new reading. GET and replay return it as stored; they do not reparse older results, which may omit both objects. Handle that absence when integrating. Read the ",[82,634,635],{"href":57},"address component guide"," for all twelve fields, source offsets and warning codes.",[193,638,640],{"id":639},"checks-and-image-observations","Checks and image observations",[66,642,643,644,647],{},"Checks evaluate CURP format\u002Fcheck digit, supported date formats, elector-key format, TD1 MRZ structure\u002Fcheck digits, expiry-year interpretation and comparable front\u002Fback text. Missing or unsupported data yields a ",[70,645,646],{},"not_checked"," check rather than a fabricated pass. Printed expiry year is not an official determination of INE validity.",[66,649,650],{},"Image observations may flag suspected blur, glare, cropping, rotation, incorrect side or another document. These observations are not calibrated confidence scores and do not establish authenticity. They do not reject photographs on their own. Deterministic file decoding and dimension limits are enforced before reserving a unit.",[66,652,653],{},"Follow the field-specific warning codes. A failed checksum flags an inconsistency that may come from an OCR mistake or the document itself. A passed checksum does not prove extraction accuracy, authenticity or the holder's identity.",[193,655,657],{"id":656},"single-side-reading","Single-side reading",[66,659,660,661,664,665,667,668,664,671,673,674,677],{},"Use ",[70,662,663],{},"mode=front"," with only ",[70,666,449],{},", or ",[70,669,670],{},"mode=back",[70,672,452],{},". The default ",[70,675,676],{},"mode=both"," requires both. A single-side request still consumes one reading unit; missing information on the omitted side remains unavailable. Use both sides when your workflow needs the full credential.",[66,679,680],{},"The same key must use the same image bytes, profile and mode on replay. Changing an option requires a new transaction. Earlier API versions retain their original input and response contracts.",[682,683,684],"style",{},"html pre.shiki code .sDrxt, html code.shiki .sDrxt{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#6F42C1}html pre.shiki code .sN0tt, html code.shiki .sN0tt{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#032F62}html pre.shiki code .sitYm, html code.shiki .sitYm{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#005CC5}html pre.shiki code .s3mjZ, html code.shiki .s3mjZ{--shiki-light:#91B859;--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 .sQha-, html code.shiki .sQha-{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#24292E}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);}",{"title":92,"searchDepth":114,"depth":114,"links":686},[687,688,689,690,691],{"id":195,"depth":114,"text":196},{"id":408,"depth":114,"text":409},{"id":540,"depth":114,"text":541},{"id":639,"depth":114,"text":640},{"id":656,"depth":114,"text":657},"md",{},{"title":46},{"title":46,"description":47},"docs\u002F11.extended-reading","r7BtJkuoxnD4CPxWGifxY3Zgv_c3wDJgMnS5h8Cowqo",1790659707387]