WaterMeter AI

वॉटर मीटर OCR API

वॉटर मीटर OCR API. हे पृष्ठ सार्वजनिक HTTP API वेबसाइट बॅकएंडद्वारे तृतीय-पक्ष एकत्रीकरणासाठी उघड केलेले दस्तऐवजीकरण करते.

वास्तविक अपलोडसह प्रारंभ करा

प्रथम नोंदणी करा, वर्कस्पेसमध्ये तुमचा स्वतःचा वॉटर मीटर फोटो अपलोड करा आणि नंतर तुम्ही समाकलित करण्यासाठी तयार असाल तेव्हा API की तयार करा.

विहंगावलोकन

  • सर्व बाह्य एकत्रीकरणासाठी वेबसाइट बॅकएंड वापरा.
  • waterMeterAi ला थेट तृतीय-पक्ष प्रोग्रामवरून कॉल करू नका.
  • ओपन API समान वापरकर्ते, कोटा, कॅशे, कार्ये आणि ऑडिट नियम वेब पोर्टलप्रमाणे शेअर करते.
  • बॅकएंड डिप्लॉयमेंट कॉन्फिगरेशननुसार वेगवेगळ्या डाउनस्ट्रीम AI सेवा निवडू शकते.
  • कार्य प्रतिसादांमध्ये आता सामान्य result_summary ऑब्जेक्ट आहे, त्यामुळे वेगवेगळ्या सेवा वेगवेगळे परिणाम प्रकार दाखवू शकतात.

प्रमाणीकरण

  • वेबसाइटवर साइन इन करा आणि API की पृष्ठावर API की तयार करा.
  • पूर्ण API की तयार केल्यावर फक्त एकदाच दाखवली जाते.
  • प्रत्येक विनंतीवर Authorization शीर्षलेखातील की पाठवा.
Authorization: Bearer wm_xxxxxxxxxxxxxxxxx

API Key Permissions and Limits

  • Each API key can have independent scopes, an IPv4/IPv6/CIDR allowlist, a total requests-per-minute limit, and a task submissions-per-minute limit.
  • A valid key without the required scope or outside its source IP allowlist returns 403.
  • Every valid-key request consumes the total request limit, including requests rejected by scope, IP, or submission policy.
  • Batch requests consume one total request unit and one submission unit per uploaded file.
  • Rate-limited responses return 429 with Retry-After and both X-RateLimit-* and X-SubmissionLimit-* headers.
  • Task creation also has a per-key concurrency limit and returns X-ConcurrencyLimit-* headers; a concurrency rejection uses 429.
  • For batch concurrency, only files that pass image validation reserve slots, and success headers report the actual active slots after task binding.
Retry-After: 30
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1785902400
X-SubmissionLimit-Limit: 10
X-SubmissionLimit-Remaining: 9
X-ConcurrencyLimit-Limit: 3
X-ConcurrencyLimit-Active: 1
X-ConcurrencyLimit-Remaining: 2

अपलोड नियम

  • कमाल फाइल आकार: प्रति इमेज 20MB.
  • सपोर्टेड फॉरमॅट्स: JPEG, PNG, WEBP.
  • बॅकएंड वास्तविक फाइल सामग्री सत्यापित करते, केवळ फाइल विस्ताराचे नाही.

अपलोड आकार अंमलबजावणी

  • बॅच अपलोड 20MB प्रति-प्रतिमा मर्यादा आणि 20MB एकूण फाइल-सामग्री मर्यादेसह डीफॉल्टनुसार 8 प्रतिमा स्वीकारतात.
  • एक फाइल किंवा बॅच जी त्याच्या मर्यादा ओलांडते ती प्रतिमा प्रमाणीकरण किंवा कार्य निर्मितीपूर्वी 413 परत करते; कोणतीही आंशिक बॅच तयार केलेली नाही.
  • Content-Length गहाळ असताना किंवा खंडित हस्तांतरण वापरले जात असताना देखील बॅकएंड वास्तविक प्राप्त बाइट गणना लागू करते.

कार्य राज्ये

  • queued: स्वीकारले आणि AI प्रक्रियेची प्रतीक्षा करत आहे.
  • running: सध्या प्रक्रिया सुरू आहे, किंवा डिस्पॅचरकडे सोपवल्यानंतर अंतिम निकालाची स्थिती नियमितपणे तपासली जात आहे.
  • batch_waiting_ai: बॅचमधील प्रत्येक आयटम AI सेवा पुन्हा ऑनलाइन येण्याची वाट पाहत आहे.
  • batch_running: बॅच आधीच डिस्पॅचरकडे सुपूर्द केली आहे आणि अद्याप प्रक्रिया सुरू आहे.
  • done: यशस्वीरित्या पूर्ण.
  • failed: प्रक्रिया अयशस्वी.
  • waiting_ai: AI सेवा परत ऑनलाइन येईपर्यंत रांगेत, नंतर ती आपोआप पुन्हा सुरू होते.

परिणाम स्रोत

  • fresh: नवीन AI रनद्वारे तयार केलेले.
  • cached_exact: वर्तमान AI आवृत्ती कॅशेशी जुळले.
  • cached_stale: AI ऑफलाइन, नवीनतम कॅश्ड परिणाम परत आला.
  • pending: अद्याप अंतिम निकाल नाही.
  • failed: कार्य अयशस्वी.
  • जेव्हा एखादे कार्य अद्याप पूर्ण झाले नाही, तेव्हा नवीनतम पुन्हा प्रयत्न करण्यासाठी किंवा प्रतीक्षा करण्याच्या कारणासाठी error_message तपासा.

कोटा आणि बिलिंग

  • तुमच्या एकत्रीकरणाला कोटा अयशस्वी टाळण्याची आवश्यकता असल्यास मोठे वर्कलोड सबमिट करण्यापूर्वी `GET /api/open/quota` वापरा.
  • फक्त `fresh` AI रन्स वापरतात.
  • `cached_exact`, `cached_stale`, `pending`, आणि `failed` परिणाम कोटा वापरत नाहीत.
  • मोफत खाती प्रथम दैनिक कोटा वापरतात. सशुल्क खाती सक्रिय नियतकालिक कोटा पॅकेजेस वापरतात, नंतर बॅकएंड धोरणानुसार तात्पुरता किंवा निश्चित कोटा.
  • कोटा संपल्यावर, टास्क सबमिशन `429` परत करते आणि नवीन टास्क तयार करण्याऐवजी एरर मेसेज समाविष्ट करते.

कॅशे आणि परिणाम ताजेपणा

  • बॅकएंड इमेज हॅश आणि AI आवृत्तीनुसार यशस्वी परिणाम कॅश करते; यात डाउनस्ट्रीम सेवेचे namespace समाविष्ट असते.
  • `cached_exact` म्हणजे सध्याच्या AI आवृत्तीसाठी समान प्रतिमेचा आधीच यशस्वी परिणाम आहे, त्यामुळे नवीन AI रनची आवश्यकता नव्हती.
  • `cached_stale` म्हणजे AI सेवा ऑफलाइन आहे आणि बॅकएंडने नवीनतम उपलब्ध ऐतिहासिक परिणाम परत केला.
  • `is_latest_ai_version` चे मूल्य false असेल तेव्हा परिणाम वापरण्यायोग्य, पण पुनरावलोकन करण्याजोगा ऐतिहासिक डेटा म्हणून साठवा.
  • प्रत्येक `done` कार्याचा वापर केलेला कोटा गृहीत धरू नका; तपासा `result_source`.

Task completion webhooks

  • Send signed task completion events to your HTTPS endpoint with automatic retries.
  • This API key is inactive. Existing records remain available, but new, enabled, test, and secret-rotation operations are blocked.
X-WaterMeter-Webhook-Id: whev_new_event
X-WaterMeter-Webhook-Replay-Of: whev_original_event
replay_of_event_id: whev_original_event
blocked endpoint management: HTTP 409
canceled delivery status: canceled

GET/api/open/quota

वर्तमान कोटा आणि उर्वरित वापर वाचा.

विनंती उदाहरण
curl -X GET "https://watermeterai.com/api/open/quota" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "email": "[email protected]",
  "quota": {
    "account_type": "free",
    "daily_limit": 20,
    "used": 3,
    "remaining": 17,
    "day_tag": "2026-06-01",
    "is_unlimited": false,
    "monthly_remaining": 0,
    "monthly_bonus_remaining": 0,
    "fixed_remaining": 0,
    "nearest_expire_at": null,
    "quota_summary_text": "Free daily quota: 3/20 used today. Remaining: 17."
  }
}

GET/api/open/ai-status

टास्क सबमिशन आणि कॅशे-रिझल्ट फॉलबॅकसाठी सार्वजनिक सेवा स्थिती वाचा.

विनंती उदाहरण
curl -X GET "https://watermeterai.com/api/open/ai-status" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "is_online": true,
  "busy": false,
  "active_jobs": 0,
  "public_status": "online",
  "public_status_label": "online",
  "public_status_reason": "ready",
  "accepts_new_tasks": true,
  "can_return_cached_result": true,
  "queue_state": "idle",
  "queue_count": 0,
  "current_ai_version": "water_v2:wm-ai-v2-2026-06-01",
  "last_checked_at": "2026-06-01T06:15:30Z"
}

POST/api/open/tasks

एक प्रतिमा अपलोड करा आणि एकच कार्य तयार करा.

विनंती उदाहरण
curl -X POST "https://watermeterai.com/api/open/tasks" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx" \
  -F "file=@D:\data\meter_001.jpg"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "task_id": "8e6c4d1f8f8348c0bc53e2e39d2dc111",
  "status": "queued",
  "result_source": "pending",
  "visibility": "private",
  "ai_online": true,
  "is_latest_ai_version": false,
  "final_reading": "-",
  "result_summary": {
    "resultKind": "unknown",
    "primaryLabel": "Result",
    "primaryValue": "-",
    "secondaryLabel": "Detail",
    "secondaryValue": "-",
    "summaryText": "No result is available yet."
  },
  "error_message": "",
  "created_at": "2026-06-01T06:16:10Z"
}

GET/api/open/tasks/{task_id}

एक कार्य स्थिती आणि अंतिम वाचन वाचा.

विनंती उदाहरण
curl -X GET "https://watermeterai.com/api/open/tasks/task_a" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "task_id": "8e6c4d1f8f8348c0bc53e2e39d2dc111",
  "status": "done",
  "result_source": "fresh",
  "ai_online": true,
  "is_latest_ai_version": true,
  "final_reading": "123.45",
  "meter_type": "pointer",
  "success": "yes",
  "result_summary": {
    "resultKind": "water_meter",
    "primaryLabel": "Final Reading",
    "primaryValue": "123.45",
    "secondaryLabel": "Meter Type",
    "secondaryValue": "pointer",
    "summaryText": "Water meter recognition finished."
  },
  "error_message": "",
  "created_at": "2026-06-01T06:16:10Z"
}

GET/api/open/tasks

वर्तमान API की वापरकर्त्याच्या मालकीची अलीकडील कार्ये वाचा.

विनंती उदाहरण
curl -X GET "https://watermeterai.com/api/open/tasks?limit=20" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "items": [
    {
      "task_id": "8e6c4d1f8f8348c0bc53e2e39d2dc111",
      "status": "done",
      "result_source": "cached_exact",
      "final_reading": "123.45",
      "meter_type": "pointer",
      "success": "yes",
      "result_summary": {},
      "ai_online": true,
      "is_latest_ai_version": true,
      "created_at": "2026-06-01T06:16:10Z",
      "error_message": ""
    }
  ]
}

POST/api/open/batches

एका विनंतीमध्ये अनेक प्रतिमा अपलोड करा.

विनंती उदाहरण
curl -X POST "https://watermeterai.com/api/open/batches" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx" \
  -F "files=@D:\data\meter_001.jpg" \
  -F "files=@D:\data\meter_002.jpg"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "batch_id": "5a14f4e5f6d34fdabce00e62c0dd0001",
  "status": "batch_running",
  "total_count": 2,
  "done_count": 0,
  "failed_count": 0,
  "pending_count": 2,
  "items": [
    {
      "index": 0,
      "file_name": "meter_001.jpg",
      "task_id": "task_a",
      "status": "queued",
      "result_source": "pending",
      "final_reading": "-",
      "failure_kind": "",
      "error_message": ""
    },
    {
      "index": 1,
      "file_name": "meter_002.jpg",
      "task_id": "task_b",
      "status": "queued",
      "result_source": "pending",
      "final_reading": "-",
      "failure_kind": "",
      "error_message": ""
    }
  ]
}

GET/api/open/batches/{batch_id}

बॅच प्रगती आणि प्रति-फाइल कार्य स्थिती वाचा.

विनंती उदाहरण
curl -X GET "https://watermeterai.com/api/open/batches/5a14f4e5f6d34fdabce00e62c0dd0001" \
  -H "Authorization: Bearer wm_xxxxxxxxxxxxxxxxx"
प्रतिसादाचे उदाहरण
{
  "ok": true,
  "batch_id": "5a14f4e5f6d34fdabce00e62c0dd0001",
  "status": "batch_done",
  "total_count": 2,
  "done_count": 2,
  "failed_count": 0,
  "pending_count": 0,
  "items": [
    {
      "index": 0,
      "file_name": "meter_001.jpg",
      "task_id": "task_a",
      "status": "done",
      "result_source": "fresh",
      "final_reading": "123.45",
      "failure_kind": "",
      "error_message": ""
    },
    {
      "index": 1,
      "file_name": "meter_002.jpg",
      "task_id": "task_b",
      "status": "done",
      "result_source": "cached_exact",
      "final_reading": "456.78",
      "failure_kind": "",
      "error_message": ""
    }
  ]
}

शिफारस केलेले प्रवाह

  • मोठे वर्कलोड पाठवण्यापूर्वी `GET /api/open/ai-status` तपासा.
  • सबमिशन केल्यानंतर लगेच तुमच्या स्वतःच्या सिस्टममध्ये `task_id` किंवा `batch_id` स्टोअर करा.
  • `queued`, `running`, `waiting_ai`, `batch_waiting_ai`, आणि `batch_running` या अंतिम नसलेल्या स्थिती मानून स्थिती तपासत राहा.
  • बॅकएंडपर्यंतच्या नेटवर्कमध्ये जास्त विलंब असेल आणि तैनात सेवा बॅच मोडला समर्थन देत असेल, तर बॅच विनंत्या वापरा.
  • बॅच विनंत्या सध्या `webBackend -> dispatchCenter -> waterMeterAi` द्वारे प्रवाहित आहेत.
  • `batch_waiting_ai` म्हणजे प्रत्येक आयटम अजूनही AI सेवेची वाट पाहत आहे, अद्याप सक्रियपणे चालू नाही.
  • तैनात सेवा `CAD` असेल तेव्हा सध्या `POST /api/open/tasks` वापरा आणि बॅच अपलोड अनुपलब्ध समजा.

एरर नोट्स

  • 400: अवैध विनंती, किंवा तैनात सेवा बॅच अपलोडला समर्थन देत नाही.
  • 401: गहाळ, अवैध, कालबाह्य किंवा अक्षम API की.
  • 403: the user account is not active, the key lacks the required scope, or the source IP is outside the key allowlist.
  • 404: कार्य किंवा बॅच आढळले नाही, किंवा वर्तमान वापरकर्त्याच्या मालकीचे नाही.
  • 413: फाइल खूप मोठी आहे.
  • 415: असमर्थित प्रतिमा प्रकार किंवा अवैध प्रतिमा सामग्री.
  • 429: quota exhausted or the API key request, submission, or concurrency limit was exceeded.
400 बॅच अपलोड अनुपलब्ध
{
  "detail": "batch upload is not supported for business: cax"
}
401 गहाळ किंवा अवैध API की
{
  "ok": false,
  "error": "unauthorized",
  "message": "Missing or invalid API key."
}
413 फाइल खूप मोठी आहे
{
  "ok": false,
  "error": "file_too_large",
  "message": "Maximum file size is 20MB."
}
429 कोटा संपला
{
  "ok": false,
  "error": "quota_exhausted",
  "message": "Quota exhausted.",
  "quota": {
    "remaining": 0,
    "quota_summary_text": "Free daily quota: 20/20 used today. Remaining: 0."
  }
}

वर्कफ्लोची चाचणी घेण्यासाठी तयार आहात?

पहिल्या फोटोसाठी वेब वर्कस्पेस वापरा, नंतर API की वर हलवा एकदा परिणाम स्वरूप तुमच्या सिस्टमला बसते.