Skip to main content

🊊 AI CV āđāļĨāļ° API āļŠāļāļąāļ”āļ‚āđ‰āļ­āļĄāļđāļĨ 🆕

🊊 AI āļŠāļģāļŦāļĢāļąāļšāļŠāļāļąāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļˆāļēāļāļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāļ—āļģāļ‡āļēāļ™ (CV) āđƒāļ™āļĢāļđāļ›āđāļšāļšāđ„āļŸāļĨāđŒ PDF āļŦāļĢāļ·āļ­āļĢāļđāļ›āļ āļēāļžāđ‚āļ”āļĒāđƒāļŠāđ‰ OCR āđāļĨāļ°āđāļšāļšāļˆāļģāļĨāļ­āļ‡āļ āļēāļĐāļēāđ„āļ—āļĒ

Version Status New

āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ™āļĩāđ‰āđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ FastAPI āļ—āļĩāđˆāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ€āļ­āļāļŠāļēāļĢāļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāļ—āļģāļ‡āļēāļ™ (CV) (PDF, JPG, PNG) āđ‚āļ”āļĒāđƒāļŠāđ‰āļšāļĢāļīāļāļēāļĢ iApp OCR āđƒāļ™āļāļēāļĢāļŠāļāļąāļ”āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ”āļīāļšāļˆāļēāļ CV āđāļĨāļ°āđƒāļŠāđ‰āđāļšāļšāļˆāļģāļĨāļ­āļ‡ OpenThaiGPT āđƒāļ™āļāļēāļĢāđāļĒāļāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļĄāļđāļĨ JSON āļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļŠāđˆāļ§āļ™āļšāļļāļ„āļ„āļĨ āļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāļĻāļķāļāļĐāļē āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļāļēāļĢāļ—āļģāļ‡āļēāļ™ āļ—āļąāļāļĐāļ° āđāļĨāļ°āļ—āļąāļāļĐāļ°āļ—āļĩāđˆ AI āļ„āļēāļ”āļāļēāļĢāļ“āđŒ āļ‹āļķāđˆāļ‡āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāļŦāļĢāļ·āļ­āļāļēāļĢāļŠāļĢāļĢāļŦāļēāļšāļļāļ„āļĨāļēāļāļĢāđ„āļ”āđ‰

āļ—āļ”āļĨāļ­āļ‡āđƒāļŠāđ‰āļ‡āļēāļ™ Demo​

Example Images (Click to try)

Example 1

Demo key is limited to 10 requests per day per IP
Click here to get your API key

āļ§āļīāļ˜āļĩāļāļēāļĢāļ‚āļ­ API Key?

āļāļĢāļļāļ“āļēāđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄ API Portal āđ€āļžāļ·āđˆāļ­āļ”āļđ API key āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆāļŦāļĢāļ·āļ­āļ‚āļ­ API key āđƒāļŦāļĄāđˆ

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”​

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ CV​

CV Example

Request:​

    curl -X POST https://api.iapp.co.th/ocr/cv
-H "apikey: YOUR_API_KEY"
-F "file=@/path/to/sample_cv_2.jpg"

Response:​

{
"personalInformation": {
"name": "āļ™āļēāļ‡āļŠāļēāļ§āļ­āļļāđ„āļĢāļ§āļĢāļĢāļ“ āđ€āļˆāļĩāļĒāļĄāļšāļļāļāļĻāļĢāļĩ",
"address": "317 āļ–.āļ™āļ„āļĢāļ§āļĢāļĢāļ„āđŒ āđāļ‚āļ§āļ‡āļ§āļąāļ”āđ‚āļŠāļĄāļ™āļąāļŠ āđ€āļ‚āļ•āļ›āđ‰āļ­āļĄāļ›āļĢāļēāļĻāļąāļ•āļĢāļđāļžāđˆāļēāļĒ āļāļ—āļĄ. 10100",
"phoneNumbers": ["082-996-5168"],
"email": "uraiwan91790@gmail.com",
"religion": "āļžāļļāļ—āļ˜",
"nationality": "āđ„āļ—āļĒ",
"age": "43"
},
"education": [
{
"school": "āđ‚āļĢāļ‡āđ€āļĢāļĩāļĒāļ™āļĢāļēāļŠāļ§āļīāļ™āļīāļ• āļĄāļąāļ˜āļĒāļĄ",
"level": "āļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ 6",
"year": "2538-2540"
}
],
"workExperience": [
{
"title": "Recruitment officer",
"company": "Apex medical center",
"startDate": "May 2022",
"endDate": "December 2022",
"roles": ["āļŠāļĢāļĢāļŦāļēāļžāļ™āļąāļāļ‡āļēāļ™āļ•āļģāđāļŦāļ™āđˆāļ‡ consultant, beauty therapist, nurse"]
},
{
"title": "Recruitment officer",
"company": "GMI Market",
"startDate": "April 2022",
"endDate": "June 2022",
"roles": ["āļŠāļĢāļĢāļŦāļēāļšāļļāļ„āļĨāļēāļāļĢ āļ•āļģāđāļŦāļ™āđˆāļ‡ sale āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļāļēāļĢāđ€āļ—āļĢāļ”āđ€āļ”āļ­āļĢāđŒ"]
},
{
"title": "Senior recruitment",
"company": "āļšāļĢāļīāļĐāļąāļ— āļĢāļąāļāļĐāļēāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ RGH",
"startDate": "January 2022",
"endDate": "March 2022",
"roles": ["āļŠāļĢāļĢāļŦāļēāļžāļ™āļąāļāļ‡āļēāļ™āļ•āļģāđāļŦāļ™āđˆāļ‡ āļĢāļ›āļ .,āđāļĄāđˆāļšāđ‰āļēāļ™"]
}
],
"skillsAndQualifications": {
"languages": {
"english": "āļžāļđāļ” āđ€āļ‚āļĩāļĒāļ™ āļŠāļ·āđˆāļ­āļŠāļēāļĢ āļ āļēāļĐāļēāļ­āļąāļ‡āļāļĪāļĐāđ„āļ”āđ‰āđ€āļ›āđ‡āļ™āļ­āļĒāđˆāļēāļ‡āļ”āļĩ"
},
"computerSkills": ["āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āđ‚āļ›āļĢāđāļāļ™āļĄāļ„āļ­āļĄāļžāļīāļ§āđ€āļ•āļ­āļĢāđŒ"],
"communicationSkills": []
},
"possibleSkillAndQualificationsByAI": [
"Recruiting",
"Applicant Tracking Systems (ATS)",
"Interviewing",
"Talent Acquisition",
"Onboarding",
"HRIS",
"Performance Management",
"Employee Relations",
"Sales",
"Trading",
"Security",
"Customer Service",
"Teamwork",
"Communication"
],
"additionalInformation": {
"customerServiceSkills": null,
"assessment": null
}
}

āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī​

  • āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ CV: āļŠāļāļąāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĄāļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļˆāļēāļ CV āļĢāļ§āļĄāļ–āļķāļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļŠāđˆāļ§āļ™āļšāļļāļ„āļ„āļĨ āļāļēāļĢāļĻāļķāļāļĐāļē āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļāļēāļĢāļ—āļģāļ‡āļēāļ™ āļ—āļąāļāļĐāļ° āđāļĨāļ°āļ—āļąāļāļĐāļ°āļ—āļĩāđˆ AI āļ„āļēāļ”āļāļēāļĢāļ“āđŒ

  • āļĢāļđāļ›āđāļšāļšāđ„āļŸāļĨāđŒāļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļš: āļĢāļ­āļ‡āļĢāļąāļšāđ„āļŸāļĨāđŒ PDF, JPG, PNG āđāļĨāļ° JPEG

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”​

Python​

import requests

url = "https://api.iapp.co.th/ocr/cv"

payload = {}
files=[
('file',('sample_cv_2.jpg',open('sample_cv_2.jpg','rb'),'application/pdf'))
]
headers = {"apikey": "YOUR_API_KEY"}

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

print(response.text)

JavaScript​

const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")

let data = new FormData()
data.append("file", fs.createReadStream("sample_cv_2.jpg"))

let config = {
method: "post",
maxBodyLength: Infinity,
url: "https://api.iapp.co.th/ocr/cv",
headers: {
apikey: "YOUR_API_KEY",
...data.getHeaders(),
},
data: data,
}

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

PHP​

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/ocr/cv',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('file'=> new CURLFILE('sample_cv_2.jpg')),
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;


Swift​

let parameters = [
[
"key": "file",
"src": "sample_cv_2.jpg",
"type": "file"
]] as [[String: Any]]

let boundary = "Boundary-\(UUID().uuidString)"
var body = Data()
var error: Error? = nil
for param in parameters {
if param["disabled"] != nil { continue }
let paramName = param["key"]!
body += Data("--\(boundary)\r\n".utf8)
body += Data("Content-Disposition:form-data; name=\"\(paramName)\"".utf8)
if param["contentType"] != nil {
body += Data("\r\nContent-Type: \(param["contentType"] as! String)".utf8)
}
let paramType = param["type"] as! String
if paramType == "text" {
let paramValue = param["value"] as! String
body += Data("\r\n\r\n\(paramValue)\r\n".utf8)
} else {
let paramSrc = param["src"] as! String
let fileURL = URL(fileURLWithPath: paramSrc)
if let fileContent = try? Data(contentsOf: fileURL) {
body += Data("; filename=\"\(paramSrc)\"\r\n".utf8)
body += Data("Content-Type: \"content-type header\"\r\n".utf8)
body += Data("\r\n".utf8)
body += fileContent
body += Data("\r\n".utf8)
}
}
}
body += Data("--\(boundary)--\r\n".utf8);
let postData = body


var request = URLRequest(url: URL(string: "https://api.iapp.co.th/ocr/cv")!,timeoutInterval: Double.infinity)
request.addValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}

task.resume()


Kotlin​

val client = OkHttpClient()
val mediaType = "text/plain".toMediaType()
val body = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file","sample_cv_2.jpg",
File("sample_cv_2.jpg").asRequestBody("application/octet-stream".toMediaType()))
.build()
val request = Request.Builder()
.url("https://api.iapp.co.th/ocr/cv")
.post(body)
.addHeader("apikey", "YOUR_API_KEY")
.build()
val response = client.newCall(request).execute()

Java​

OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file","sample_cv_2.jpg",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("sample_cv_2.jpg")))
.build();
Request request = new Request.Builder()
.url("https://api.iapp.co.th/ocr/cv")
.method("POST", body)
.addHeader("apikey", "YOUR_API_KEY")
.build();
Response response = client.newCall(request).execute();

Dart​

var headers = {
'apikey': 'YOUR_API_KEY'
};
var request = http.MultipartRequest('POST', Uri.parse('https://api.iapp.co.th/ocr/cv'));
request.files.add(await http.MultipartFile.fromPath('file', 'sample_cv_2.jpg'));
request.headers.addAll(headers);

http.StreamedResponse response = await request.send();

if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}

āļĢāļēāļ„āļē​

āļŠāļ·āđˆāļ­āļšāļĢāļīāļāļēāļĢ AI APIEndpointIC āļ•āđˆāļ­āļŦāļ™āđ‰āļēOn-Premise
AI CV OCR āđāļĨāļ° API āļŠāļāļąāļ”āļ‚āđ‰āļ­āļĄāļđāļĨiapp_cv_ocr1 IC/āļŦāļ™āđ‰āļēāļ•āļīāļ”āļ•āđˆāļ­āđ€āļĢāļē