|
Download docs/API.md from Hardik-25/VisionSeq: direct link, hf CLI and curl.
- Browser
- Download file 4.18 kB
-
https://huggingface.co/spaces/Hardik-25/VisionSeq/resolve/main/docs/API.md
- Command line
-
hf download hf://spaces/Hardik-25/VisionSeq/docs/API.md
-
curl -L -o API.md https://huggingface.co/spaces/Hardik-25/VisionSeq/resolve/main/docs/API.md
4.18 kB
| # API Specification | |
| REST API exposed by the VisionSeq backend. Interactive Swagger documentation is auto-generated at `/docs` on any running instance. | |
| **Live instance:** [huggingface.co/spaces/Hardik-25/VisionSeq](https://huggingface.co/spaces/Hardik-25/VisionSeq) | |
| --- | |
| ## Base Path | |
| All routes are prefixed with: | |
| ``` | |
| /api/v1 | |
| ``` | |
| ## Authentication | |
| None. All endpoints are public and protected only by rate limiting (see [HARDENING.md](HARDENING.md)). If deploying beyond a portfolio/demo context, place this API behind an auth layer or API gateway. | |
| --- | |
| ## Endpoints | |
| ### `GET /` | |
| Root endpoint. Returns a welcome message and links to further documentation. | |
| **Response `200 OK`** | |
| ```json | |
| { | |
| "message": "Welcome to CAPTCHA OCR API", | |
| "docs_url": "/docs", | |
| "health_check": "/api/v1/health" | |
| } | |
| ``` | |
| --- | |
| ### `GET /api/v1/health` | |
| Liveness/readiness probe. Reports model status, hardware capabilities, and service uptime — suitable for Kubernetes/cloud health checks. | |
| **Response `200 OK`** | |
| ```json | |
| { | |
| "status": "ok", | |
| "version": "1.0.0", | |
| "device": "cuda", | |
| "cuda_available": true, | |
| "cuda_device_name": "NVIDIA GeForce RTX 4090", | |
| "model_ready": true, | |
| "model_version": "1.0", | |
| "uptime": "145.20s", | |
| "requests_served": 12 | |
| } | |
| ``` | |
| **Errors** | |
| | Status | Cause | | |
| |---|---| | |
| | `503 Service Unavailable` | Model is not ready or failed to load | | |
| --- | |
| ### `GET /api/v1/model-info` | |
| Returns metadata describing the loaded model. | |
| **Response `200 OK`** | |
| ```json | |
| { | |
| "version": "1.0.0", | |
| "parameters": "11.2M", | |
| "architecture": "ResNet-18", | |
| "input_shape": [1, 1, 100, 200], | |
| "output_shape": [1, 6, 31] | |
| } | |
| ``` | |
| --- | |
| ### `POST /api/v1/predict` | |
| Predicts the character sequence for a single CAPTCHA image. | |
| **Headers** | |
| ``` | |
| Content-Type: multipart/form-data | |
| ``` | |
| **Body** | |
| | Field | Type | Constraints | | |
| |---|---|---| | |
| | `file` | binary | `image/png` or `image/jpeg`, max **5MB** | | |
| **Response `200 OK`** | |
| ```json | |
| { | |
| "request_id": "c092e7dc-0740-4c8d-9ed5-f9aeab5f3b39", | |
| "prediction": "7DUP98", | |
| "confidence": 87.47, | |
| "char_confs": [84.63, 89.46, 77.37, 88.03, 94.42, 90.89], | |
| "processing_ms": 172.59 | |
| } | |
| ``` | |
| **Errors** | |
| | Status | Cause | | |
| |---|---| | |
| | `400 Bad Request` | File is not a valid image | | |
| | `413 Payload Too Large` | File exceeds the 5MB limit | | |
| | `429 Too Many Requests` | Rate limit exceeded | | |
| --- | |
| ### `POST /api/v1/predict/batch` | |
| Predicts character sequences for up to 5 CAPTCHA images in a single batched run. | |
| **Headers** | |
| ``` | |
| Content-Type: multipart/form-data | |
| ``` | |
| **Body** | |
| | Field | Type | Constraints | | |
| |---|---|---| | |
| | `files` | binary[] | up to **5** images, each ≤ **5MB** | | |
| **Response `200 OK`** | |
| ```json | |
| { | |
| "request_id": "c092e7dc-0740-4c8d-9ed5-f9aeab5f3b39", | |
| "predictions": [ | |
| { | |
| "request_id": "c092e7dc-0740-4c8d-9ed5-f9aeab5f3b39", | |
| "prediction": "7DUP98", | |
| "confidence": 87.47, | |
| "char_confs": [84.63, 89.46, 77.37, 88.03, 94.42, 90.89], | |
| "processing_ms": 34.51 | |
| } | |
| ], | |
| "total_processing_ms": 172.59 | |
| } | |
| ``` | |
| **Errors** | |
| | Status | Cause | | |
| |---|---| | |
| | `400 Bad Request` | Missing files, or an invalid image format present | | |
| | `413 Payload Too Large` | More than 5 files, or a file exceeds the size limit | | |
| | `429 Too Many Requests` | Rate limit exceeded | | |
| --- | |
| ## Response Field Reference | |
| | Field | Type | Description | | |
| |---|---|---| | |
| | `request_id` | string (UUID) | Unique identifier for tracing this request through logs | | |
| | `prediction` | string | Decoded 6-character sequence | | |
| | `confidence` | float | Overall confidence (%), averaged across the 6 positions | | |
| | `char_confs` | float[6] | Per-position confidence (%), in sequence order | | |
| | `processing_ms` | float | Server-side processing time, from validated upload to decoded output | | |
| ## Rate Limiting | |
| Requests are limited per-IP via a token-bucket algorithm: **2 requests/second**, burst capacity of **5**. Exceeding this returns `429 Too Many Requests`. See [HARDENING.md](HARDENING.md#4-rate-limiting) for implementation details. | |
| ## Related Documentation | |
| - [Architecture](ARCHITECTURE.md) — how requests flow through the system | |
| - [Hardening Notes](HARDENING.md) — validation, limits, and defensive measures behind these endpoints | |