Back Original

OCR for construction documents does not work, we fixed it

Door detection processing time (free tier)

This applies only to door detection (POST /v1/drawings/detection/doors).

Free-tier door 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.

Need it faster? Pro and Enterprise plans run detection on dedicated GPU infrastructure.Upgrade your plan →

Docs/Endpoints/POST /drawings/detection/doors

POST/v1/drawings/detection/doors

Detect doors in architectural floor-plan PDFs. 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.

Floor plansAsync · 2022 credits / page

Input

Floor plan inputFloor plan with detected doors

Request

Auth via X-API-Key header. Body is JSON — this endpoint does not accept file uploads directly.

document_idreq

string (UUID)

ID of the uploaded PDF. Must belong to this account and not be expired.

page_numbers

int[]

1-based page indices to scan. Omit to scan all pages. Out-of-range values are skipped by the worker but still billed.

webhook_url

string

URL to POST the completed job payload to. Delivered on developer, pro, and enterprise tiers only.

Credits are charged on submission based on len(page_numbers) (or the document's total page count when omitted) — not on pages that actually contain doors. Send only valid page indices to avoid over-billing.

Code examples

curl -X POST https://api.anchorgrid.ai/v1/drawings/detection/doors \
  -H "X-API-Key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "document_id": "550e8400-e29b-41d4-a716-446655440000",
    "page_numbers": [1, 2, 3]
  }'

Response — 202 Accepted

The job is enqueued immediately. Poll GET /v1/jobs/{job_id} until status is complete or failed.

job_id

string (UUID)

Use this to poll for results.

status

string

Always queued on this response.

poll_url

string

Path only — prepend https://api.anchorgrid.ai to build the full URL.

Result shape

When status === "complete" and model === "door-detector", the result field on the job contains:

document_id

string

UUID of the source document.

doors

array

Filtered list of door detections. Each item has id, page, and bbox.

doors[].id

string

Stable identifier — "door_" + 12 hex chars.

doors[].page

integer

1-based PDF page index where the door was detected.

doors[].bbox

object

Axis-aligned bounding box in PDF coordinate space: x1, y1, x2, y2.

doors_found

integer

Count of items in doors after server-side geometry filtering.

pages_analyzed

integer

Number of pages the worker actually scanned.

model_version

string

e.g. door-detector-v1.0.0

processing_time_ms

integer

Wall time for the inference task.

The doors list is post-filtered by a geometry and median-area pipeline before being returned. doors_found always reflects the filtered count — raw unfiltered counts are not exposed.

Credits & rate limits

Cost

2 credits × pages billed

Rate limit

Tier RPM (5 / 60 / 120 / 300)

free

Lifetime credit cap — 402 FREE_TIER_LIMIT_REACHED when exceeded.

developer / pro

Monthly pool — 429 QUOTA_EXCEEDED when exceeded.

enterprise

No quota 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

401

Missing or invalid X-API-Key.

402

Free tier lifetime credit cap reached.

404

document_id not found or expired.

422

Validation error — malformed UUID or invalid body.

429

Rate limit or monthly quota exceeded.