Skip to main content
Analyze construction drawings with AI. Extract annotations, build knowledge graphs, and search across entire drawing sets.
Built for: AEC firms, software integrators, document management platforms, and startups building on drawing intelligence.

Get Started

1

Install the SDK

Requires Python 3.9+
2

Set your API key

Get an API key from app.stru.ai, then set it as an environment variable:
3

Analyze your first drawing


Capabilities

Fast geometric detection returning results in 1-2 seconds. No LLM processing, no graph storage.Detects: Leaders, Section Tags, Detail Tags, Revision Triangles, Revision Clouds, Title Block bounds.
Price: $0.02/page

Use Cases

Cross-Reference Indexing

Automatically link section tags, detail callouts, and sheet references across a drawing set

QA/QC Automation

Validate drawing consistency, detect missing references, flag revision conflicts

Quantity Takeoffs

Extract and count components, connections, and annotations

Analytical Model Generation

Build structured data for BIM/analysis workflows

API Reference

Authentication

All requests require a Bearer token:

Tier 1: Raw Detection

Fast geometric detection. No LLM, no graph storage. Returns annotations in 1-2 seconds. Price: $0.02/page

GET /v1/drawings/cache/

Check whether a PDF file hash exists in the drawing cache.
Returns cache metadata when the file hash is found.

POST /v1/drawings

Submit a PDF page for annotation detection.

GET /v1/drawings/

Retrieve a previously processed drawing.

DELETE /v1/drawings/

Delete a drawing result.

Full pipeline: detection → LLM enrichment → knowledge graph → semantic search. What you get:
  • Entities with semantic descriptions
  • Relationships between entities
  • Cross-sheet reference linking
  • Natural language search

POST /v1/projects

Create a project to group related sheets.

GET /v1/projects

List all projects.

GET /v1/projects/

Get project details and aggregate stats.

DELETE /v1/projects/

Delete project and all associated graph data.

Sheets

POST /v1/projects//sheets

Ingest one or more PDF pages into the knowledge graph. Returns immediately with job IDs for polling. Page selector formats:
One job is created per page:

GET /v1/projects//jobs/

Poll job status for async sheet ingestion. Each job progresses through a 5-step pipeline. Pipeline steps: Job statuses: queuedrunningcomplete | failed Timeout rules:
  • Queued timeout: 30 minutes from enqueue
  • Running timeout: 10 minutes from first start

GET /v1/projects//sheets

List all ingested sheets in a project.

GET /v1/projects//sheets/

Get full sheet graph slice including regions, mentions, component instances, and references.

GET /v1/projects//sheets//annotations

Get the raw annotation geometry from cached detection results for a processed sheet.

DELETE /v1/projects//sheets/

Remove a sheet from the graph and run maintenance rebuilds.

POST /v1/projects//search

Hybrid retrieval combining Qdrant vector search, BM25 fulltext, and optional Neo4j graph context. $0.005/query
/search returns relevance-ranked results, not exhaustive traversal. For deterministic full traversal, use the /entities and /relationships endpoints instead.

Entities & Relationships

GET /v1/projects//entities

Deterministic entity listing for full traversal and export. Supported types: mention, component_instance, component_type, region, community The type filter also accepts mention subtypes (e.g., callout) via mention_type. For bbox-based traversal, the primary types are mention, component_instance, and region.

GET /v1/projects//entities/

Get entity detail with relationships and location info. Returns entity record with attributes, provenance, outgoing relationships, incoming relationships, and locations.

GET /v1/projects//relationships

List facts and references as relationship rows.

Traverse Guide

Use this sequence for complete JSON traversal (not ranked results):
1

List projects

GET /v1/projects
2

List sheets in a project

GET /v1/projects/{project_id}/sheets
3

Traverse entities by sheet

GET /v1/projects/{project_id}/entities?sheet_id={sheet_id}&limit=...
4

Split by type as needed

Filter by mention, component_instance, region, etc.
5

Get adjacency for a specific node

GET /v1/projects/{project_id}/entities/{entity_id}
6

Traverse edges directly

GET /v1/projects/{project_id}/relationships?...
Use /search for relevance-ranked retrieval. Use /entities and /relationships for deterministic traversal and export.

Reference


Error Handling

The API returns errors in two formats: Validation / business errors:
FastAPI exceptions:
The SDK provides specific exception classes:

Pricing

Full example: A 96-page structural set with Graph Ingestion + 100 searches = $15.50