Су өлшегіші OCR API
Су өлшегіші OCR API. Бұл бет веб-сайттың үшінші тарап интеграциялары үшін ашық HTTP API туралы құжаттайды.
Шынайы жүктеуден бастаңыз
Алдымен тіркеліп, жұмыс орнына өзіңіздің су өлшегішінің фотосын жүктеңіз, содан кейін интеграцияға дайын болғанда API кілт жасаңыз.
Жалпы шолу
- Барлық сыртқы интеграциялар үшін веб-сайттың backend-ін пайдаланыңыз.
- Үшінші тарап бағдарламаларынан waterMeterAi қызметін тікелей қолданбаңыз.
- Ашық API веб-порталмен бірдей пайдаланушылар, квота, кэш, тапсырмалар және аудит ережелерін бөліседі.
- Backend орналастыру конфигурациясы бойынша әртүрлі төменгі AI қызметтеріне бағыттала алады.
- Тапсырма жауаптары енді әртүрлі бизнес әртүрлі нәтижелер түрлерін көрсете алатын жалпы result_summary объектісін қамтиды.
Аутентификация
- Веб-сайтқа кіріп, API Keys бетінде 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.
- Backend файл мазмұнын тексереді, тек файл кеңейтімін ғана емес.
Жүктеу өлшемін бақылау
- Пакеттік жүктеулер әдепкі бойынша 8 суретке дейін қабылдайды, әр суретке шектеу 20MB және жалпы файл мазмұны 20MB.
- Шектеуден асып кеткен файл немесе пакет кескінді тексеру немесе тапсырма жасау алдында 413 қайтарады; Жартылай партия жасалмайды.
- Backend нақты қабылданған байт санын қамтамасыз етеді, тіпті 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` қайтарады және жаңа тапсырма жасаудың орнына қате хабарламасын қосады.
Кэш және нәтиже жаңалығы
- Backend сәтті нәтижелерді сурет хэші мен AI нұсқасы бойынша кэштейді және төменгі бизнес namespace мәнін де ескереді.
- `cached_exact` сол кескіннің ағымдағы AI нұсқасында сәтті нәтиже бергенін білдіреді, сондықтан жаңа AI іске қосу қажет болмады.
- `cached_stale` AI қызметі офлайн және backend соңғы қолжетімді тарихи нәтижені қайтарғанын білдіреді.
- Егер `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
/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 кілттеріне көшіңіз.