[{"data":1,"prerenderedAt":3336},["ShallowReactive",2],{"docs-/docs/external-file-upload-api":3,"docs-nav":1920},{"id":4,"title":5,"body":6,"category":1909,"description":1910,"extension":1911,"head":1912,"meta":1913,"navLabel":1914,"navigation":551,"ogImage":1912,"order":322,"path":1915,"robots":1912,"schemaOrg":1912,"seo":1916,"sitemap":1917,"stem":1918,"__hash__":1919},"docs/docs/external-file-upload-api.md","External File Upload API",{"type":7,"value":8,"toc":1889},"minimark",[9,14,31,35,38,44,49,54,64,67,71,100,104,170,174,177,182,209,213,227,231,242,245,250,253,273,276,303,307,311,400,404,409,440,443,465,469,472,476,526,530,534,689,1202,1809,1813,1878,1882,1885],[10,11,13],"h2",{"id":12},"overview","Overview",[15,16,17,18,22,23,26,27,30],"p",{},"This API endpoint allows external third-party clients to upload data files for processing. Excel (",[19,20,21],"code",{},".xlsx","), CSV (",[19,24,25],{},".csv","), and Parquet (",[19,28,29],{},".parquet",") files are accepted — Excel and Parquet are preferred. Files are uploaded over an encrypted (HTTPS) connection using a secure API key authentication mechanism and are processed asynchronously.",[10,32,34],{"id":33},"authentication","Authentication",[15,36,37],{},"All requests must include a valid API key in the request headers.",[15,39,40],{},[41,42,43],"strong",{},"Base URL",[15,45,46],{},[19,47,48],{},"https://api-data-ingestion.deducta.ai/m2m",[15,50,51],{},[41,52,53],{},"Header Required:",[55,56,62],"pre",{"className":57,"code":59,"language":60,"meta":61},[58],"language-text","X-API-Key: your-api-key-here\n","text","",[19,63,59],{"__ignoreMap":61},[15,65,66],{},"Contact your Deducta representative to obtain an API key for your organization.",[10,68,70],{"id":69},"endpoint-details","Endpoint Details",[72,73,74,84,92],"ul",{},[75,76,77,80,81],"li",{},[41,78,79],{},"URL:"," ",[19,82,83],{},"/api/file/upload",[75,85,86,80,89],{},[41,87,88],{},"Method:",[19,90,91],{},"PUT",[75,93,94,80,97],{},[41,95,96],{},"Content-Type:",[19,98,99],{},"multipart/form-data",[10,101,103],{"id":102},"request-parameters","Request Parameters",[105,106,107,129],"table",{},[108,109,110],"thead",{},[111,112,113,117,120,123,126],"tr",{},[114,115,116],"th",{},"Parameter",[114,118,119],{},"Type",[114,121,122],{},"Location",[114,124,125],{},"Required",[114,127,128],{},"Description",[130,131,132,152],"tbody",{},[111,133,134,140,143,146,149],{},[135,136,137],"td",{},[19,138,139],{},"file",[135,141,142],{},"File",[135,144,145],{},"Form Data",[135,147,148],{},"Yes",[135,150,151],{},"The data file to upload (Excel or Parquet preferred)",[111,153,154,159,162,165,167],{},[135,155,156],{},[19,157,158],{},"businessUnitId",[135,160,161],{},"GUID",[135,163,164],{},"Query String",[135,166,148],{},[135,168,169],{},"The business unit identifier",[10,171,173],{"id":172},"validation-requirements","Validation Requirements",[15,175,176],{},"Your file upload must meet the following requirements:",[178,179,181],"h3",{"id":180},"file-requirements","File Requirements",[72,183,184,197,203],{},[75,185,186,189,190,22,192,26,194,196],{},[41,187,188],{},"File Format:"," Accepted formats are Excel (",[19,191,21],{},[19,193,25],{},[19,195,29],{},"). Excel and Parquet are preferred for the best performance and data fidelity.",[75,198,199,202],{},[41,200,201],{},"File Size:"," 50 MB by default. Higher limits can be arranged per request — contact your Deducta representative.",[75,204,205,208],{},[41,206,207],{},"File Content:"," File must not be empty (size > 0 bytes)",[178,210,212],{"id":211},"parameter-requirements","Parameter Requirements",[72,214,215],{},[75,216,217,220,221,224],{},[41,218,219],{},"businessUnitId:"," Must be a valid GUID. It cannot be empty or the all-zero GUID: ",[222,223],"br",{},[19,225,226],{},"00000000-0000-0000-0000-000000000000",[10,228,230],{"id":229},"file-naming","File Naming",[15,232,233,234,237,238,241],{},"The API accepts any file name, but we strongly recommend a consistent, descriptive name rather than a generic or random one. A good name identifies ",[41,235,236],{},"who"," the data is from and ",[41,239,240],{},"which period"," it covers, which makes uploads easy to trace, reconcile, and troubleshoot.",[15,243,244],{},"Use a structure such as:",[15,246,247],{},[19,248,249],{},"{company}_{dataset}_{period}.xlsx",[15,251,252],{},"Examples:",[72,254,255,261,267],{},[75,256,257,260],{},[19,258,259],{},"acme_spend_2026-05.xlsx"," — monthly extract for May 2026",[75,262,263,266],{},[19,264,265],{},"acme_invoices_2026-W21.xlsx"," — weekly extract (ISO week 21)",[75,268,269,272],{},[19,270,271],{},"acme_transactions_2026-05-19.xlsx"," — daily extract",[15,274,275],{},"Tips:",[72,277,278,281,296],{},[75,279,280],{},"Use lowercase and separate parts with underscores or hyphens — avoid spaces.",[75,282,283,284,287,288,291,292,295],{},"Use a sortable date format (",[19,285,286],{},"YYYY-MM",", ",[19,289,290],{},"YYYY-MM-DD",", or ",[19,293,294],{},"YYYY-Www",") so files order chronologically.",[75,297,298,299,302],{},"On upload, Deducta automatically appends a processing timestamp to the stored file name (see the ",[19,300,301],{},"fileName"," field in the success response), so you don't need to add one yourself.",[10,304,306],{"id":305},"response-format","Response Format",[178,308,310],{"id":309},"success-response-200-ok","Success Response (200 OK)",[55,312,316],{"className":313,"code":314,"language":315,"meta":61,"style":61},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"fileId\": \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n  \"fileName\": \"your_file_uploaded_20260119T143025.xlsx\",\n  \"businessUnitId\": \"7d9e4b2a-8c3f-4e1d-9a6b-5f8c2d1e3a4b\"\n}\n","json",[19,317,318,327,355,375,394],{"__ignoreMap":61},[319,320,323],"span",{"class":321,"line":322},"line",1,[319,324,326],{"class":325},"sMK4o","{\n",[319,328,330,333,337,340,343,346,350,352],{"class":321,"line":329},2,[319,331,332],{"class":325},"  \"",[319,334,336],{"class":335},"spNyl","fileId",[319,338,339],{"class":325},"\"",[319,341,342],{"class":325},":",[319,344,345],{"class":325}," \"",[319,347,349],{"class":348},"sfazB","3fa85f64-5717-4562-b3fc-2c963f66afa6",[319,351,339],{"class":325},[319,353,354],{"class":325},",\n",[319,356,358,360,362,364,366,368,371,373],{"class":321,"line":357},3,[319,359,332],{"class":325},[319,361,301],{"class":335},[319,363,339],{"class":325},[319,365,342],{"class":325},[319,367,345],{"class":325},[319,369,370],{"class":348},"your_file_uploaded_20260119T143025.xlsx",[319,372,339],{"class":325},[319,374,354],{"class":325},[319,376,378,380,382,384,386,388,391],{"class":321,"line":377},4,[319,379,332],{"class":325},[319,381,158],{"class":335},[319,383,339],{"class":325},[319,385,342],{"class":325},[319,387,345],{"class":325},[319,389,390],{"class":348},"7d9e4b2a-8c3f-4e1d-9a6b-5f8c2d1e3a4b",[319,392,393],{"class":325},"\"\n",[319,395,397],{"class":321,"line":396},5,[319,398,399],{"class":325},"}\n",[178,401,403],{"id":402},"error-responses","Error Responses",[405,406,408],"h4",{"id":407},"_400-bad-request","400 Bad Request",[55,410,412],{"className":313,"code":411,"language":315,"meta":61,"style":61},"{\n  \"error\": \"Error message describing the validation failure\"\n}\n",[19,413,414,418,436],{"__ignoreMap":61},[319,415,416],{"class":321,"line":322},[319,417,326],{"class":325},[319,419,420,422,425,427,429,431,434],{"class":321,"line":329},[319,421,332],{"class":325},[319,423,424],{"class":335},"error",[319,426,339],{"class":325},[319,428,342],{"class":325},[319,430,345],{"class":325},[319,432,433],{"class":348},"Error message describing the validation failure",[319,435,393],{"class":325},[319,437,438],{"class":321,"line":357},[319,439,399],{"class":325},[15,441,442],{},"Common validation errors:",[72,444,445,450,455,460],{},[75,446,447],{},[19,448,449],{},"\"businessUnitId is required and cannot be empty\"",[75,451,452],{},[19,453,454],{},"\"No file provided or file is empty\"",[75,456,457],{},[19,458,459],{},"\"File size exceeds maximum allowed size of 50MB\"",[75,461,462],{},[19,463,464],{},"\"Only .xlsx, .csv, and .parquet files are accepted\"",[405,466,468],{"id":467},"_401-unauthorized","401 Unauthorized",[15,470,471],{},"Authentication failed - invalid or missing API key.",[405,473,475],{"id":474},"_500-internal-server-error","500 Internal Server Error",[55,477,479],{"className":313,"code":478,"language":315,"meta":61,"style":61},"{\n  \"error\": \"Failed to process file\",\n  \"details\": \"Detailed error message\"\n}\n",[19,480,481,485,504,522],{"__ignoreMap":61},[319,482,483],{"class":321,"line":322},[319,484,326],{"class":325},[319,486,487,489,491,493,495,497,500,502],{"class":321,"line":329},[319,488,332],{"class":325},[319,490,424],{"class":335},[319,492,339],{"class":325},[319,494,342],{"class":325},[319,496,345],{"class":325},[319,498,499],{"class":348},"Failed to process file",[319,501,339],{"class":325},[319,503,354],{"class":325},[319,505,506,508,511,513,515,517,520],{"class":321,"line":357},[319,507,332],{"class":325},[319,509,510],{"class":335},"details",[319,512,339],{"class":325},[319,514,342],{"class":325},[319,516,345],{"class":325},[319,518,519],{"class":348},"Detailed error message",[319,521,393],{"class":325},[319,523,524],{"class":321,"line":377},[319,525,399],{"class":325},[10,527,529],{"id":528},"sample-scripts","Sample Scripts",[178,531,533],{"id":532},"curl-example","cURL Example",[55,535,539],{"className":536,"code":537,"language":538,"meta":61,"style":61},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#!/bin/bash\n\nAPI_KEY=\"your-api-key-here\"\nBUSINESS_UNIT_ID=\"your-business-unit-id-here\"\nFILE_PATH=\"/path/to/your/file.xlsx\"\nAPI_URL=\"https://api-data-ingestion.deducta.ai/m2m/api/file/upload\"\n\ncurl -X PUT \"${API_URL}?businessUnitId=${BUSINESS_UNIT_ID}\" \\\n  -H \"X-API-Key: ${API_KEY}\" \\\n  -F \"file=@${FILE_PATH}\"\n","bash",[19,540,541,547,553,569,583,597,612,617,652,671],{"__ignoreMap":61},[319,542,543],{"class":321,"line":322},[319,544,546],{"class":545},"sHwdD","#!/bin/bash\n",[319,548,549],{"class":321,"line":329},[319,550,552],{"emptyLinePlaceholder":551},true,"\n",[319,554,555,559,562,564,567],{"class":321,"line":357},[319,556,558],{"class":557},"sTEyZ","API_KEY",[319,560,561],{"class":325},"=",[319,563,339],{"class":325},[319,565,566],{"class":348},"your-api-key-here",[319,568,393],{"class":325},[319,570,571,574,576,578,581],{"class":321,"line":377},[319,572,573],{"class":557},"BUSINESS_UNIT_ID",[319,575,561],{"class":325},[319,577,339],{"class":325},[319,579,580],{"class":348},"your-business-unit-id-here",[319,582,393],{"class":325},[319,584,585,588,590,592,595],{"class":321,"line":396},[319,586,587],{"class":557},"FILE_PATH",[319,589,561],{"class":325},[319,591,339],{"class":325},[319,593,594],{"class":348},"/path/to/your/file.xlsx",[319,596,393],{"class":325},[319,598,600,603,605,607,610],{"class":321,"line":599},6,[319,601,602],{"class":557},"API_URL",[319,604,561],{"class":325},[319,606,339],{"class":325},[319,608,609],{"class":348},"https://api-data-ingestion.deducta.ai/m2m/api/file/upload",[319,611,393],{"class":325},[319,613,615],{"class":321,"line":614},7,[319,616,552],{"emptyLinePlaceholder":551},[319,618,620,624,627,630,633,635,638,641,644,646,649],{"class":321,"line":619},8,[319,621,623],{"class":622},"sBMFI","curl",[319,625,626],{"class":348}," -X",[319,628,629],{"class":348}," PUT",[319,631,632],{"class":325}," \"${",[319,634,602],{"class":557},[319,636,637],{"class":325},"}",[319,639,640],{"class":348},"?businessUnitId=",[319,642,643],{"class":325},"${",[319,645,573],{"class":557},[319,647,648],{"class":325},"}\"",[319,650,651],{"class":557}," \\\n",[319,653,655,658,660,663,665,667,669],{"class":321,"line":654},9,[319,656,657],{"class":348},"  -H",[319,659,345],{"class":325},[319,661,662],{"class":348},"X-API-Key: ",[319,664,643],{"class":325},[319,666,558],{"class":557},[319,668,648],{"class":325},[319,670,651],{"class":557},[319,672,674,677,679,682,684,686],{"class":321,"line":673},10,[319,675,676],{"class":348},"  -F",[319,678,345],{"class":325},[319,680,681],{"class":348},"file=@",[319,683,643],{"class":325},[319,685,587],{"class":557},[319,687,688],{"class":325},"}\"\n",[690,691,693],"d-docs-details",{"summary":692},"Python Example",[55,694,698],{"className":695,"code":696,"language":697,"meta":61,"style":61},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import mimetypes\nimport requests\nfrom pathlib import Path\n\n# Configuration\nAPI_KEY = \"your-api-key-here\"\nBUSINESS_UNIT_ID = \"your-business-unit-id-here\"\nFILE_PATH = \"/path/to/your/file.xlsx\"\nAPI_URL = \"https://api-data-ingestion.deducta.ai/m2m/api/file/upload\"\n\ndef upload_file(file_path, business_unit_id, api_key):\n    \"\"\"\n    Upload a data file to the Deducta Data Ingestion API.\n\n    Excel (.xlsx) and Parquet (.parquet) are preferred, but any standard\n    data file format is accepted.\n\n    Args:\n        file_path (str): Path to the file to upload\n        business_unit_id (str): GUID of the business unit\n        api_key (str): API key for authentication\n\n    Returns:\n        dict: Response containing fileId, fileName, and businessUnitId\n\n    Raises:\n        requests.exceptions.HTTPError: If the request fails\n    \"\"\"\n    # Validate file exists\n    file = Path(file_path)\n    if not file.exists():\n        raise FileNotFoundError(f\"File not found: {file_path}\")\n\n    # Check file size (50MB default limit)\n    file_size_mb = file.stat().st_size / (1024 * 1024)\n    if file_size_mb > 50:\n        raise ValueError(f\"File size ({file_size_mb:.2f}MB) exceeds maximum allowed size of 50MB\")\n\n    # Prepare the request\n    headers = {\n        \"X-API-Key\": api_key\n    }\n\n    params = {\n        \"businessUnitId\": business_unit_id\n    }\n\n    # Open and upload the file (content type is inferred from the file name)\n    content_type = mimetypes.guess_type(file.name)[0] or 'application/octet-stream'\n    with open(file_path, 'rb') as f:\n        files = {\n            'file': (file.name, f, content_type)\n        }\n\n        response = requests.put(\n            API_URL,\n            headers=headers,\n            params=params,\n            files=files\n        )\n\n    # Raise exception for HTTP errors\n    response.raise_for_status()\n\n    return response.json()\n\n# Example usage\nif __name__ == \"__main__\":\n    try:\n        result = upload_file(FILE_PATH, BUSINESS_UNIT_ID, API_KEY)\n        print(\"Upload successful!\")\n        print(f\"File ID: {result['fileId']}\")\n        print(f\"File Name: {result['fileName']}\")\n        print(f\"Business Unit ID: {result['businessUnitId']}\")\n    except FileNotFoundError as e:\n        print(f\"Error: {e}\")\n    except ValueError as e:\n        print(f\"Validation Error: {e}\")\n    except requests.exceptions.HTTPError as e:\n        print(f\"HTTP Error: {e}\")\n        if e.response.status_code == 400:\n            print(f\"Validation failed: {e.response.json()}\")\n        elif e.response.status_code == 401:\n            print(\"Authentication failed - check your API key\")\n        elif e.response.status_code == 500:\n            print(f\"Server error: {e.response.json()}\")\n    except Exception as e:\n        print(f\"Unexpected error: {e}\")\n","python",[19,699,700,705,710,715,719,724,729,734,739,744,748,754,760,766,771,777,783,788,794,800,806,812,817,823,829,834,840,846,851,857,863,869,875,880,886,892,898,904,909,915,921,927,933,938,944,950,955,960,966,972,978,984,990,996,1001,1007,1013,1019,1025,1031,1037,1042,1048,1054,1059,1065,1070,1076,1082,1088,1094,1100,1106,1112,1118,1124,1130,1136,1142,1148,1154,1160,1166,1172,1178,1184,1190,1196],{"__ignoreMap":61},[319,701,702],{"class":321,"line":322},[319,703,704],{},"import mimetypes\n",[319,706,707],{"class":321,"line":329},[319,708,709],{},"import requests\n",[319,711,712],{"class":321,"line":357},[319,713,714],{},"from pathlib import Path\n",[319,716,717],{"class":321,"line":377},[319,718,552],{"emptyLinePlaceholder":551},[319,720,721],{"class":321,"line":396},[319,722,723],{},"# Configuration\n",[319,725,726],{"class":321,"line":599},[319,727,728],{},"API_KEY = \"your-api-key-here\"\n",[319,730,731],{"class":321,"line":614},[319,732,733],{},"BUSINESS_UNIT_ID = \"your-business-unit-id-here\"\n",[319,735,736],{"class":321,"line":619},[319,737,738],{},"FILE_PATH = \"/path/to/your/file.xlsx\"\n",[319,740,741],{"class":321,"line":654},[319,742,743],{},"API_URL = \"https://api-data-ingestion.deducta.ai/m2m/api/file/upload\"\n",[319,745,746],{"class":321,"line":673},[319,747,552],{"emptyLinePlaceholder":551},[319,749,751],{"class":321,"line":750},11,[319,752,753],{},"def upload_file(file_path, business_unit_id, api_key):\n",[319,755,757],{"class":321,"line":756},12,[319,758,759],{},"    \"\"\"\n",[319,761,763],{"class":321,"line":762},13,[319,764,765],{},"    Upload a data file to the Deducta Data Ingestion API.\n",[319,767,769],{"class":321,"line":768},14,[319,770,552],{"emptyLinePlaceholder":551},[319,772,774],{"class":321,"line":773},15,[319,775,776],{},"    Excel (.xlsx) and Parquet (.parquet) are preferred, but any standard\n",[319,778,780],{"class":321,"line":779},16,[319,781,782],{},"    data file format is accepted.\n",[319,784,786],{"class":321,"line":785},17,[319,787,552],{"emptyLinePlaceholder":551},[319,789,791],{"class":321,"line":790},18,[319,792,793],{},"    Args:\n",[319,795,797],{"class":321,"line":796},19,[319,798,799],{},"        file_path (str): Path to the file to upload\n",[319,801,803],{"class":321,"line":802},20,[319,804,805],{},"        business_unit_id (str): GUID of the business unit\n",[319,807,809],{"class":321,"line":808},21,[319,810,811],{},"        api_key (str): API key for authentication\n",[319,813,815],{"class":321,"line":814},22,[319,816,552],{"emptyLinePlaceholder":551},[319,818,820],{"class":321,"line":819},23,[319,821,822],{},"    Returns:\n",[319,824,826],{"class":321,"line":825},24,[319,827,828],{},"        dict: Response containing fileId, fileName, and businessUnitId\n",[319,830,832],{"class":321,"line":831},25,[319,833,552],{"emptyLinePlaceholder":551},[319,835,837],{"class":321,"line":836},26,[319,838,839],{},"    Raises:\n",[319,841,843],{"class":321,"line":842},27,[319,844,845],{},"        requests.exceptions.HTTPError: If the request fails\n",[319,847,849],{"class":321,"line":848},28,[319,850,759],{},[319,852,854],{"class":321,"line":853},29,[319,855,856],{},"    # Validate file exists\n",[319,858,860],{"class":321,"line":859},30,[319,861,862],{},"    file = Path(file_path)\n",[319,864,866],{"class":321,"line":865},31,[319,867,868],{},"    if not file.exists():\n",[319,870,872],{"class":321,"line":871},32,[319,873,874],{},"        raise FileNotFoundError(f\"File not found: {file_path}\")\n",[319,876,878],{"class":321,"line":877},33,[319,879,552],{"emptyLinePlaceholder":551},[319,881,883],{"class":321,"line":882},34,[319,884,885],{},"    # Check file size (50MB default limit)\n",[319,887,889],{"class":321,"line":888},35,[319,890,891],{},"    file_size_mb = file.stat().st_size / (1024 * 1024)\n",[319,893,895],{"class":321,"line":894},36,[319,896,897],{},"    if file_size_mb > 50:\n",[319,899,901],{"class":321,"line":900},37,[319,902,903],{},"        raise ValueError(f\"File size ({file_size_mb:.2f}MB) exceeds maximum allowed size of 50MB\")\n",[319,905,907],{"class":321,"line":906},38,[319,908,552],{"emptyLinePlaceholder":551},[319,910,912],{"class":321,"line":911},39,[319,913,914],{},"    # Prepare the request\n",[319,916,918],{"class":321,"line":917},40,[319,919,920],{},"    headers = {\n",[319,922,924],{"class":321,"line":923},41,[319,925,926],{},"        \"X-API-Key\": api_key\n",[319,928,930],{"class":321,"line":929},42,[319,931,932],{},"    }\n",[319,934,936],{"class":321,"line":935},43,[319,937,552],{"emptyLinePlaceholder":551},[319,939,941],{"class":321,"line":940},44,[319,942,943],{},"    params = {\n",[319,945,947],{"class":321,"line":946},45,[319,948,949],{},"        \"businessUnitId\": business_unit_id\n",[319,951,953],{"class":321,"line":952},46,[319,954,932],{},[319,956,958],{"class":321,"line":957},47,[319,959,552],{"emptyLinePlaceholder":551},[319,961,963],{"class":321,"line":962},48,[319,964,965],{},"    # Open and upload the file (content type is inferred from the file name)\n",[319,967,969],{"class":321,"line":968},49,[319,970,971],{},"    content_type = mimetypes.guess_type(file.name)[0] or 'application/octet-stream'\n",[319,973,975],{"class":321,"line":974},50,[319,976,977],{},"    with open(file_path, 'rb') as f:\n",[319,979,981],{"class":321,"line":980},51,[319,982,983],{},"        files = {\n",[319,985,987],{"class":321,"line":986},52,[319,988,989],{},"            'file': (file.name, f, content_type)\n",[319,991,993],{"class":321,"line":992},53,[319,994,995],{},"        }\n",[319,997,999],{"class":321,"line":998},54,[319,1000,552],{"emptyLinePlaceholder":551},[319,1002,1004],{"class":321,"line":1003},55,[319,1005,1006],{},"        response = requests.put(\n",[319,1008,1010],{"class":321,"line":1009},56,[319,1011,1012],{},"            API_URL,\n",[319,1014,1016],{"class":321,"line":1015},57,[319,1017,1018],{},"            headers=headers,\n",[319,1020,1022],{"class":321,"line":1021},58,[319,1023,1024],{},"            params=params,\n",[319,1026,1028],{"class":321,"line":1027},59,[319,1029,1030],{},"            files=files\n",[319,1032,1034],{"class":321,"line":1033},60,[319,1035,1036],{},"        )\n",[319,1038,1040],{"class":321,"line":1039},61,[319,1041,552],{"emptyLinePlaceholder":551},[319,1043,1045],{"class":321,"line":1044},62,[319,1046,1047],{},"    # Raise exception for HTTP errors\n",[319,1049,1051],{"class":321,"line":1050},63,[319,1052,1053],{},"    response.raise_for_status()\n",[319,1055,1057],{"class":321,"line":1056},64,[319,1058,552],{"emptyLinePlaceholder":551},[319,1060,1062],{"class":321,"line":1061},65,[319,1063,1064],{},"    return response.json()\n",[319,1066,1068],{"class":321,"line":1067},66,[319,1069,552],{"emptyLinePlaceholder":551},[319,1071,1073],{"class":321,"line":1072},67,[319,1074,1075],{},"# Example usage\n",[319,1077,1079],{"class":321,"line":1078},68,[319,1080,1081],{},"if __name__ == \"__main__\":\n",[319,1083,1085],{"class":321,"line":1084},69,[319,1086,1087],{},"    try:\n",[319,1089,1091],{"class":321,"line":1090},70,[319,1092,1093],{},"        result = upload_file(FILE_PATH, BUSINESS_UNIT_ID, API_KEY)\n",[319,1095,1097],{"class":321,"line":1096},71,[319,1098,1099],{},"        print(\"Upload successful!\")\n",[319,1101,1103],{"class":321,"line":1102},72,[319,1104,1105],{},"        print(f\"File ID: {result['fileId']}\")\n",[319,1107,1109],{"class":321,"line":1108},73,[319,1110,1111],{},"        print(f\"File Name: {result['fileName']}\")\n",[319,1113,1115],{"class":321,"line":1114},74,[319,1116,1117],{},"        print(f\"Business Unit ID: {result['businessUnitId']}\")\n",[319,1119,1121],{"class":321,"line":1120},75,[319,1122,1123],{},"    except FileNotFoundError as e:\n",[319,1125,1127],{"class":321,"line":1126},76,[319,1128,1129],{},"        print(f\"Error: {e}\")\n",[319,1131,1133],{"class":321,"line":1132},77,[319,1134,1135],{},"    except ValueError as e:\n",[319,1137,1139],{"class":321,"line":1138},78,[319,1140,1141],{},"        print(f\"Validation Error: {e}\")\n",[319,1143,1145],{"class":321,"line":1144},79,[319,1146,1147],{},"    except requests.exceptions.HTTPError as e:\n",[319,1149,1151],{"class":321,"line":1150},80,[319,1152,1153],{},"        print(f\"HTTP Error: {e}\")\n",[319,1155,1157],{"class":321,"line":1156},81,[319,1158,1159],{},"        if e.response.status_code == 400:\n",[319,1161,1163],{"class":321,"line":1162},82,[319,1164,1165],{},"            print(f\"Validation failed: {e.response.json()}\")\n",[319,1167,1169],{"class":321,"line":1168},83,[319,1170,1171],{},"        elif e.response.status_code == 401:\n",[319,1173,1175],{"class":321,"line":1174},84,[319,1176,1177],{},"            print(\"Authentication failed - check your API key\")\n",[319,1179,1181],{"class":321,"line":1180},85,[319,1182,1183],{},"        elif e.response.status_code == 500:\n",[319,1185,1187],{"class":321,"line":1186},86,[319,1188,1189],{},"            print(f\"Server error: {e.response.json()}\")\n",[319,1191,1193],{"class":321,"line":1192},87,[319,1194,1195],{},"    except Exception as e:\n",[319,1197,1199],{"class":321,"line":1198},88,[319,1200,1201],{},"        print(f\"Unexpected error: {e}\")\n",[690,1203,1205],{"summary":1204},"C# Example",[55,1206,1210],{"className":1207,"code":1208,"language":1209,"meta":61,"style":61},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","using System;\nusing System.IO;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Threading.Tasks;\nusing System.Text.Json;\n\npublic class FileUploadClient\n{\n    private readonly HttpClient _httpClient;\n    private readonly string _apiKey;\n    private const long MaxFileSizeBytes = 50 * 1024 * 1024; // 50MB\n\n    public FileUploadClient(string baseUrl, string apiKey)\n    {\n        _httpClient = new HttpClient { BaseAddress = new Uri(baseUrl) };\n        _apiKey = apiKey;\n    }\n\n    public async Task\u003CFileUploadResponse> UploadFileAsync(\n        string filePath,\n        Guid businessUnitId)\n    {\n        // Validate file exists\n        if (!File.Exists(filePath))\n        {\n            throw new FileNotFoundException(\"File not found\", filePath);\n        }\n\n        // Validate file size\n        var fileInfo = new FileInfo(filePath);\n        if (fileInfo.Length > MaxFileSizeBytes)\n        {\n            throw new ArgumentException(\n                $\"File size ({fileInfo.Length / 1024 / 1024}MB) exceeds maximum allowed size of 50MB\");\n        }\n\n        // Validate businessUnitId\n        if (businessUnitId == Guid.Empty)\n        {\n            throw new ArgumentException(\"businessUnitId cannot be empty\");\n        }\n\n        // Prepare the multipart form data\n        using var content = new MultipartFormDataContent();\n        using var fileStream = File.OpenRead(filePath);\n        using var streamContent = new StreamContent(fileStream);\n\n        streamContent.Headers.ContentType = new MediaTypeHeaderValue(\"application/octet-stream\");\n\n        content.Add(streamContent, \"file\", Path.GetFileName(filePath));\n\n        // Prepare the request\n        var requestUri = $\"/api/file/upload?businessUnitId={businessUnitId}\";\n        var request = new HttpRequestMessage(HttpMethod.Put, requestUri)\n        {\n            Content = content\n        };\n        request.Headers.Add(\"X-API-Key\", _apiKey);\n\n        // Send the request\n        var response = await _httpClient.SendAsync(request);\n\n        // Parse response\n        var responseContent = await response.Content.ReadAsStringAsync();\n\n        if (!response.IsSuccessStatusCode)\n        {\n            throw new HttpRequestException(\n                $\"Upload failed with status {response.StatusCode}: {responseContent}\");\n        }\n\n        return JsonSerializer.Deserialize\u003CFileUploadResponse>(responseContent);\n    }\n}\n\npublic class FileUploadResponse\n{\n    public Guid FileId { get; set; }\n    public string FileName { get; set; }\n    public Guid BusinessUnitId { get; set; }\n}\n\n// Example usage\npublic class Program\n{\n    public static async Task Main(string[] args)\n    {\n        var apiKey = \"your-api-key-here\";\n        var businessUnitId = Guid.Parse(\"your-business-unit-id-here\");\n        var filePath = @\"C:\\path\\to\\your\\file.xlsx\";\n        var apiUrl = \"https://api-data-ingestion.deducta.ai/m2m\";\n\n        var client = new FileUploadClient(apiUrl, apiKey);\n\n        try\n        {\n            var result = await client.UploadFileAsync(filePath, businessUnitId);\n\n            Console.WriteLine(\"Upload successful!\");\n            Console.WriteLine($\"File ID: {result.FileId}\");\n            Console.WriteLine($\"File Name: {result.FileName}\");\n            Console.WriteLine($\"Business Unit ID: {result.BusinessUnitId}\");\n        }\n        catch (FileNotFoundException ex)\n        {\n            Console.WriteLine($\"Error: {ex.Message}\");\n        }\n        catch (ArgumentException ex)\n        {\n            Console.WriteLine($\"Validation Error: {ex.Message}\");\n        }\n        catch (HttpRequestException ex)\n        {\n            Console.WriteLine($\"HTTP Error: {ex.Message}\");\n        }\n        catch (Exception ex)\n        {\n            Console.WriteLine($\"Unexpected error: {ex.Message}\");\n        }\n    }\n}\n","csharp",[19,1211,1212,1217,1222,1227,1232,1237,1242,1246,1251,1255,1260,1265,1270,1274,1279,1284,1289,1294,1298,1302,1307,1312,1317,1321,1326,1331,1336,1341,1345,1349,1354,1359,1364,1368,1373,1378,1382,1386,1391,1396,1400,1405,1409,1413,1418,1423,1428,1433,1437,1442,1446,1451,1455,1460,1465,1470,1474,1479,1484,1489,1493,1498,1503,1507,1512,1517,1521,1526,1530,1535,1540,1544,1548,1553,1557,1561,1565,1570,1574,1579,1584,1589,1593,1597,1602,1607,1611,1616,1620,1626,1632,1638,1644,1649,1655,1660,1666,1671,1677,1682,1688,1694,1700,1706,1711,1717,1722,1728,1733,1739,1744,1750,1755,1761,1766,1772,1777,1783,1788,1794,1799,1804],{"__ignoreMap":61},[319,1213,1214],{"class":321,"line":322},[319,1215,1216],{},"using System;\n",[319,1218,1219],{"class":321,"line":329},[319,1220,1221],{},"using System.IO;\n",[319,1223,1224],{"class":321,"line":357},[319,1225,1226],{},"using System.Net.Http;\n",[319,1228,1229],{"class":321,"line":377},[319,1230,1231],{},"using System.Net.Http.Headers;\n",[319,1233,1234],{"class":321,"line":396},[319,1235,1236],{},"using System.Threading.Tasks;\n",[319,1238,1239],{"class":321,"line":599},[319,1240,1241],{},"using System.Text.Json;\n",[319,1243,1244],{"class":321,"line":614},[319,1245,552],{"emptyLinePlaceholder":551},[319,1247,1248],{"class":321,"line":619},[319,1249,1250],{},"public class FileUploadClient\n",[319,1252,1253],{"class":321,"line":654},[319,1254,326],{},[319,1256,1257],{"class":321,"line":673},[319,1258,1259],{},"    private readonly HttpClient _httpClient;\n",[319,1261,1262],{"class":321,"line":750},[319,1263,1264],{},"    private readonly string _apiKey;\n",[319,1266,1267],{"class":321,"line":756},[319,1268,1269],{},"    private const long MaxFileSizeBytes = 50 * 1024 * 1024; // 50MB\n",[319,1271,1272],{"class":321,"line":762},[319,1273,552],{"emptyLinePlaceholder":551},[319,1275,1276],{"class":321,"line":768},[319,1277,1278],{},"    public FileUploadClient(string baseUrl, string apiKey)\n",[319,1280,1281],{"class":321,"line":773},[319,1282,1283],{},"    {\n",[319,1285,1286],{"class":321,"line":779},[319,1287,1288],{},"        _httpClient = new HttpClient { BaseAddress = new Uri(baseUrl) };\n",[319,1290,1291],{"class":321,"line":785},[319,1292,1293],{},"        _apiKey = apiKey;\n",[319,1295,1296],{"class":321,"line":790},[319,1297,932],{},[319,1299,1300],{"class":321,"line":796},[319,1301,552],{"emptyLinePlaceholder":551},[319,1303,1304],{"class":321,"line":802},[319,1305,1306],{},"    public async Task\u003CFileUploadResponse> UploadFileAsync(\n",[319,1308,1309],{"class":321,"line":808},[319,1310,1311],{},"        string filePath,\n",[319,1313,1314],{"class":321,"line":814},[319,1315,1316],{},"        Guid businessUnitId)\n",[319,1318,1319],{"class":321,"line":819},[319,1320,1283],{},[319,1322,1323],{"class":321,"line":825},[319,1324,1325],{},"        // Validate file exists\n",[319,1327,1328],{"class":321,"line":831},[319,1329,1330],{},"        if (!File.Exists(filePath))\n",[319,1332,1333],{"class":321,"line":836},[319,1334,1335],{},"        {\n",[319,1337,1338],{"class":321,"line":842},[319,1339,1340],{},"            throw new FileNotFoundException(\"File not found\", filePath);\n",[319,1342,1343],{"class":321,"line":848},[319,1344,995],{},[319,1346,1347],{"class":321,"line":853},[319,1348,552],{"emptyLinePlaceholder":551},[319,1350,1351],{"class":321,"line":859},[319,1352,1353],{},"        // Validate file size\n",[319,1355,1356],{"class":321,"line":865},[319,1357,1358],{},"        var fileInfo = new FileInfo(filePath);\n",[319,1360,1361],{"class":321,"line":871},[319,1362,1363],{},"        if (fileInfo.Length > MaxFileSizeBytes)\n",[319,1365,1366],{"class":321,"line":877},[319,1367,1335],{},[319,1369,1370],{"class":321,"line":882},[319,1371,1372],{},"            throw new ArgumentException(\n",[319,1374,1375],{"class":321,"line":888},[319,1376,1377],{},"                $\"File size ({fileInfo.Length / 1024 / 1024}MB) exceeds maximum allowed size of 50MB\");\n",[319,1379,1380],{"class":321,"line":894},[319,1381,995],{},[319,1383,1384],{"class":321,"line":900},[319,1385,552],{"emptyLinePlaceholder":551},[319,1387,1388],{"class":321,"line":906},[319,1389,1390],{},"        // Validate businessUnitId\n",[319,1392,1393],{"class":321,"line":911},[319,1394,1395],{},"        if (businessUnitId == Guid.Empty)\n",[319,1397,1398],{"class":321,"line":917},[319,1399,1335],{},[319,1401,1402],{"class":321,"line":923},[319,1403,1404],{},"            throw new ArgumentException(\"businessUnitId cannot be empty\");\n",[319,1406,1407],{"class":321,"line":929},[319,1408,995],{},[319,1410,1411],{"class":321,"line":935},[319,1412,552],{"emptyLinePlaceholder":551},[319,1414,1415],{"class":321,"line":940},[319,1416,1417],{},"        // Prepare the multipart form data\n",[319,1419,1420],{"class":321,"line":946},[319,1421,1422],{},"        using var content = new MultipartFormDataContent();\n",[319,1424,1425],{"class":321,"line":952},[319,1426,1427],{},"        using var fileStream = File.OpenRead(filePath);\n",[319,1429,1430],{"class":321,"line":957},[319,1431,1432],{},"        using var streamContent = new StreamContent(fileStream);\n",[319,1434,1435],{"class":321,"line":962},[319,1436,552],{"emptyLinePlaceholder":551},[319,1438,1439],{"class":321,"line":968},[319,1440,1441],{},"        streamContent.Headers.ContentType = new MediaTypeHeaderValue(\"application/octet-stream\");\n",[319,1443,1444],{"class":321,"line":974},[319,1445,552],{"emptyLinePlaceholder":551},[319,1447,1448],{"class":321,"line":980},[319,1449,1450],{},"        content.Add(streamContent, \"file\", Path.GetFileName(filePath));\n",[319,1452,1453],{"class":321,"line":986},[319,1454,552],{"emptyLinePlaceholder":551},[319,1456,1457],{"class":321,"line":992},[319,1458,1459],{},"        // Prepare the request\n",[319,1461,1462],{"class":321,"line":998},[319,1463,1464],{},"        var requestUri = $\"/api/file/upload?businessUnitId={businessUnitId}\";\n",[319,1466,1467],{"class":321,"line":1003},[319,1468,1469],{},"        var request = new HttpRequestMessage(HttpMethod.Put, requestUri)\n",[319,1471,1472],{"class":321,"line":1009},[319,1473,1335],{},[319,1475,1476],{"class":321,"line":1015},[319,1477,1478],{},"            Content = content\n",[319,1480,1481],{"class":321,"line":1021},[319,1482,1483],{},"        };\n",[319,1485,1486],{"class":321,"line":1027},[319,1487,1488],{},"        request.Headers.Add(\"X-API-Key\", _apiKey);\n",[319,1490,1491],{"class":321,"line":1033},[319,1492,552],{"emptyLinePlaceholder":551},[319,1494,1495],{"class":321,"line":1039},[319,1496,1497],{},"        // Send the request\n",[319,1499,1500],{"class":321,"line":1044},[319,1501,1502],{},"        var response = await _httpClient.SendAsync(request);\n",[319,1504,1505],{"class":321,"line":1050},[319,1506,552],{"emptyLinePlaceholder":551},[319,1508,1509],{"class":321,"line":1056},[319,1510,1511],{},"        // Parse response\n",[319,1513,1514],{"class":321,"line":1061},[319,1515,1516],{},"        var responseContent = await response.Content.ReadAsStringAsync();\n",[319,1518,1519],{"class":321,"line":1067},[319,1520,552],{"emptyLinePlaceholder":551},[319,1522,1523],{"class":321,"line":1072},[319,1524,1525],{},"        if (!response.IsSuccessStatusCode)\n",[319,1527,1528],{"class":321,"line":1078},[319,1529,1335],{},[319,1531,1532],{"class":321,"line":1084},[319,1533,1534],{},"            throw new HttpRequestException(\n",[319,1536,1537],{"class":321,"line":1090},[319,1538,1539],{},"                $\"Upload failed with status {response.StatusCode}: {responseContent}\");\n",[319,1541,1542],{"class":321,"line":1096},[319,1543,995],{},[319,1545,1546],{"class":321,"line":1102},[319,1547,552],{"emptyLinePlaceholder":551},[319,1549,1550],{"class":321,"line":1108},[319,1551,1552],{},"        return JsonSerializer.Deserialize\u003CFileUploadResponse>(responseContent);\n",[319,1554,1555],{"class":321,"line":1114},[319,1556,932],{},[319,1558,1559],{"class":321,"line":1120},[319,1560,399],{},[319,1562,1563],{"class":321,"line":1126},[319,1564,552],{"emptyLinePlaceholder":551},[319,1566,1567],{"class":321,"line":1132},[319,1568,1569],{},"public class FileUploadResponse\n",[319,1571,1572],{"class":321,"line":1138},[319,1573,326],{},[319,1575,1576],{"class":321,"line":1144},[319,1577,1578],{},"    public Guid FileId { get; set; }\n",[319,1580,1581],{"class":321,"line":1150},[319,1582,1583],{},"    public string FileName { get; set; }\n",[319,1585,1586],{"class":321,"line":1156},[319,1587,1588],{},"    public Guid BusinessUnitId { get; set; }\n",[319,1590,1591],{"class":321,"line":1162},[319,1592,399],{},[319,1594,1595],{"class":321,"line":1168},[319,1596,552],{"emptyLinePlaceholder":551},[319,1598,1599],{"class":321,"line":1174},[319,1600,1601],{},"// Example usage\n",[319,1603,1604],{"class":321,"line":1180},[319,1605,1606],{},"public class Program\n",[319,1608,1609],{"class":321,"line":1186},[319,1610,326],{},[319,1612,1613],{"class":321,"line":1192},[319,1614,1615],{},"    public static async Task Main(string[] args)\n",[319,1617,1618],{"class":321,"line":1198},[319,1619,1283],{},[319,1621,1623],{"class":321,"line":1622},89,[319,1624,1625],{},"        var apiKey = \"your-api-key-here\";\n",[319,1627,1629],{"class":321,"line":1628},90,[319,1630,1631],{},"        var businessUnitId = Guid.Parse(\"your-business-unit-id-here\");\n",[319,1633,1635],{"class":321,"line":1634},91,[319,1636,1637],{},"        var filePath = @\"C:\\path\\to\\your\\file.xlsx\";\n",[319,1639,1641],{"class":321,"line":1640},92,[319,1642,1643],{},"        var apiUrl = \"https://api-data-ingestion.deducta.ai/m2m\";\n",[319,1645,1647],{"class":321,"line":1646},93,[319,1648,552],{"emptyLinePlaceholder":551},[319,1650,1652],{"class":321,"line":1651},94,[319,1653,1654],{},"        var client = new FileUploadClient(apiUrl, apiKey);\n",[319,1656,1658],{"class":321,"line":1657},95,[319,1659,552],{"emptyLinePlaceholder":551},[319,1661,1663],{"class":321,"line":1662},96,[319,1664,1665],{},"        try\n",[319,1667,1669],{"class":321,"line":1668},97,[319,1670,1335],{},[319,1672,1674],{"class":321,"line":1673},98,[319,1675,1676],{},"            var result = await client.UploadFileAsync(filePath, businessUnitId);\n",[319,1678,1680],{"class":321,"line":1679},99,[319,1681,552],{"emptyLinePlaceholder":551},[319,1683,1685],{"class":321,"line":1684},100,[319,1686,1687],{},"            Console.WriteLine(\"Upload successful!\");\n",[319,1689,1691],{"class":321,"line":1690},101,[319,1692,1693],{},"            Console.WriteLine($\"File ID: {result.FileId}\");\n",[319,1695,1697],{"class":321,"line":1696},102,[319,1698,1699],{},"            Console.WriteLine($\"File Name: {result.FileName}\");\n",[319,1701,1703],{"class":321,"line":1702},103,[319,1704,1705],{},"            Console.WriteLine($\"Business Unit ID: {result.BusinessUnitId}\");\n",[319,1707,1709],{"class":321,"line":1708},104,[319,1710,995],{},[319,1712,1714],{"class":321,"line":1713},105,[319,1715,1716],{},"        catch (FileNotFoundException ex)\n",[319,1718,1720],{"class":321,"line":1719},106,[319,1721,1335],{},[319,1723,1725],{"class":321,"line":1724},107,[319,1726,1727],{},"            Console.WriteLine($\"Error: {ex.Message}\");\n",[319,1729,1731],{"class":321,"line":1730},108,[319,1732,995],{},[319,1734,1736],{"class":321,"line":1735},109,[319,1737,1738],{},"        catch (ArgumentException ex)\n",[319,1740,1742],{"class":321,"line":1741},110,[319,1743,1335],{},[319,1745,1747],{"class":321,"line":1746},111,[319,1748,1749],{},"            Console.WriteLine($\"Validation Error: {ex.Message}\");\n",[319,1751,1753],{"class":321,"line":1752},112,[319,1754,995],{},[319,1756,1758],{"class":321,"line":1757},113,[319,1759,1760],{},"        catch (HttpRequestException ex)\n",[319,1762,1764],{"class":321,"line":1763},114,[319,1765,1335],{},[319,1767,1769],{"class":321,"line":1768},115,[319,1770,1771],{},"            Console.WriteLine($\"HTTP Error: {ex.Message}\");\n",[319,1773,1775],{"class":321,"line":1774},116,[319,1776,995],{},[319,1778,1780],{"class":321,"line":1779},117,[319,1781,1782],{},"        catch (Exception ex)\n",[319,1784,1786],{"class":321,"line":1785},118,[319,1787,1335],{},[319,1789,1791],{"class":321,"line":1790},119,[319,1792,1793],{},"            Console.WriteLine($\"Unexpected error: {ex.Message}\");\n",[319,1795,1797],{"class":321,"line":1796},120,[319,1798,995],{},[319,1800,1802],{"class":321,"line":1801},121,[319,1803,932],{},[319,1805,1807],{"class":321,"line":1806},122,[319,1808,399],{},[10,1810,1812],{"id":1811},"best-practices","Best Practices",[1814,1815,1816,1822,1847,1853,1859,1872],"ol",{},[75,1817,1818,1821],{},[41,1819,1820],{},"Error Handling:"," Always implement proper error handling to catch validation errors, authentication failures, and server errors.",[75,1823,1824,1827,1828],{},[41,1825,1826],{},"File Validation:"," Validate files on the client side before uploading to avoid unnecessary network traffic:\n",[72,1829,1830,1841,1844],{},[75,1831,1832,1833,22,1835,1837,1838,1840],{},"Use an accepted format: Excel (",[19,1834,21],{},[19,1836,25],{},"), or Parquet (",[19,1839,29],{},") — Excel and Parquet are preferred",[75,1842,1843],{},"Verify file size is within your agreed limit (50 MB by default)",[75,1845,1846],{},"Ensure file is not empty",[75,1848,1849,1852],{},[41,1850,1851],{},"Retry Logic:"," Implement exponential backoff retry logic for transient failures (5xx errors).",[75,1854,1855,1858],{},[41,1856,1857],{},"Logging:"," Log all upload attempts, including file names, sizes, and response data for troubleshooting.",[75,1860,1861,1864],{},[41,1862,1863],{},"Security:",[72,1865,1866,1869],{},[75,1867,1868],{},"Never hardcode API keys in source code",[75,1870,1871],{},"Use environment variables or secure configuration management",[75,1873,1874,1877],{},[41,1875,1876],{},"Timeouts:"," Set appropriate timeouts for large file uploads (recommended: 5-10 minutes for 50MB files).",[10,1879,1881],{"id":1880},"support","Support",[15,1883,1884],{},"For API key requests, technical issues, or questions, please contact your Deducta representative.",[1886,1887,1888],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":61,"searchDepth":329,"depth":329,"links":1890},[1891,1892,1893,1894,1895,1899,1900,1904,1907,1908],{"id":12,"depth":329,"text":13},{"id":33,"depth":329,"text":34},{"id":69,"depth":329,"text":70},{"id":102,"depth":329,"text":103},{"id":172,"depth":329,"text":173,"children":1896},[1897,1898],{"id":180,"depth":357,"text":181},{"id":211,"depth":357,"text":212},{"id":229,"depth":329,"text":230},{"id":305,"depth":329,"text":306,"children":1901},[1902,1903],{"id":309,"depth":357,"text":310},{"id":402,"depth":357,"text":403},{"id":528,"depth":329,"text":529,"children":1905},[1906],{"id":532,"depth":357,"text":533},{"id":1811,"depth":329,"text":1812},{"id":1880,"depth":329,"text":1881},"Data Ingestion","Automatically upload data files to Deducta for processing via a secure, encrypted, API-key authenticated endpoint. Excel and Parquet are preferred.","md",null,{},"File Upload API","/docs/external-file-upload-api",{"title":5,"description":1910},{"loc":1915},"docs/external-file-upload-api","87RtcJDO2go3ek0OHuepGCTSCDr4bSwgz5m7uc6YPXc",[1921],{"id":4,"title":5,"body":1922,"category":1909,"description":1910,"extension":1911,"head":1912,"meta":3333,"navLabel":1914,"navigation":551,"ogImage":1912,"order":322,"path":1915,"robots":1912,"schemaOrg":1912,"seo":3334,"sitemap":3335,"stem":1918,"__hash__":1919},{"type":7,"value":1923,"toc":3313},[1924,1926,1934,1936,1938,1942,1946,1950,1955,1957,1959,1979,1981,2027,2029,2031,2033,2053,2055,2065,2067,2073,2075,2079,2081,2095,2097,2113,2115,2117,2181,2183,2185,2213,2215,2233,2235,2237,2239,2285,2287,2289,2407,2765,3259,3261,3307,3309,3311],[10,1925,13],{"id":12},[15,1927,17,1928,22,1930,26,1932,30],{},[19,1929,21],{},[19,1931,25],{},[19,1933,29],{},[10,1935,34],{"id":33},[15,1937,37],{},[15,1939,1940],{},[41,1941,43],{},[15,1943,1944],{},[19,1945,48],{},[15,1947,1948],{},[41,1949,53],{},[55,1951,1953],{"className":1952,"code":59,"language":60,"meta":61},[58],[19,1954,59],{"__ignoreMap":61},[15,1956,66],{},[10,1958,70],{"id":69},[72,1960,1961,1967,1973],{},[75,1962,1963,80,1965],{},[41,1964,79],{},[19,1966,83],{},[75,1968,1969,80,1971],{},[41,1970,88],{},[19,1972,91],{},[75,1974,1975,80,1977],{},[41,1976,96],{},[19,1978,99],{},[10,1980,103],{"id":102},[105,1982,1983,1997],{},[108,1984,1985],{},[111,1986,1987,1989,1991,1993,1995],{},[114,1988,116],{},[114,1990,119],{},[114,1992,122],{},[114,1994,125],{},[114,1996,128],{},[130,1998,1999,2013],{},[111,2000,2001,2005,2007,2009,2011],{},[135,2002,2003],{},[19,2004,139],{},[135,2006,142],{},[135,2008,145],{},[135,2010,148],{},[135,2012,151],{},[111,2014,2015,2019,2021,2023,2025],{},[135,2016,2017],{},[19,2018,158],{},[135,2020,161],{},[135,2022,164],{},[135,2024,148],{},[135,2026,169],{},[10,2028,173],{"id":172},[15,2030,176],{},[178,2032,181],{"id":180},[72,2034,2035,2045,2049],{},[75,2036,2037,189,2039,22,2041,26,2043,196],{},[41,2038,188],{},[19,2040,21],{},[19,2042,25],{},[19,2044,29],{},[75,2046,2047,202],{},[41,2048,201],{},[75,2050,2051,208],{},[41,2052,207],{},[178,2054,212],{"id":211},[72,2056,2057],{},[75,2058,2059,220,2061,2063],{},[41,2060,219],{},[222,2062],{},[19,2064,226],{},[10,2066,230],{"id":229},[15,2068,233,2069,237,2071,241],{},[41,2070,236],{},[41,2072,240],{},[15,2074,244],{},[15,2076,2077],{},[19,2078,249],{},[15,2080,252],{},[72,2082,2083,2087,2091],{},[75,2084,2085,260],{},[19,2086,259],{},[75,2088,2089,266],{},[19,2090,265],{},[75,2092,2093,272],{},[19,2094,271],{},[15,2096,275],{},[72,2098,2099,2101,2109],{},[75,2100,280],{},[75,2102,283,2103,287,2105,291,2107,295],{},[19,2104,286],{},[19,2106,290],{},[19,2108,294],{},[75,2110,298,2111,302],{},[19,2112,301],{},[10,2114,306],{"id":305},[178,2116,310],{"id":309},[55,2118,2119],{"className":313,"code":314,"language":315,"meta":61,"style":61},[19,2120,2121,2125,2143,2161,2177],{"__ignoreMap":61},[319,2122,2123],{"class":321,"line":322},[319,2124,326],{"class":325},[319,2126,2127,2129,2131,2133,2135,2137,2139,2141],{"class":321,"line":329},[319,2128,332],{"class":325},[319,2130,336],{"class":335},[319,2132,339],{"class":325},[319,2134,342],{"class":325},[319,2136,345],{"class":325},[319,2138,349],{"class":348},[319,2140,339],{"class":325},[319,2142,354],{"class":325},[319,2144,2145,2147,2149,2151,2153,2155,2157,2159],{"class":321,"line":357},[319,2146,332],{"class":325},[319,2148,301],{"class":335},[319,2150,339],{"class":325},[319,2152,342],{"class":325},[319,2154,345],{"class":325},[319,2156,370],{"class":348},[319,2158,339],{"class":325},[319,2160,354],{"class":325},[319,2162,2163,2165,2167,2169,2171,2173,2175],{"class":321,"line":377},[319,2164,332],{"class":325},[319,2166,158],{"class":335},[319,2168,339],{"class":325},[319,2170,342],{"class":325},[319,2172,345],{"class":325},[319,2174,390],{"class":348},[319,2176,393],{"class":325},[319,2178,2179],{"class":321,"line":396},[319,2180,399],{"class":325},[178,2182,403],{"id":402},[405,2184,408],{"id":407},[55,2186,2187],{"className":313,"code":411,"language":315,"meta":61,"style":61},[19,2188,2189,2193,2209],{"__ignoreMap":61},[319,2190,2191],{"class":321,"line":322},[319,2192,326],{"class":325},[319,2194,2195,2197,2199,2201,2203,2205,2207],{"class":321,"line":329},[319,2196,332],{"class":325},[319,2198,424],{"class":335},[319,2200,339],{"class":325},[319,2202,342],{"class":325},[319,2204,345],{"class":325},[319,2206,433],{"class":348},[319,2208,393],{"class":325},[319,2210,2211],{"class":321,"line":357},[319,2212,399],{"class":325},[15,2214,442],{},[72,2216,2217,2221,2225,2229],{},[75,2218,2219],{},[19,2220,449],{},[75,2222,2223],{},[19,2224,454],{},[75,2226,2227],{},[19,2228,459],{},[75,2230,2231],{},[19,2232,464],{},[405,2234,468],{"id":467},[15,2236,471],{},[405,2238,475],{"id":474},[55,2240,2241],{"className":313,"code":478,"language":315,"meta":61,"style":61},[19,2242,2243,2247,2265,2281],{"__ignoreMap":61},[319,2244,2245],{"class":321,"line":322},[319,2246,326],{"class":325},[319,2248,2249,2251,2253,2255,2257,2259,2261,2263],{"class":321,"line":329},[319,2250,332],{"class":325},[319,2252,424],{"class":335},[319,2254,339],{"class":325},[319,2256,342],{"class":325},[319,2258,345],{"class":325},[319,2260,499],{"class":348},[319,2262,339],{"class":325},[319,2264,354],{"class":325},[319,2266,2267,2269,2271,2273,2275,2277,2279],{"class":321,"line":357},[319,2268,332],{"class":325},[319,2270,510],{"class":335},[319,2272,339],{"class":325},[319,2274,342],{"class":325},[319,2276,345],{"class":325},[319,2278,519],{"class":348},[319,2280,393],{"class":325},[319,2282,2283],{"class":321,"line":377},[319,2284,399],{"class":325},[10,2286,529],{"id":528},[178,2288,533],{"id":532},[55,2290,2291],{"className":536,"code":537,"language":538,"meta":61,"style":61},[19,2292,2293,2297,2301,2313,2325,2337,2349,2353,2377,2393],{"__ignoreMap":61},[319,2294,2295],{"class":321,"line":322},[319,2296,546],{"class":545},[319,2298,2299],{"class":321,"line":329},[319,2300,552],{"emptyLinePlaceholder":551},[319,2302,2303,2305,2307,2309,2311],{"class":321,"line":357},[319,2304,558],{"class":557},[319,2306,561],{"class":325},[319,2308,339],{"class":325},[319,2310,566],{"class":348},[319,2312,393],{"class":325},[319,2314,2315,2317,2319,2321,2323],{"class":321,"line":377},[319,2316,573],{"class":557},[319,2318,561],{"class":325},[319,2320,339],{"class":325},[319,2322,580],{"class":348},[319,2324,393],{"class":325},[319,2326,2327,2329,2331,2333,2335],{"class":321,"line":396},[319,2328,587],{"class":557},[319,2330,561],{"class":325},[319,2332,339],{"class":325},[319,2334,594],{"class":348},[319,2336,393],{"class":325},[319,2338,2339,2341,2343,2345,2347],{"class":321,"line":599},[319,2340,602],{"class":557},[319,2342,561],{"class":325},[319,2344,339],{"class":325},[319,2346,609],{"class":348},[319,2348,393],{"class":325},[319,2350,2351],{"class":321,"line":614},[319,2352,552],{"emptyLinePlaceholder":551},[319,2354,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375],{"class":321,"line":619},[319,2356,623],{"class":622},[319,2358,626],{"class":348},[319,2360,629],{"class":348},[319,2362,632],{"class":325},[319,2364,602],{"class":557},[319,2366,637],{"class":325},[319,2368,640],{"class":348},[319,2370,643],{"class":325},[319,2372,573],{"class":557},[319,2374,648],{"class":325},[319,2376,651],{"class":557},[319,2378,2379,2381,2383,2385,2387,2389,2391],{"class":321,"line":654},[319,2380,657],{"class":348},[319,2382,345],{"class":325},[319,2384,662],{"class":348},[319,2386,643],{"class":325},[319,2388,558],{"class":557},[319,2390,648],{"class":325},[319,2392,651],{"class":557},[319,2394,2395,2397,2399,2401,2403,2405],{"class":321,"line":673},[319,2396,676],{"class":348},[319,2398,345],{"class":325},[319,2400,681],{"class":348},[319,2402,643],{"class":325},[319,2404,587],{"class":557},[319,2406,688],{"class":325},[690,2408,2409],{"summary":692},[55,2410,2411],{"className":695,"code":696,"language":697,"meta":61,"style":61},[19,2412,2413,2417,2421,2425,2429,2433,2437,2441,2445,2449,2453,2457,2461,2465,2469,2473,2477,2481,2485,2489,2493,2497,2501,2505,2509,2513,2517,2521,2525,2529,2533,2537,2541,2545,2549,2553,2557,2561,2565,2569,2573,2577,2581,2585,2589,2593,2597,2601,2605,2609,2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665,2669,2673,2677,2681,2685,2689,2693,2697,2701,2705,2709,2713,2717,2721,2725,2729,2733,2737,2741,2745,2749,2753,2757,2761],{"__ignoreMap":61},[319,2414,2415],{"class":321,"line":322},[319,2416,704],{},[319,2418,2419],{"class":321,"line":329},[319,2420,709],{},[319,2422,2423],{"class":321,"line":357},[319,2424,714],{},[319,2426,2427],{"class":321,"line":377},[319,2428,552],{"emptyLinePlaceholder":551},[319,2430,2431],{"class":321,"line":396},[319,2432,723],{},[319,2434,2435],{"class":321,"line":599},[319,2436,728],{},[319,2438,2439],{"class":321,"line":614},[319,2440,733],{},[319,2442,2443],{"class":321,"line":619},[319,2444,738],{},[319,2446,2447],{"class":321,"line":654},[319,2448,743],{},[319,2450,2451],{"class":321,"line":673},[319,2452,552],{"emptyLinePlaceholder":551},[319,2454,2455],{"class":321,"line":750},[319,2456,753],{},[319,2458,2459],{"class":321,"line":756},[319,2460,759],{},[319,2462,2463],{"class":321,"line":762},[319,2464,765],{},[319,2466,2467],{"class":321,"line":768},[319,2468,552],{"emptyLinePlaceholder":551},[319,2470,2471],{"class":321,"line":773},[319,2472,776],{},[319,2474,2475],{"class":321,"line":779},[319,2476,782],{},[319,2478,2479],{"class":321,"line":785},[319,2480,552],{"emptyLinePlaceholder":551},[319,2482,2483],{"class":321,"line":790},[319,2484,793],{},[319,2486,2487],{"class":321,"line":796},[319,2488,799],{},[319,2490,2491],{"class":321,"line":802},[319,2492,805],{},[319,2494,2495],{"class":321,"line":808},[319,2496,811],{},[319,2498,2499],{"class":321,"line":814},[319,2500,552],{"emptyLinePlaceholder":551},[319,2502,2503],{"class":321,"line":819},[319,2504,822],{},[319,2506,2507],{"class":321,"line":825},[319,2508,828],{},[319,2510,2511],{"class":321,"line":831},[319,2512,552],{"emptyLinePlaceholder":551},[319,2514,2515],{"class":321,"line":836},[319,2516,839],{},[319,2518,2519],{"class":321,"line":842},[319,2520,845],{},[319,2522,2523],{"class":321,"line":848},[319,2524,759],{},[319,2526,2527],{"class":321,"line":853},[319,2528,856],{},[319,2530,2531],{"class":321,"line":859},[319,2532,862],{},[319,2534,2535],{"class":321,"line":865},[319,2536,868],{},[319,2538,2539],{"class":321,"line":871},[319,2540,874],{},[319,2542,2543],{"class":321,"line":877},[319,2544,552],{"emptyLinePlaceholder":551},[319,2546,2547],{"class":321,"line":882},[319,2548,885],{},[319,2550,2551],{"class":321,"line":888},[319,2552,891],{},[319,2554,2555],{"class":321,"line":894},[319,2556,897],{},[319,2558,2559],{"class":321,"line":900},[319,2560,903],{},[319,2562,2563],{"class":321,"line":906},[319,2564,552],{"emptyLinePlaceholder":551},[319,2566,2567],{"class":321,"line":911},[319,2568,914],{},[319,2570,2571],{"class":321,"line":917},[319,2572,920],{},[319,2574,2575],{"class":321,"line":923},[319,2576,926],{},[319,2578,2579],{"class":321,"line":929},[319,2580,932],{},[319,2582,2583],{"class":321,"line":935},[319,2584,552],{"emptyLinePlaceholder":551},[319,2586,2587],{"class":321,"line":940},[319,2588,943],{},[319,2590,2591],{"class":321,"line":946},[319,2592,949],{},[319,2594,2595],{"class":321,"line":952},[319,2596,932],{},[319,2598,2599],{"class":321,"line":957},[319,2600,552],{"emptyLinePlaceholder":551},[319,2602,2603],{"class":321,"line":962},[319,2604,965],{},[319,2606,2607],{"class":321,"line":968},[319,2608,971],{},[319,2610,2611],{"class":321,"line":974},[319,2612,977],{},[319,2614,2615],{"class":321,"line":980},[319,2616,983],{},[319,2618,2619],{"class":321,"line":986},[319,2620,989],{},[319,2622,2623],{"class":321,"line":992},[319,2624,995],{},[319,2626,2627],{"class":321,"line":998},[319,2628,552],{"emptyLinePlaceholder":551},[319,2630,2631],{"class":321,"line":1003},[319,2632,1006],{},[319,2634,2635],{"class":321,"line":1009},[319,2636,1012],{},[319,2638,2639],{"class":321,"line":1015},[319,2640,1018],{},[319,2642,2643],{"class":321,"line":1021},[319,2644,1024],{},[319,2646,2647],{"class":321,"line":1027},[319,2648,1030],{},[319,2650,2651],{"class":321,"line":1033},[319,2652,1036],{},[319,2654,2655],{"class":321,"line":1039},[319,2656,552],{"emptyLinePlaceholder":551},[319,2658,2659],{"class":321,"line":1044},[319,2660,1047],{},[319,2662,2663],{"class":321,"line":1050},[319,2664,1053],{},[319,2666,2667],{"class":321,"line":1056},[319,2668,552],{"emptyLinePlaceholder":551},[319,2670,2671],{"class":321,"line":1061},[319,2672,1064],{},[319,2674,2675],{"class":321,"line":1067},[319,2676,552],{"emptyLinePlaceholder":551},[319,2678,2679],{"class":321,"line":1072},[319,2680,1075],{},[319,2682,2683],{"class":321,"line":1078},[319,2684,1081],{},[319,2686,2687],{"class":321,"line":1084},[319,2688,1087],{},[319,2690,2691],{"class":321,"line":1090},[319,2692,1093],{},[319,2694,2695],{"class":321,"line":1096},[319,2696,1099],{},[319,2698,2699],{"class":321,"line":1102},[319,2700,1105],{},[319,2702,2703],{"class":321,"line":1108},[319,2704,1111],{},[319,2706,2707],{"class":321,"line":1114},[319,2708,1117],{},[319,2710,2711],{"class":321,"line":1120},[319,2712,1123],{},[319,2714,2715],{"class":321,"line":1126},[319,2716,1129],{},[319,2718,2719],{"class":321,"line":1132},[319,2720,1135],{},[319,2722,2723],{"class":321,"line":1138},[319,2724,1141],{},[319,2726,2727],{"class":321,"line":1144},[319,2728,1147],{},[319,2730,2731],{"class":321,"line":1150},[319,2732,1153],{},[319,2734,2735],{"class":321,"line":1156},[319,2736,1159],{},[319,2738,2739],{"class":321,"line":1162},[319,2740,1165],{},[319,2742,2743],{"class":321,"line":1168},[319,2744,1171],{},[319,2746,2747],{"class":321,"line":1174},[319,2748,1177],{},[319,2750,2751],{"class":321,"line":1180},[319,2752,1183],{},[319,2754,2755],{"class":321,"line":1186},[319,2756,1189],{},[319,2758,2759],{"class":321,"line":1192},[319,2760,1195],{},[319,2762,2763],{"class":321,"line":1198},[319,2764,1201],{},[690,2766,2767],{"summary":1204},[55,2768,2769],{"className":1207,"code":1208,"language":1209,"meta":61,"style":61},[19,2770,2771,2775,2779,2783,2787,2791,2795,2799,2803,2807,2811,2815,2819,2823,2827,2831,2835,2839,2843,2847,2851,2855,2859,2863,2867,2871,2875,2879,2883,2887,2891,2895,2899,2903,2907,2911,2915,2919,2923,2927,2931,2935,2939,2943,2947,2951,2955,2959,2963,2967,2971,2975,2979,2983,2987,2991,2995,2999,3003,3007,3011,3015,3019,3023,3027,3031,3035,3039,3043,3047,3051,3055,3059,3063,3067,3071,3075,3079,3083,3087,3091,3095,3099,3103,3107,3111,3115,3119,3123,3127,3131,3135,3139,3143,3147,3151,3155,3159,3163,3167,3171,3175,3179,3183,3187,3191,3195,3199,3203,3207,3211,3215,3219,3223,3227,3231,3235,3239,3243,3247,3251,3255],{"__ignoreMap":61},[319,2772,2773],{"class":321,"line":322},[319,2774,1216],{},[319,2776,2777],{"class":321,"line":329},[319,2778,1221],{},[319,2780,2781],{"class":321,"line":357},[319,2782,1226],{},[319,2784,2785],{"class":321,"line":377},[319,2786,1231],{},[319,2788,2789],{"class":321,"line":396},[319,2790,1236],{},[319,2792,2793],{"class":321,"line":599},[319,2794,1241],{},[319,2796,2797],{"class":321,"line":614},[319,2798,552],{"emptyLinePlaceholder":551},[319,2800,2801],{"class":321,"line":619},[319,2802,1250],{},[319,2804,2805],{"class":321,"line":654},[319,2806,326],{},[319,2808,2809],{"class":321,"line":673},[319,2810,1259],{},[319,2812,2813],{"class":321,"line":750},[319,2814,1264],{},[319,2816,2817],{"class":321,"line":756},[319,2818,1269],{},[319,2820,2821],{"class":321,"line":762},[319,2822,552],{"emptyLinePlaceholder":551},[319,2824,2825],{"class":321,"line":768},[319,2826,1278],{},[319,2828,2829],{"class":321,"line":773},[319,2830,1283],{},[319,2832,2833],{"class":321,"line":779},[319,2834,1288],{},[319,2836,2837],{"class":321,"line":785},[319,2838,1293],{},[319,2840,2841],{"class":321,"line":790},[319,2842,932],{},[319,2844,2845],{"class":321,"line":796},[319,2846,552],{"emptyLinePlaceholder":551},[319,2848,2849],{"class":321,"line":802},[319,2850,1306],{},[319,2852,2853],{"class":321,"line":808},[319,2854,1311],{},[319,2856,2857],{"class":321,"line":814},[319,2858,1316],{},[319,2860,2861],{"class":321,"line":819},[319,2862,1283],{},[319,2864,2865],{"class":321,"line":825},[319,2866,1325],{},[319,2868,2869],{"class":321,"line":831},[319,2870,1330],{},[319,2872,2873],{"class":321,"line":836},[319,2874,1335],{},[319,2876,2877],{"class":321,"line":842},[319,2878,1340],{},[319,2880,2881],{"class":321,"line":848},[319,2882,995],{},[319,2884,2885],{"class":321,"line":853},[319,2886,552],{"emptyLinePlaceholder":551},[319,2888,2889],{"class":321,"line":859},[319,2890,1353],{},[319,2892,2893],{"class":321,"line":865},[319,2894,1358],{},[319,2896,2897],{"class":321,"line":871},[319,2898,1363],{},[319,2900,2901],{"class":321,"line":877},[319,2902,1335],{},[319,2904,2905],{"class":321,"line":882},[319,2906,1372],{},[319,2908,2909],{"class":321,"line":888},[319,2910,1377],{},[319,2912,2913],{"class":321,"line":894},[319,2914,995],{},[319,2916,2917],{"class":321,"line":900},[319,2918,552],{"emptyLinePlaceholder":551},[319,2920,2921],{"class":321,"line":906},[319,2922,1390],{},[319,2924,2925],{"class":321,"line":911},[319,2926,1395],{},[319,2928,2929],{"class":321,"line":917},[319,2930,1335],{},[319,2932,2933],{"class":321,"line":923},[319,2934,1404],{},[319,2936,2937],{"class":321,"line":929},[319,2938,995],{},[319,2940,2941],{"class":321,"line":935},[319,2942,552],{"emptyLinePlaceholder":551},[319,2944,2945],{"class":321,"line":940},[319,2946,1417],{},[319,2948,2949],{"class":321,"line":946},[319,2950,1422],{},[319,2952,2953],{"class":321,"line":952},[319,2954,1427],{},[319,2956,2957],{"class":321,"line":957},[319,2958,1432],{},[319,2960,2961],{"class":321,"line":962},[319,2962,552],{"emptyLinePlaceholder":551},[319,2964,2965],{"class":321,"line":968},[319,2966,1441],{},[319,2968,2969],{"class":321,"line":974},[319,2970,552],{"emptyLinePlaceholder":551},[319,2972,2973],{"class":321,"line":980},[319,2974,1450],{},[319,2976,2977],{"class":321,"line":986},[319,2978,552],{"emptyLinePlaceholder":551},[319,2980,2981],{"class":321,"line":992},[319,2982,1459],{},[319,2984,2985],{"class":321,"line":998},[319,2986,1464],{},[319,2988,2989],{"class":321,"line":1003},[319,2990,1469],{},[319,2992,2993],{"class":321,"line":1009},[319,2994,1335],{},[319,2996,2997],{"class":321,"line":1015},[319,2998,1478],{},[319,3000,3001],{"class":321,"line":1021},[319,3002,1483],{},[319,3004,3005],{"class":321,"line":1027},[319,3006,1488],{},[319,3008,3009],{"class":321,"line":1033},[319,3010,552],{"emptyLinePlaceholder":551},[319,3012,3013],{"class":321,"line":1039},[319,3014,1497],{},[319,3016,3017],{"class":321,"line":1044},[319,3018,1502],{},[319,3020,3021],{"class":321,"line":1050},[319,3022,552],{"emptyLinePlaceholder":551},[319,3024,3025],{"class":321,"line":1056},[319,3026,1511],{},[319,3028,3029],{"class":321,"line":1061},[319,3030,1516],{},[319,3032,3033],{"class":321,"line":1067},[319,3034,552],{"emptyLinePlaceholder":551},[319,3036,3037],{"class":321,"line":1072},[319,3038,1525],{},[319,3040,3041],{"class":321,"line":1078},[319,3042,1335],{},[319,3044,3045],{"class":321,"line":1084},[319,3046,1534],{},[319,3048,3049],{"class":321,"line":1090},[319,3050,1539],{},[319,3052,3053],{"class":321,"line":1096},[319,3054,995],{},[319,3056,3057],{"class":321,"line":1102},[319,3058,552],{"emptyLinePlaceholder":551},[319,3060,3061],{"class":321,"line":1108},[319,3062,1552],{},[319,3064,3065],{"class":321,"line":1114},[319,3066,932],{},[319,3068,3069],{"class":321,"line":1120},[319,3070,399],{},[319,3072,3073],{"class":321,"line":1126},[319,3074,552],{"emptyLinePlaceholder":551},[319,3076,3077],{"class":321,"line":1132},[319,3078,1569],{},[319,3080,3081],{"class":321,"line":1138},[319,3082,326],{},[319,3084,3085],{"class":321,"line":1144},[319,3086,1578],{},[319,3088,3089],{"class":321,"line":1150},[319,3090,1583],{},[319,3092,3093],{"class":321,"line":1156},[319,3094,1588],{},[319,3096,3097],{"class":321,"line":1162},[319,3098,399],{},[319,3100,3101],{"class":321,"line":1168},[319,3102,552],{"emptyLinePlaceholder":551},[319,3104,3105],{"class":321,"line":1174},[319,3106,1601],{},[319,3108,3109],{"class":321,"line":1180},[319,3110,1606],{},[319,3112,3113],{"class":321,"line":1186},[319,3114,326],{},[319,3116,3117],{"class":321,"line":1192},[319,3118,1615],{},[319,3120,3121],{"class":321,"line":1198},[319,3122,1283],{},[319,3124,3125],{"class":321,"line":1622},[319,3126,1625],{},[319,3128,3129],{"class":321,"line":1628},[319,3130,1631],{},[319,3132,3133],{"class":321,"line":1634},[319,3134,1637],{},[319,3136,3137],{"class":321,"line":1640},[319,3138,1643],{},[319,3140,3141],{"class":321,"line":1646},[319,3142,552],{"emptyLinePlaceholder":551},[319,3144,3145],{"class":321,"line":1651},[319,3146,1654],{},[319,3148,3149],{"class":321,"line":1657},[319,3150,552],{"emptyLinePlaceholder":551},[319,3152,3153],{"class":321,"line":1662},[319,3154,1665],{},[319,3156,3157],{"class":321,"line":1668},[319,3158,1335],{},[319,3160,3161],{"class":321,"line":1673},[319,3162,1676],{},[319,3164,3165],{"class":321,"line":1679},[319,3166,552],{"emptyLinePlaceholder":551},[319,3168,3169],{"class":321,"line":1684},[319,3170,1687],{},[319,3172,3173],{"class":321,"line":1690},[319,3174,1693],{},[319,3176,3177],{"class":321,"line":1696},[319,3178,1699],{},[319,3180,3181],{"class":321,"line":1702},[319,3182,1705],{},[319,3184,3185],{"class":321,"line":1708},[319,3186,995],{},[319,3188,3189],{"class":321,"line":1713},[319,3190,1716],{},[319,3192,3193],{"class":321,"line":1719},[319,3194,1335],{},[319,3196,3197],{"class":321,"line":1724},[319,3198,1727],{},[319,3200,3201],{"class":321,"line":1730},[319,3202,995],{},[319,3204,3205],{"class":321,"line":1735},[319,3206,1738],{},[319,3208,3209],{"class":321,"line":1741},[319,3210,1335],{},[319,3212,3213],{"class":321,"line":1746},[319,3214,1749],{},[319,3216,3217],{"class":321,"line":1752},[319,3218,995],{},[319,3220,3221],{"class":321,"line":1757},[319,3222,1760],{},[319,3224,3225],{"class":321,"line":1763},[319,3226,1335],{},[319,3228,3229],{"class":321,"line":1768},[319,3230,1771],{},[319,3232,3233],{"class":321,"line":1774},[319,3234,995],{},[319,3236,3237],{"class":321,"line":1779},[319,3238,1782],{},[319,3240,3241],{"class":321,"line":1785},[319,3242,1335],{},[319,3244,3245],{"class":321,"line":1790},[319,3246,1793],{},[319,3248,3249],{"class":321,"line":1796},[319,3250,995],{},[319,3252,3253],{"class":321,"line":1801},[319,3254,932],{},[319,3256,3257],{"class":321,"line":1806},[319,3258,399],{},[10,3260,1812],{"id":1811},[1814,3262,3263,3267,3285,3289,3293,3303],{},[75,3264,3265,1821],{},[41,3266,1820],{},[75,3268,3269,1827,3271],{},[41,3270,1826],{},[72,3272,3273,3281,3283],{},[75,3274,1832,3275,22,3277,1837,3279,1840],{},[19,3276,21],{},[19,3278,25],{},[19,3280,29],{},[75,3282,1843],{},[75,3284,1846],{},[75,3286,3287,1852],{},[41,3288,1851],{},[75,3290,3291,1858],{},[41,3292,1857],{},[75,3294,3295,3297],{},[41,3296,1863],{},[72,3298,3299,3301],{},[75,3300,1868],{},[75,3302,1871],{},[75,3304,3305,1877],{},[41,3306,1876],{},[10,3308,1881],{"id":1880},[15,3310,1884],{},[1886,3312,1888],{},{"title":61,"searchDepth":329,"depth":329,"links":3314},[3315,3316,3317,3318,3319,3323,3324,3328,3331,3332],{"id":12,"depth":329,"text":13},{"id":33,"depth":329,"text":34},{"id":69,"depth":329,"text":70},{"id":102,"depth":329,"text":103},{"id":172,"depth":329,"text":173,"children":3320},[3321,3322],{"id":180,"depth":357,"text":181},{"id":211,"depth":357,"text":212},{"id":229,"depth":329,"text":230},{"id":305,"depth":329,"text":306,"children":3325},[3326,3327],{"id":309,"depth":357,"text":310},{"id":402,"depth":357,"text":403},{"id":528,"depth":329,"text":529,"children":3329},[3330],{"id":532,"depth":357,"text":533},{"id":1811,"depth":329,"text":1812},{"id":1880,"depth":329,"text":1881},{},{"title":5,"description":1910},{"loc":1915},1784635392825]