Developer API · v1

Harano.site API

আপনার app বা website-এ approved Lost & Found report যুক্ত করুন। API matching score মালিকানা যাচাই নয়।

শুরু করুন

  1. Verified account-এ login করে Account → আমার API Keys-এ key বানান; Admin চাইলে /admin/api-keys.php থেকেও verified account-এর জন্য বানাতে পারেন।
  2. প্রয়োজনীয় scope দিন; secret একবার দেখানো হবে। server-এর environment/secret manager-এ রাখুন। Public browser code বা APK-তে স্থায়ী secret embed করলে সেটি চুরি হতে পারে।
  3. সম্ভব হলে public client-এর বদলে নিজের backend দিয়ে request proxy করুন. CORS Origin browser policy-ই নিয়ন্ত্রণ করে, authentication/security boundary নয়.
  4. Default rate limit 60 request/key/minute; Admin settings-এর api_rate_limit_per_minute থেকে 5–300 করা যায়।

Base URL: https://harano.site/api.php

Approved report খোঁজা GET ?resource=posts

Scope: posts:read. Optional query: q, type=lost|found, category_id, district_id, page, per_page (max 50).

curl -H 'Authorization: Bearer YOUR_KEY' \
  'https://harano.site/api.php?resource=posts&type=lost&per_page=10'

Category ও District metadata

GET ?resource=categories category ID এবং GET ?resource=locations district ID ফেরত দেয়। দুটির জন্যই posts:read scope দরকার। Report submit করার আগে metadata থেকে valid IDs নিন।

একটি report GET ?resource=post&id=123

Scope: posts:read. শুধু approved/active report ফেরত আসে; personal contact তথ্য API response-এ নেই।

Report জমা POST ?resource=posts

Scope: posts:create. সাধারণ API report স্বয়ংক্রিয়ভাবে প্রকাশিত হয়। urgent=true অথবা person/NID/passport lost report Admin-এর নজরে pending থাকবে এবং configured SMTP থাকলে Admin alert যাবে। User key-এর post তার account-এ; Primary key-এর post Admin-owned। JSON fields: type, title, description, category_id, district_id, optional lost_date, urgent, contact_name, contact_email, contact_phone. ছবি গ্রহণ করা হয় না; contact তথ্য public API response-এ ফেরে না। Duplicate detection চালু।

curl -X POST \
  -H 'Authorization: Bearer YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: my-app-report-00001' \
  --data '{"type":"lost","title":"কালো স্কুল ব্যাগ হারিয়েছে","description":"গুলশান এলাকায় বইসহ হারিয়েছে।","category_id":8,"district_id":1,"lost_date":"2026-10-18"}' \
  'https://harano.site/api.php?resource=posts'

একই idempotency key ২৪ ঘণ্টার বেশি ধরে সংরক্ষিত হতে পারে; cleanup cron/job scheduled থাকলে পুরোনো key পরে মুছে যাবে। Request duplicate হলে একই response ফেরত দেওয়ার জন্য database unique constraint আছে।

নিজের সম্ভাব্য match GET ?resource=matches

Scope: matches:read. শুধু API key owner-এর approved posts-এর সম্ভাব্য matches দেখায়। Score ownership proof அல்ல.

Errors

JSON response-এ ok এবং troubleshooting-এর request_id থাকবে। HTTP 401 key সমস্যা, 403 scope/origin, 409 possible duplicate, 422 input, 429 rate limit. Token query string-এ দেবেন না; সবসময় HTTPS ও Authorization header ব্যবহার করুন।

CORS

Browser-origin integration-এর জন্য key তৈরি করার সময় নির্দিষ্ট HTTPS Origin দিন (যেমন https://example.com)। Wildcard নেই; OPTIONS preflight ওই exact origin-সহ active key থাকলে অনুমোদিত। Native Android/iOS app বা server-to-server integration-এ CORS সাধারণত প্রযোজ্য নয়। APK/public JavaScript-এ key embed করা নিরাপদ নয়।

Example response

{"ok":true,"request_id":"abc123...","data":[{"id":42,"type":"lost","title":"...","category":"...","district":"...","url":"..."}],"pagination":{"page":1,"per_page":20}}

API key তৈরি/বন্ধ করুন: Account dashboard.