Detect appliances
Appliance detection · model appliance-detector
/v1/drawings/detection/appliancesFind doors, double-door openings, toilets, and urinals in one request. Choose the object types you need with the classes parameter. Supported appliance types currently cover doors and the listed plumbing fixtures.
Accepts a previously uploaded document_id, enqueues inference, and returns a job you poll for results. Detections are returned as bounding boxes in PDF coordinate space.
- Returns
- A job to check202 Accepted
- Usage
- Element detectionper sheet
- Results in
- Selected objectsresult.appliances
- Auth
- API keyX-API-Key header
Free-tier appliances detection typically completes in 2–4 minutes per job. Processing time scales mainly with page count and drawing complexity — a dense multi-page set takes longer than a single sheet.
Review Developer and Enterprise plans for higher usage limits. Upgrade your plan
Example


How it runs
- Send a
document_id - Get a
job_id - Check your results or receive a webhook
Request
document_id. Upload your PDF first.Body is JSON — this endpoint does not accept file uploads directly.
| Field | Description |
|---|---|
document_idstring · UUIDRequired | ID of the uploaded PDF or image. Must belong to this account and not be expired. |
page_numbersarray of integersOptional | 1-based page indices to scan, for example [1, 2, 3]. Omit to scan all pages. Out-of-range values are skipped by the worker but still counted. |
classesarray of stringsOptional | Select any non-empty combination of Door, DoubleDoor, Toilet, and Urinal. Omit to detect all four classes. Values are case-sensitive; duplicates, empty arrays, null, and unknown classes return 422. |
webhook_urlstring · URLOptional | URL to POST the completed job payload to. Delivered on developer, pro, and enterprise tiers only. |
| Header | Description |
|---|---|
X-API-KeyRequired | Your API key. A missing or invalid key returns 401. |
Content-TypeRequired | application/json |
page_numbers (or every page of the document when omitted) is one element detection, not only the pages that contain selected objects. Selecting more classes does not multiply the per-page usage. Send only valid page indices.Responses
The job is enqueued immediately. Poll GET /v1/jobs/{job_id} until status is complete or failed.
| Field | Description |
|---|---|
job_idstring · UUID | Use this to poll for results. |
statusstring | Always queued on this response. |
poll_urlstring | Path only — prepend https://api.anchorgrid.ai to build the full URL. |
When status is complete and model is appliance-detector, the result field on the job contains:
| Field | Description |
|---|---|
document_idstring | UUID of the source document. |
appliancesarray | Selected detections, including fixtures. Each item has id, page, category_id, category_name, and bbox. |
appliances[].idstring | Unique identifier — "appliance_" + 12 hex chars. |
appliances[].pageinteger | 1-based page index where the object was detected. |
appliances[].category_idinteger | Stable IDs: Door = 1, DoubleDoor = 2, Toilet = 3, Urinal = 4, regardless of the selected subset. |
appliances[].category_namestring | The selected class name: Door, DoubleDoor, Toilet, or Urinal. |
appliances[].bboxobject | Axis-aligned bounding box in PDF coordinate space: x1, y1, x2, y2. |
appliances_foundinteger | Total count of returned appliances across all selected classes. |
pages_analyzedinteger | Number of pages the worker actually scanned. |
model_versionstring | e.g. appliance-detector-v3.1.0 |
processing_time_msinteger | Wall time for the inference task. |
Door returns one box per leaf, including the leaves of paired doors. DoubleDoor returns an enclosing box for the paired opening. When both are selected, a double door has two leaf boxes plus one pair box. Selecting only DoubleDoor does not return individual leaves. Toilet and Urinal boxes enclose the fixture symbol. Only selected classes appear in results; there is no confidence score.Usage & rate limits
Each page scanned is one element detection (See pricing). Rate limit: tier RPM (5 / 60 / 120 / 300).
| Plan | When the allowance is used up |
|---|---|
trial | Trial allowance — 402 FREE_TIER_LIMIT_REACHED when used up, 402 TRIAL_ENDED once the trial is over. |
developer | Monthly allowance, then overage up to your overage limit — 402 OVERAGE_LIMIT_REACHED at the limit (429 QUOTA_EXCEEDED when the allowance is used up without overage billing). |
enterprise | No allowance check. |
Rate-limit 429s include retry_after_seconds in the body. Quota 429s and rate-limit 429s return the same status code — check the error body to distinguish them.
Errors
| Status | What it means |
|---|---|
| 401 | Missing or invalid X-API-Key. |
| 402 | Trial allowance used up. |
| 404 | document_id not found or expired. |
| 422 | Validation error — malformed UUID or invalid body. |
| 429 | Rate limit or monthly quota exceeded. |