წყლის მრიცხველი OCR API
წყლის მრიცხველი OCR API. ეს გვერდი ასახავს ვებსაიტის backend-ის მიერ გამოვლენილ საჯარო HTTP API მესამე მხარის ინტეგრაციისთვის.
დაიწყეთ რეალური ატვირთვით
ჯერ დარეგისტრირდით, ატვირთეთ თქვენი საკუთარი წყლის მრიცხველის ფოტო სამუშაო სივრცეში და შემდეგ შექმენით API გასაღები, როდესაც მზად იქნებით ინტეგრირებისთვის.
მიმოხილვა
- გამოიყენეთ ვებსაიტის backend ყველა გარე ინტეგრაციისთვის.
- არ დარეკოთ waterMeterAi პირდაპირ მესამე მხარის პროგრამებიდან.
- ღია API იზიარებს იგივე მომხმარებლებს, კვოტას, ქეშს, ამოცანებს და აუდიტის წესებს, როგორც ვებ პორტალი.
- Backend შეიძლება მიზნად ისახავდეს სხვადასხვა ქვედა დინების AI ბიზნესს განლაგების კონფიგურაციით.
- დავალების პასუხები ახლა მოიცავს ზოგად result_summary ობიექტს, რათა სხვადასხვა ბიზნესს შეეძლოს სხვადასხვა ტიპის შედეგების ჩვენება.
ავთენტიფიკაცია
- შედით ვებსაიტზე და შექმენით API გასაღები API კლავიშების გვერდზე.
- სრული API გასაღები ნაჩვენებია მხოლოდ ერთხელ, როდესაც ის იქმნება.
- გაგზავნეთ გასაღები ავტორიზაციის სათაურში ყველა მოთხოვნაზე.
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
ატვირთვის წესები
- ფაილის მაქსიმალური ზომა: 20 მბ თითო სურათზე.
- მხარდაჭერილი ფორმატები: JPEG, PNG, WEBP.
- backend ადასტურებს ფაილის რეალურ შინაარსს და არა მხოლოდ ფაილის გაფართოებას.
ატვირთვის ზომის აღსრულება
- ჯგუფური ატვირთვები ნაგულისხმევად იღებს 8-მდე სურათს, 20 მბ თითო სურათზე ლიმიტით და 20 მბ ფაილის შინაარსის მთლიანი ლიმიტით.
- ფაილი ან პარტია, რომელიც აღემატება მის ლიმიტს, აბრუნებს 413 სურათის დადასტურებამდე ან დავალების შექმნამდე; ნაწილობრივი პარტია არ იქმნება.
- Backend ახორციელებს ფაქტობრივი მიღებული ბაიტების რაოდენობას მაშინაც კი, როდესაც Content-Length აკლია ან გამოიყენება ნაწილობრივი გადაცემა.
დავალების მდგომარეობები
- რიგში: მიღებულია და ელოდება AI დამუშავებას.
- გაშვებული: ამჟამად მუშავდება, ან უკვე გადაეცემა დისპეტჩერს და კვლავ გამოკითხვა საბოლოო შედეგისთვის.
- batch_waiting_ai: პარტიის ყველა ნივთი ელოდება AI სერვისის დაბრუნებას.
- batch_running: პარტია უკვე გადაეცემა დისპეტჩერს და ჯერ კიდევ მუშავდება.
- შესრულებულია: წარმატებით დასრულდა.
- ჩაიშალა: დამუშავება ჩაიშალა.
- waiting_ai: რიგში დგას მანამ, სანამ AI სერვისი არ დაბრუნდება ინტერნეტში, შემდეგ ის ავტომატურად განახლდება.
შედეგის წყაროები
- ⚡ საკვანძო სიტყვები: ახალი AI გაჟიმვა
- cached_exact: ემთხვევა მიმდინარე AI ვერსიის ქეშს.
- cached_stale: AI ხაზგარეშე, ბოლო ქეშირებული შედეგი დაბრუნდა.
- მომლოდინეში: საბოლოო შედეგი ჯერ არ არის.
- ჩაიშალა: დავალება ჩაიშალა.
- როდესაც დავალება ჯერ არ შესრულებულია, შეამოწმეთ error_message უახლესი განმეორებითი ცდის ან ლოდინის მიზეზისთვის.
კვოტა და ბილინგი
- გამოიყენეთ `GET /api/open/quota` დიდი დატვირთვის გაგზავნამდე, თუ თქვენს ინტეგრაციას სჭირდება კვოტის წარუმატებლობის თავიდან აცილება.
- მხოლოდ `fresh` AI გაშვება მოიხმარს კვოტას.
- `cached_exact`, `cached_stale`, `pending`და `failed` შედეგები არ მოიხმარენ კვოტას.
- უფასო ანგარიშები პირველ რიგში იყენებენ დღიურ კვოტას. ფასიანი ანგარიშები იყენებენ აქტიურ პერიოდულ კვოტების პაკეტებს, შემდეგ დროებით ან ფიქსირებულ კვოტას backend პოლიტიკის მიხედვით.
- როდესაც კვოტა ამოწურულია, დავალების გაგზავნა აბრუნებს `429` და შეიცავს შეცდომის შეტყობინებას ახალი ამოცანის შექმნის ნაცვლად.
ქეში და შედეგის სიახლე
- Backend ქეშებს წარმატებულ შედეგებს გამოსახულების ჰეშისა და AI ვერსიის მიხედვით, მათ შორის ქვედა დინების ბიზნეს სახელების სივრცის ჩათვლით.
- `cached_exact` ნიშნავს, რომ იმავე სურათს უკვე აქვს წარმატებული შედეგი მიმდინარე AI ვერსიისთვის, ამიტომ ახალი AI გაშვება არ იყო საჭირო.
- `cached_stale` ნიშნავს, რომ AI სერვისი ხაზგარეშეა და backend-მა დააბრუნა უახლესი ხელმისაწვდომი ისტორიული შედეგი.
- როდესაც `is_latest_ai_version` მცდარია, შეინახეთ შედეგი, როგორც გამოსადეგი, მაგრამ განხილვადი ისტორიული მონაცემები.
- არ მიიღოთ ყველა `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
/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
/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
/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}
/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/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
/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}
/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` როგორც არასაბოლოო სახელმწიფოებს და განაგრძეთ კენჭისყრა.
- გამოიყენეთ სერიული მოთხოვნები, როდესაც ქსელის გზას backend-მდე აქვს მაღალი შეყოვნება და განლაგებული ბიზნესი მხარს უჭერს სერიულ რეჟიმს.
- სურათების მოთხოვნები ამჟამად მიედინება `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.
{
"detail": "batch upload is not supported for business: cax"
}{
"ok": false,
"error": "unauthorized",
"message": "Missing or invalid API key."
}{
"ok": false,
"error": "file_too_large",
"message": "Maximum file size is 20MB."
}{
"ok": false,
"error": "quota_exhausted",
"message": "Quota exhausted.",
"quota": {
"remaining": 0,
"quota_summary_text": "Free daily quota: 20/20 used today. Remaining: 0."
}
}მზად ხართ სამუშაო პროცესის შესამოწმებლად?
გამოიყენეთ ვებ სამუშაო სივრცე პირველი ფოტოსთვის, შემდეგ გადადით API კლავიშებზე, როგორც კი შედეგის ფორმატი მოერგება თქვენს სისტემას.