> 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-a-single-document-and-get-batch-id.md).

# Upload A Single Document And Get Batch ID

EndPoint Name: `processdocument`

Request type : `POST`

Authorization: Bearer token as header

EndPoint Details: This API is used to get the batch id for a single invoice (image/pdf) uploaded by the user.

### Request Type

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

### Request Body

<table data-header-hidden data-full-width="true"><thead><tr><th width="195.36358642578125"></th><th width="126.81817626953125"></th><th width="113.27276611328125"></th><th></th></tr></thead><tbody><tr><td>Parameters</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>processing_pref</td><td>string</td><td>Yes</td><td>Either “Speed” or “Accuracy” (It’s not case sensitive)</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>file</td><td>binary</td><td>Yes</td><td>Single image (pdf/jpeg/png) or native pdf file.</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>userid</td><td>string</td><td>No</td><td>User ID of the user.</td></tr><tr><td>user_role</td><td>string</td><td>No</td><td>role of the user.</td></tr><tr><td>document_type</td><td>string</td><td>No</td><td>Type of document to be processed - “Invoices”,“Receipts”,“PurchaseOrders”,“NACH”,“LoanAgreement” or “Insurances”.</td></tr><tr><td>application_no</td><td>string</td><td>No</td><td>An identifier for correlating multiple documents. Example : Nach and FacilityAgreement should have same application_no.</td></tr><tr><td>additional_params </td><td>string</td><td>No</td><td><p>For LoanAgreement : {</p><p>"borrower_name":"xyz",</p><p>"co_borrower":"abc",</p><p>"loan_amount_in_figures":250000,</p><p>"tenure":5,</p><p>"rate_of_interest":8.5,</p><p>"partner_name":"abc limited"</p><p>}</p><p><br></p><p>For Nach : {</p><p>"account_number":200382193</p><p>}</p></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><tr><td>org_details</td><td>string</td><td>No</td><td>Used to specify the organization category for internal processing :<br>CD: Consumer Durable<br>TW: Two Wheeler</td></tr><tr><td>reference_data</td><td>string</td><td>No</td><td>{"vendorGstNo":"YourGSTNumber","vendorState":"StateCode","vendorPanNo":"Vendor Pan","vendorPinCode":"VendorPinCode","billToGstNo":"CustomerGSTNumber"}</td></tr></tbody></table>

### Shell

* Request Body

```sh
curl --location "URL/access/klearstack/processdocument" \
  -H "Authorization: Bearer your_token_here" \
  --form "company_name=Replace_Company_Name_Here" \
  --form "username=Replace_User_Name_Here" \
  --form "password=Replace_Password_Here" \
  --form "user_id=Replace_User_ID_Here" \
  --form "user_role=Your_Role" \
  --form "processing_pref=Speed" \
  --form "document_type=Invoices" \
  --form "invoice_type=B2B" \
  --form "application_no=12345" \
  --form "additional_params={\"borrower_name\":\"xyz\"}" \
  --form "reference_data={\"reference_parameter\":\"xyz\"}" \
  --form "source_name=API" \
  --form "priority_flag=true" \
  --form "account_id=123456" \
  --form "set_reference_number=Ref123" \
  --form "set_name=MySet" \
  --form "create_new_set=true" \
  --form "file=@\"C:/Users/user/Downloads/xyz.pdf\""
```

### Python (Requests)

* Request Body

```python
import requests

url = "URL/access/klearstack/processdocument"

payload = {'company_name': 'Replace_Company_Name_Here',
'username': 'Replace_User_Name_Here',
'password': 'Replace_Password_Here',
'user_id': 'Replace_User_ID_Here',
'user_role': 'Your_Role',
'processing_pref': 'Speed',
'document_type': 'Invoices',
'invoice_type': 'B2B',
'application_no': '12345',
'additional_params': '{"borrower_name":"xyz"}',
'reference_data': '{"reference_parameter":"xyz"}',
'source_name': 'API',
'priority_flag': 'true',
'account_id': '123456',
'set_reference_number': 'Ref123',
'set_name': 'MySet',
'create_new_set': 'true'}
files=[
  ('file',('xyz.pdf',open('C:/Users/user/Downloads/xyz.pdf','rb'),'application/pdf'))
]
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().newBuilder()
  .build();

MediaType mediaType = MediaType.parse("text/plain");

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("user_id", "Replace_User_ID_Here")
  .addFormDataPart("user_role", "Your_Role")
  .addFormDataPart("processing_pref", "Speed")
  .addFormDataPart("document_type", "Invoices")
  .addFormDataPart("invoice_type", "B2B")
  .addFormDataPart("application_no", "12345")
  .addFormDataPart("additional_params", "{\"borrower_name\":\"xyz\"}")
  .addFormDataPart("reference_data", "{\"reference_parameter\":\"xyz\"}")
  .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", "C:/Users/user/Downloads/xyz.pdf",
    RequestBody.create(MediaType.parse("application/octet-stream"),
      new File("C:/Users/user/Downloads/xyz.pdf")))
  .build();

Request request = new Request.Builder()
  .url("URL/access/klearstack/processdocument")
  .method("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 data = new FormData();
data.append('company_name', 'Replace_Company_Name_Here');
data.append('username', 'Replace_User_Name_Here');
data.append('password', 'Replace_Password_Here');
data.append('user_id', 'Replace_User_ID_Here');
data.append('user_role', 'Your_Role');
data.append('processing_pref', 'Speed');
data.append('document_type', 'Invoices');
data.append('invoice_type', 'B2B');
data.append('application_no', '12345');
data.append('additional_params', '{"borrower_name":"xyz"}');
data.append('reference_data', '{"reference_parameter":"xyz"}');
data.append('source_name', 'API');
data.append('priority_flag', 'true');
data.append('account_id', '123456');
data.append('set_reference_number', 'Ref123');
data.append('set_name', 'MySet');
data.append('create_new_set', 'true');
data.append('file', fs.createReadStream('C:/Users/user/Downloads/xyz.pdf'));

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

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 data = new FormData();
data.append("company_name", "Replace_Company_Name_Here");
data.append("username", "Replace_User_Name_Here");
data.append("password", "Replace_Password_Here");
data.append("user_id", "Replace_User_ID_Here");
data.append("user_role", "Your_Role");
data.append("processing_pref", "Speed");
data.append("document_type", "Invoices");
data.append("invoice_type", "B2B");
data.append("application_no", "12345");
data.append("additional_params", "{\"borrower_name\":\"xyz\"}");
data.append("reference_data", "{\"reference_parameter\":\"xyz\"}");
data.append("source_name", "API");
data.append("priority_flag", "true");
data.append("account_id", "123456");
data.append("set_reference_number", "Ref123");
data.append("set_name", "MySet");
data.append("create_new_set", "true");
data.append("file", fileInput.files[0], "C:/Users/user/Downloads/xyz.pdf");

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/processdocument");
xhr.setRequestHeader("Authorization", "Bearer your_token_here");

xhr.send(data);
```

### API Response

<table data-header-hidden><thead><tr><th width="95"></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>"OCR_ref_no": "faaf38a9-2cc7-4b2b-89f2-182252d1638c",</code></p><p>    <code>"status": "pass",</code></p><p>    <code>"description": "",</code></p><p>    <code>"application_no": "",</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></tbody></table>
