> For the complete documentation index, see [llms.txt](https://klearstack.gitbook.io/klearstack-api-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://klearstack.gitbook.io/klearstack-api-documentation/upload-documents/upload-multiple-documents-in-a-zip-folder-and-get-batch-id.md).

# Upload Multiple Documents In A Zip Folder And Get Batch Id

Endpoint Name: `uploadbatch`

Request type : `POST`

Authorization: Bearer token as header

Endpoint Details: This API is used to get a single batch id for all the invoices uploaded by the user in the form of a zip folder.

### Request Type

<table data-header-hidden><thead><tr><th width="140.54547119140625"></th><th></th></tr></thead><tbody><tr><td>Method</td><td>URL</td></tr><tr><td>POST</td><td><code>URL/access/klearstack/uploadbatch</code></td></tr></tbody></table>

### Request Body

<table data-header-hidden><thead><tr><th width="173"></th><th width="103"></th><th width="94.2728271484375"></th><th></th></tr></thead><tbody><tr><td>Params</td><td>Values</td><td>Required</td><td>Description</td></tr><tr><td>company_name</td><td>string</td><td>Yes</td><td>Name of the company.</td></tr><tr><td>username</td><td>string</td><td>Yes</td><td>Username for a particular user of a company.</td></tr><tr><td>password</td><td>string</td><td>Yes</td><td>Password for a particular user of a company.</td></tr><tr><td>file</td><td>Binary</td><td>Yes</td><td>Zip folder containing images/pdf.</td></tr><tr><td>processing_pref</td><td>string</td><td>Yes</td><td>Either “Speed” or “Accuracy” ” (It’s not case sensitive).</td></tr><tr><td>document_type</td><td>string</td><td>Yes</td><td><p>Type of document to be processed - </p><p>“Invoices”, “Receipts”,  “PurchaseOrders”,“NACH”,“LoanAgreement” or “Insurances”.</p></td></tr><tr><td>invoice_type</td><td>string</td><td>Yes</td><td><p>“B2B” for invoices commissioned by a business to another business directly;</p><p>“B2C” for invoices commissioned by a business to a consumer. </p><p>“B2C” for Insurances.</p></td></tr><tr><td>source_name</td><td>String</td><td>No</td><td>API</td></tr><tr><td>priority_flag</td><td>String</td><td>No</td><td>true or false </td></tr><tr><td>account_id</td><td>String</td><td>No</td><td>Account_id number</td></tr><tr><td>set_reference_number</td><td>String</td><td>No</td><td>For adding document in Existing Set</td></tr><tr><td>set_name</td><td>String</td><td>No</td><td>For assigning Name to document set, it cannot be updated after set is created.</td></tr><tr><td>create_new_set</td><td>String</td><td>No</td><td>Flag needs to be True for creating new set, the param if set to True will create a new set with the given set_name and assign new set_reference_number to the document.</td></tr></tbody></table>

### Shell

* Request Body

```sh
curl --location "URL/access/klearstack/uploadbatch" \
  -H "Authorization: Bearer your_token_here" \
  -F "company_name=Replace_Company_Name_Here" \
  -F "username=Replace_User_Name_Here" \
  -F "password=Replace_Password_Here" \
  -F "processing_pref=Speed" \
  -F "document_type=Invoices" \
  -F "invoice_type=B2B" \
  -F "source_name=API" \
  -F "priority_flag=true" \
  -F "account_id=123456" \
  -F "set_reference_number=Ref123" \
  -F "set_name=MySet" \
  -F "create_new_set=true" \
  -F "file=@C:\Users\user\Downloads\batch.zip"
```

### Python (Requests)

* Request Body

```python
import requests

url = "URL/access/klearstack/uploadbatch"

payload = {'company_name': 'Replace_Company_Name_Here',
'username': 'Replace_User_Name_Here',
'password': 'Replace_Password_Here',
'processing_pref': 'Speed',
'document_type': 'Invoices',
'invoice_type': 'B2B',
'source_name': 'API',
'priority_flag': 'true',
'account_id': '123456',
'set_reference_number': 'Ref123',
'set_name': 'MySet',
'create_new_set': 'true'}
files=[
  ('file',('C:\Users\user\Downloads\batch.zip',open('C:\\Users\\user\\Downloads\\batch.zip','rb'),'application/zip'))
]
headers = {
  'Authorization': 'Bearer your_token_here'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

```

### Java (OkHttp)

* Request Body

```java
OkHttpClient client = new OkHttpClient();

RequestBody body = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("company_name", "Replace_Company_Name_Here")
    .addFormDataPart("username", "Replace_User_Name_Here")
    .addFormDataPart("password", "Replace_Password_Here")
    .addFormDataPart("processing_pref", "Speed")
    .addFormDataPart("document_type", "Invoices")
    .addFormDataPart("invoice_type", "B2B")
    .addFormDataPart("source_name", "API")
    .addFormDataPart("priority_flag", "true")
    .addFormDataPart("account_id", "123456")
    .addFormDataPart("set_reference_number", "Ref123")
    .addFormDataPart("set_name", "MySet")
    .addFormDataPart("create_new_set", "true")
    .addFormDataPart(
        "file",
        "batch.zip",
        RequestBody.create(
            MediaType.parse("application/octet-stream"),
            new File("C:\\Users\\user\\Downloads\\batch.zip")
        )
    )
    .build();

Request request = new Request.Builder()
    .url("URL/access/klearstack/uploadbatch")
    .post(body)
    .addHeader("Authorization", "Bearer your_token_here")
    .build();

Response response = client.newCall(request).execute();
```

### Node.js (Axios)

* Request Body

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

let formData = new FormData();
formData.append('company_name', 'Replace_Company_Name_Here');
formData.append('username', 'Replace_User_Name_Here');
formData.append('password', 'Replace_Password_Here');
formData.append('processing_pref', 'Speed');
formData.append('document_type', 'Invoices');
formData.append('invoice_type', 'B2B');
formData.append('source_name', 'API');
formData.append('priority_flag', 'true');
formData.append('account_id', '123456');
formData.append('set_reference_number', 'Ref123');
formData.append('set_name', 'MySet');
formData.append('create_new_set', 'true');
formData.append('file', fs.createReadStream('C:\\Users\\user\\Downloads\\batch.zip'));

let config = {
  method: 'post',
  maxBodyLength: Infinity,
  url: 'URL/access/klearstack/uploadbatch',
  headers: {
    'Authorization': 'Bearer your_token_here',
    ...formData.getHeaders()
  },
  data: formData
};

axios.request(config)
  .then((response) => {
    console.log(JSON.stringify(response.data));
  })
  .catch((error) => {
    console.log(error);
  });

```

### JavaScript (XHR)

* Request Body

```javascript
// WARNING: For POST requests, body is set to null by browsers.

var formData = new FormData();
formData.append("company_name", "Replace_Company_Name_Here");
formData.append("username", "Replace_User_Name_Here");
formData.append("password", "Replace_Password_Here");
formData.append("processing_pref", "Speed");
formData.append("document_type", "Invoices");
formData.append("invoice_type", "B2B");
formData.append("source_name", "API");
formData.append("priority_flag", "true");
formData.append("account_id", "123456");
formData.append("set_reference_number", "Ref123");
formData.append("set_name", "MySet");
formData.append("create_new_set", "true");
formData.append("file", fileInput.files[0], "batch.zip");

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "URL/access/klearstack/uploadbatch");
xhr.setRequestHeader("Authorization", "Bearer your_token_here");

xhr.send(formData);

```

### API Response

<table data-header-hidden><thead><tr><th width="103"></th><th></th></tr></thead><tbody><tr><td>Status</td><td>Example Response</td></tr><tr><td>200</td><td><p><code>{</code></p><p><code>"Function successfully executed!": "169a4df0-52c4-4835-8bb4-10296c8e5e3a",</code></p><p><code>"release_version": "7.8.9",</code></p><p><code>"set_reference_number":"12345"</code></p><p><code>}</code></p></td></tr><tr><td>400</td><td><code>{"error": "Please provide username."}</code></td></tr><tr><td>400</td><td><code>{"error": "Please provide password."}</code></td></tr><tr><td>401</td><td><code>{"error": "Incorrect username or password."}</code></td></tr><tr><td>500</td><td><code>{"error": "Something went wrong. Please try again later."}</code></td></tr></tbody></table>
