# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://klearstack.gitbook.io/klearstack-api-documentation/upload-documents/upload-a-single-document-and-get-batch-id.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
