Markup V2
Two-phase property boundary markup. Phase 1 returns a high-resolution top-down aerial image. Phase 2 lets you submit a drawn property boundary and measurement text as structured data. Boundary effects and text are composited server-side — deterministic and instant.
Overview
Markup V2 works in two phases:
- Generate — Returns a beautiful, high-resolution top-down aerial photo ready for annotation. Typically takes 1-2 minutes.
- Annotate — Collect the property boundary polygon in your own UI (the user draws it over the aerial image), optionally with measurement text labels (total area, side lengths), and submit it to the edit endpoint. The boundary and style effects (outline, blur, or darken outside) are composited server-side in seconds.
Optionally, a cinematic zoom-in video can be generated from any completed markup.
Quick Example
Phase 1 — Generate the aerial photo:
curl -X POST \
-H "X-API-Key: dome_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"address": "22 Naroo Street, Balwyn VIC 3103"
}' \
https://api.dometech.com.au/v2/markup/generateResponse (202):
{
"data": {
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-24T10:00:00.000Z",
"mode": "live"
}
}Step-by-Step
1. Generate Aerial Photo
Send a POST request to /v2/markup/generate with the property address. Returns a high-resolution aerial photo ready for annotation.
curl -X POST \
-H "X-API-Key: dome_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"address": "22 Naroo Street, Balwyn VIC 3103",
"options": {
"orientation": "bottom",
"style": "darken",
"zoom": "standard",
"front_direction": 180
},
"webhook_url": "https://example.com/webhooks/dometech"
}' \
https://api.dometech.com.au/v2/markup/generateTip: Only address is required. The style option is stored and applied during the annotation phase.
2. Submit the Annotation
Once the generate job completes, collect the boundary in your own UI — the user draws the polygon over the aerial image and optionally adds measurement text labels (area, side lengths). Then submit the structured data (normalized 0-1 polygon vertices + text annotations) to the edit endpoint.
curl -X POST \
-H "X-API-Key: dome_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"boundary_polygon": [
{ "x": 0.3, "y": 0.2 },
{ "x": 0.7, "y": 0.2 },
{ "x": 0.7, "y": 0.8 },
{ "x": 0.3, "y": 0.8 }
],
"text_annotations": [
{
"id": "area_1",
"text": "450 m²",
"x": 0.5,
"y": 0.5,
"fontSize": 0.03,
"color": "#FFFFFF",
"fontWeight": "bold"
}
],
"options": { "style": "darken" }
}' \
https://api.dometech.com.au/v2/markup/jobs/{job_id}/edit3. Annotation is Composited Server-Side
The server-side compositor applies the boundary style effect and renders text overlays in seconds — no AI processing needed.
4. Retrieve the Final Markup
The completed edit job output contains the final composited markup image:
{
"data": {
"id": "edit-job-id",
"job_type": "markup_v2_edit",
"status": "completed",
"output": {
"markup_url": "https://storage.example.com/final_markup.jpg",
"enhanced_satellite_url": "https://storage.example.com/enhanced.jpg",
"satellite_url": "https://storage.example.com/satellite.jpg",
"style": "darken",
"generation_time_seconds": 3.2,
"boundary_polygon": [...],
"text_annotations": [...],
"coordinates": { "lat": -37.8136, "lng": 144.9631 }
}
}
}Output Fields
Generate Output (Phase 1)
| Field | Type | Description |
|---|---|---|
enhanced_satellite_url | string | Enhanced aerial image (primary output) |
satellite_url | string | Source aerial image |
markup_url | string | Same as enhanced_satellite_url (backwards compatibility) |
coordinates | object | Geocoded lat/lng of the property |
Edit/Annotate Output (Phase 2)
| Field | Type | Description |
|---|---|---|
markup_url | string | Final composited markup image with boundary and text |
enhanced_satellite_url | string | Enhanced aerial image used as base image |
boundary_polygon | array | Polygon vertices in normalized 0-1 coordinates |
text_annotations | array | Text labels with position, font, rotation |
generation_time_seconds | number | Compositing time (typically 2-5 seconds) |
Text Annotations
Text annotations let you add measurement labels on top of the markup. Each annotation has position, font size, rotation, and an optional background pill. Common uses include total area labels and side measurements.
| Field | Required | Description |
|---|---|---|
id | Yes | Unique identifier for the annotation |
text | Yes | Text content (e.g., "450 m²", "12.5m") |
x, y | Yes | Position in 0-1 normalized coordinates |
fontSize | Yes | Relative to image height (0.02 = 2% of height) |
rotation | No | Degrees (useful for angled side measurements) |
backgroundColor | No | Background pill color as hex (e.g., "rgba(0,0,0,0.6)") |
Options
| Option | Values | Default | Description |
|---|---|---|---|
orientation | "bottom", "left" | "bottom" | Camera orientation |
style | "outline", "blur", "darken" | "darken" | Boundary style effect applied during annotation phase |
zoom | "close", "standard", "wide" | "standard" | Camera zoom level |
front_direction | 0-360 | 0 | Compass bearing of the property front |
See the API Reference for full parameter details and response schemas.
Next Steps
- API Reference — Markup V2 — Full parameter details and schemas
- Jobs & Webhooks — Polling best practices and real-time notifications