We collect minimal analytics to understand how the site is used. If you decline, we do not load analytics.
Docs/Endpoints/POST /drawings/detection/elevation
POST/v1/drawings/detection/elevation

Detect interior elevation regions in an architectural drawing PDF (document_id from POST /v1/documents, then poll GET /v1/jobs/{job_id}. Job model is elevation-detector.

Same async pattern as other drawing intelligence POSTs: X-API-Key auth; JSON body with document_id, optional page_numbers (1-based), optional webhook_url; immediate 202 with job_id, status: "queued", and poll_url. Webhooks run only on developer, pro, and enterprise (not free). This path is included in the tier-based RPM limiter with other job-submit POSTs.

Interior elevationsAsync · 2022 credits / pageelevation-detector

Request

The document must belong to your account and have expires_at > now(). Body shape matches other drawing job endpoints (e.g. door detection).

document_idreq
string (UUID)
From POST /v1/documents. Must be valid and not expired.
page_numbers
int[]
1-based pages to scan. Omit for full document. Out-of-range indices are skipped by the worker; billing still follows len(page_numbers) or page_count (or 1) — same counting rules as door detection.
webhook_url
string
Callback URL for the completed job payload. Honored on developer, pro, and enterprise only.

Credits use len(page_numbers) when provided, else document page_count (or 1). Keep indices valid — the worker skips out-of-range pages but you are still charged on the submitted page set / count.

Code examples

curl -X POST https://api.anchorgrid.ai/v1/drawings/detection/elevation \
  -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

Poll GET /v1/jobs/{job_id} with the same API key until status is complete or failed.

job_id
string (UUID)
Poll identifier.
status
string
queued on this response.
poll_url
string
Path only — prepend https://api.anchorgrid.ai.

Result shape

When status === "complete" and the job model is elevation-detector, result contains:

document_id
string
UUID of the source PDF.
elevations
array
Each item is an elevation region in PDF coordinates (after rotation handling in the worker).
elevations[].id
string
ele_ + 12 hex characters.
elevations[].page
integer
1-based page number.
elevations[].bbox
object
Axis-aligned box: x1, y1, x2, y2.
elevations_found
integer
len(elevations).
pages_analyzed
integer
Pages the worker actually scanned.
model_version
string
e.g. elevation-detector-v1.0.0
processing_time_ms
integer
Wall time for inference.

Unlike door detection, GET /v1/jobs does not run post-filters on stored results for elevation-detector — only door-detector is filtered in _apply_result_filters. Results are returned as stored.

confidence exists inside the detector step but is not copied into each elevations[] object. There is no class label (e.g. exterior vs section) in the API payload — only boxes.

Credits & rate limits

Cost
2 credits × pages billed
Rate limit
Tier RPM (job-submit bucket)

Same credit and quota behavior as door detection: CreditCost (2 credits × pages billed).

free
402 FREE_TIER_LIMIT_REACHED when lifetime credits exhausted.
developer / pro
429 QUOTA_EXCEEDED when monthly pool exhausted.
enterprise
No quota check.

Rate-limit 429s include retry_after_seconds. Quota vs RPM both use status 429 — inspect the error body.

Errors

401
Missing or invalid X-API-Key.
402
Free tier credit exhaustion (same as doors).
404
Missing or expired document. Code may use DOCUMENT_NOT_FOUND; the Intelligence JSON body may still be genericized.
422
Bad JSON / invalid UUID / validation.
429
Rate limit or monthly quota.

See also Errors for how HTTP exceptions map to client-visible envelopes.

Response Preview

202 OK
{
  "job_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "queued",
  "poll_url": "/v1/jobs/7c9e6679-7425-40de-944b-e07fc1f90ae7"
}