API স্ক্যান

API স্ক্যান একটি REST কলের মাধ্যমে PDF-কে বিশ্বাসযোগ্য স্ক্যান করা নথিতে বদলে দেয়, যা স্বয়ংক্রিয় প্রক্রিয়া ও অ্যাপ সংযুক্তির জন্য উপযোগী। জব তৈরি করুন, PDF আপলোড করুন, তারপর অবস্থা জানতে চান বা webhook-এর অপেক্ষা করুন — তিনটি ধাপ, HTTP অনুরোধ পাঠাতে পারে এমন যেকোনো পরিবেশ বা ভাষা থেকে। রঙের পরিসর, রেজোলিউশন, ঘূর্ণন, ঝাপসা ভাব, নয়েজ, উজ্জ্বলতা, কনট্রাস্ট ও বর্ডার সবই আপনার হাতে।

একটি কল কীভাবে চলে

  1. জব তৈরি করুন

    POST /v1/scan-jobs

    আপনার config আর চাইলে একটি webhookUrl পাঠান; বিনিময়ে jobID এবং প্রাক-স্বাক্ষরিত uploadURL পাবেন।

  2. PDF আপলোড করুন

    PUT {uploadURL}

    ফাইলটি সরাসরি আগের ধাপের প্রাক-স্বাক্ষরিত S3 ঠিকানায় PUT করুন — টোকেন লাগবে না।

  3. স্ক্যান করা নথি নিন

    GET /v1/scan-jobs/{jobID}

    অবস্থা জানতে চান বা webhook-এর অপেক্ষা করুন; জব completed হলে downloadURL থেকে নামিয়ে নিন।

যেখানে কাজে লাগে

ব্যাকএন্ড থেকে গুচ্ছ উৎপাদন

সার্ভারে তৈরি চুক্তি, চালান ও প্রতিবেদন সরাসরি স্ক্যান ইফেক্টের ভিতর দিয়ে যায়, কাউকে ওয়েব পাতায় একই কাজ হাতে করে আবার করতে হয় না।

চালু সিস্টেমের ভিতরে

CRM, ERP বা টিকিট সিস্টেমে «স্ক্যান করা নথি রপ্তানি করুন» ধরনের একটি কাজ যোগ করুন এবং সেটিকে API ডাকতে দিন।

স্বয়ংক্রিয় ধারা

CI বা n8n, Zapier-এর মতো মঞ্চ কোনো ঘটনায় জব শুরু করে, আর শেষ হলে webhook পরের ধাপে দায়িত্ব দিয়ে দেয়।

বড় ফাইলের সারি

জব অ্যাসিনক্রোনাস: তৈরি হওয়ার পর প্রতিটি আলাদাভাবে প্রক্রিয়া হয়, আর অগ্রগতি status ও createdAfter দিয়ে দেখা যায়।

ভাষা ও পরিবেশ

TypeScriptfetch / axios
Node.jsfetch / undici
Pythonrequests / httpx
Gonet/http
PHPcURL / Guzzle
Rubynet/http
JavaHttpClient
cURLকমান্ড লাইন / CI
আরওযেকোনো HTTP ক্লায়েন্ট

API সাধারণ HTTP ও JSON, তাই অনুরোধ পাঠাতে পারে এমন যেকোনো ভাষা বা স্বয়ংক্রিয়করণ মঞ্চ একে ডাকতে পারে।

কোডের উদাহরণ

API Bearer Token

টোকেন আপনার অ্যাকাউন্টের সঙ্গে যুক্ত এবং যেকোনো সময় নতুন করে তৈরি করা যায়। API স্ক্যানের জন্য Pro অ্যাকাউন্ট দরকার: বৈধ টোকেন না থাকলে API 401 দেয়, আর Pro ভূমিকা না থাকলে 403।

একবার দেখুন

প্যারামিটার বদলান, অনুরোধের বডিও সঙ্গে সঙ্গে বদলাবে, তারপর তিনটি কল API-তে চালিয়ে দেখুন।

স্ক্যানের প্যারামিটার

পরীক্ষামূলক চালানো আপনার টোকেন দিয়ে API ডাকে, তাই Pro অ্যাকাউন্ট লাগে; প্যারামিটার আর অনুরোধের বডি নির্দ্বিধায় দেখুন।

POST/v1/scan-jobs
{
  "config": {
    "rotate": 1,
    "rotate_var": 0.5,
    "colorspace": "gray",
    "blur": 0,
    "noise": 0,
    "border": false,
    "brightness": 1.3,
    "contrast": 1.3,
    "resolution": 150,
    "output_format": "image/jpeg"
  }
}

স্ক্যান জবের তথ্য

উদাহরণ
{
  "jobID": "3f9c1e64-0000-4000-8000-00000000a71b",
  "userID": "8f21c4b0-0000-4000-8000-000000004a17",
  "createdAt": 1724409600,
  "status": "completed",
  "inputUploadedAt": 1724409601,
  "completedAt": 1724409602,
  "numPages": 6,
  "downloadURL": "https://…/output/3f9c.pdf?X-Amz-…"
}

API রেফারেন্স

পদ্ধতিপথবিবরণ
POST/v1/scan-jobsএকটি স্ক্যান জব তৈরি করে। config আর দরকার হলে webhookUrl পাঠান; বিনিময়ে created অবস্থার জব অবজেক্ট ও প্রাক-স্বাক্ষরিত uploadURL পাবেন।
PUT{uploadURL}আগের ধাপে পাওয়া প্রাক-স্বাক্ষরিত S3 ঠিকানা, যা api.lookscanned.io-তে নেইউৎস PDF-টি Content-Type: application/pdf ও Content-Length সহ আপলোড করে। ঠিকানাটিতে নিজেরই স্বাক্ষর থাকে, তাই Authorization হেডার যোগ করবেন না।
GET/v1/scan-jobs/{jobID}একটি জব পড়ে, অবস্থা জানার জন্য। created অবস্থায় uploadURL থাকে, completed অবস্থায় downloadURL।
GET/v1/scan-jobsআপনার নিজের জবগুলোর তালিকা দেয়, jobID, status বা createdAfter দিয়ে ছেঁকে নেওয়া যায়।
অবস্থাcreatedprocessingcompletedfailed
  • 401 বৈধ টোকেন নেই
  • 403 অ্যাকাউন্ট Pro নয়
  • 404 এমন কোনো জব নেই

অনুরোধের বডি

ফিল্ডধরনডিফল্টবিবরণ
webhookUrlstring · —জব শেষ হলে একবার কল করা হয়, ফলে নিজে থেকে অবস্থা জানতে চাওয়ার দরকার পড়ে না।
config.colorspace'gray' | 'sRGB' · graygrayআউটপুট ছবির রঙের পরিসর; gray মানে সাদাকালো স্ক্যান করা নথি।
config.resolutionnumber · 7272আউটপুট ছবির রেজোলিউশন, DPI-তে।
config.rotatenumber · —পুরো নথির ঘূর্ণন, ডিগ্রিতে।
config.rotate_varnumber · —প্রতি পৃষ্ঠায় এলোমেলো ঘূর্ণনের পরিসর, ডিগ্রিতে — বাঁকা করে রাখা কাগজের চেহারা।
config.blurnumber · 00ঝাপসা ভাবের মাত্রা।
config.noisenumber · 00নয়েজের মাত্রা।
config.brightnessnumber · 11উজ্জ্বলতা; 1 হলে কোনো বদল নেই।
config.contrastnumber · 11কনট্রাস্ট; 1 হলে কোনো বদল নেই।
config.borderboolean · falsefalseপৃষ্ঠায় স্ক্যানের বর্ডার যোগ হবে কি না।
config.output_format'image/png' | 'image/jpeg' · image/jpegimage/jpegপৃষ্ঠাগুলো ছবিতে রেন্ডার করার সময় ব্যবহৃত ফরম্যাট।

সব ফিল্ডই বাদ দেওয়া যায়। «একবার দেখুন» অংশের শুরুর মানগুলো — রেজোলিউশন 150, ঘূর্ণন 1, উজ্জ্বলতা ও কনট্রাস্ট 1.3 — ওয়েব অ্যাপের সুপারিশ করা সমন্বয়, API-র ডিফল্ট নয়।

জব অবজেক্টে যে ফিল্ডগুলো খেয়াল রাখবেন

status
created / processing / completed / failed — নিচের দুটি ঠিকানা থাকবে কি না তা এটিই ঠিক করে।
uploadURL
শুধু created থাকা অবস্থায়। মেয়াদসহ প্রাক-স্বাক্ষরিত আপলোড ঠিকানা।
downloadURL
শুধু completed হওয়ার পর। মেয়াদসহ প্রাক-স্বাক্ষরিত ডাউনলোড ঠিকানা।
inputUploadedAt / completedAt
উৎস ফাইলের আপলোড কখন শেষ হলো আর জব কখন শেষ হলো; পার্থক্যটাই প্রক্রিয়াকরণের সময়।

সচরাচর জিজ্ঞাসা

API স্ক্যানের জন্য কি Pro লাগে?

লাগে। বৈধ টোকেন না থাকলে API 401 দেয়, আর Pro ভূমিকা নেই এমন অ্যাকাউন্ট পায় 403। আপগ্রেড করে লগ ইন করলেই এই পাতাতেই টোকেন পাওয়া যায়।

জব কখন শেষ হলো তা কীভাবে বুঝব?

দুটি উপায়: GET /v1/scan-jobs/{jobID}-তে বারবার খোঁজ নিন, অথবা জব তৈরির সময় webhookUrl দিন আর পরিষেবাকে শেষ হলে একবার জানাতে দিন।

ফল কি ওয়েব পাতায় করা স্ক্যানের মতোই?

একই। দুই দিকেই স্ক্যান ইফেক্টের একই বাস্তবায়ন ব্যবহার হয়, আর config-এর রঙের পরিসর, রেজোলিউশন, ঘূর্ণন, ঝাপসা ভাব, নয়েজ, উজ্জ্বলতা, কনট্রাস্ট ও বর্ডার ওয়েব পাতার একই নামের বিকল্পগুলোর সমান: একই প্যারামিটারে একই ফল। শুধু প্রক্রিয়াকরণের জায়গাটাই আলাদা — পাতায় স্থানীয়ভাবে, API-তে দূরবর্তী পরিষেবায়।

আপলোড আর ডাউনলোড ঠিকানা জমিয়ে রেখে আবার ব্যবহার করা যায়?

না করাই ভালো। uploadURL আর downloadURL দুটোই মেয়াদসহ প্রাক-স্বাক্ষরিত ঠিকানা; মেয়াদ ফুরালে নতুন ঠিকানার জন্য জবটি আবার পড়তে হয়।

একটি জবে কত সময় লাগে?

পৃষ্ঠার সংখ্যা আর রেজোলিউশনের ওপর নির্ভর করে। কয়েক পৃষ্ঠার নথি সাধারণত কয়েক সেকেন্ডেই শেষ হয়; রেজোলিউশন বেশি হলে বা পৃষ্ঠা বেশি হলে সময় বাড়ে। inputUploadedAt আর completedAt-এর পার্থক্য থেকে প্রকৃত সময় বেরোয়।

জব ব্যর্থ হলে কী করব?

অবস্থা failed হয়ে যায়। সাধারণ কারণ হলো ফাইলটি বৈধ PDF না হওয়া, এনক্রিপশনের বাধা, বা আপলোড মাঝপথে ছিঁড়ে যাওয়া। ফাইলটি খুলছে কি না দেখে নতুন একটি জব তৈরি করুন।

আগের জবগুলো কি দেখা যায়?

যায়। GET /v1/scan-jobs আপনার নিজের জবগুলোর তালিকা দেয় এবং jobID, status ও createdAfter দিয়ে ছেঁকে নেওয়া যায়, যা মিলিয়ে দেখা বা আবার নামানোর জন্য যথেষ্ট।