Markup V2
Fully automated property boundary markup with optional manual edit and video
POST
/v2/markup/generate202Start automated property markup generation. Returns a high-resolution aerial image ready for boundary annotation.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
address | string | Yes | Full Australian property address |
options.orientation | string | No | Where the property front sits in the frame: bottom, left, top or right |
options.style | string | No | How the property boundary is applied: outline, blur, or darken |
options.zoom | string | No | Camera zoom level: close, standard, or wide |
options.front_direction | number (0-360) | No | Compass bearing of the property front (0 = north). Defaults to 0. |
options.lat | number | No | Pre-resolved latitude — skips geocoding when provided with lng |
options.lng | number | No | Pre-resolved longitude — skips geocoding when provided with lat |
webhook_url | string (URI) | No | URL to receive progress and completion webhooks |
callback_metadata | object | No | Opaque data returned in webhook payloads |
Request Example
{
"address": "example",
"options": {
"orientation": "bottom",
"style": "outline",
"zoom": "close",
"front_direction": 0,
"lat": 0,
"lng": 0
},
"webhook_url": "https://example.com/image.jpg"
}Response
{
"data": {
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-03-12T10:00:00.000Z",
"mode": "live"
}
}POST
/v2/markup/jobs/{jobId}/edit202Annotate a completed markup V2 job. Requires boundary_polygon (array of {x,y} points in 0-1 coords) in the body; creates a compositing job that applies the boundary and style effects.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string | Yes |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
boundary_polygon | object[] | Yes | Polygon boundary vertices in normalized 0-1 coordinates. |
text_annotations | object[] | No | Text annotations to render on the markup (measurements, area labels, etc.) |
options.style | string | No | How the property boundary is applied: outline, blur, or darken |
options.compositor.outline_color | string | No | Stroke color (default: "#FFFFFF") |
options.compositor.outline_width | number (1-20) | No | Stroke width in pixels (default: 6) |
options.compositor.blur_radius | number (5-50) | No | Blur radius for blur style (default: 20) |
options.compositor.darken_amount | number (0.1-0.9) | No | Darken amount 0-1 for darken style (default: 0.5) |
webhook_url | string (URI) | No | URL to receive progress and completion webhooks |
callback_metadata | object | No | Opaque data returned in webhook payloads |
Request Example
{
"boundary_polygon": [
{
"x": 0,
"y": 0
}
],
"options": {
"style": "outline",
"compositor": {
"outline_color": "string",
"outline_width": 1,
"blur_radius": 5,
"darken_amount": 0.1
}
},
"webhook_url": "https://example.com/image.jpg"
}Response
{
"data": {
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-03-12T10:00:00.000Z",
"mode": "live"
}
}POST
/v2/markup/jobs/{jobId}/video202Generate a static-camera markup reveal video from a completed markup. The underlying photo is held still while the boundary lines, annotations, and markup effects animate onto the frame.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string | Yes |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
options.duration | integer (5-10) | No | Video duration in seconds (5-10). Defaults to 7. |
webhook_url | string (URI) | No | URL to receive progress and completion webhooks |
callback_metadata | object | No | Opaque data returned in webhook payloads |
Request Example
{
"options": {
"duration": 5
},
"webhook_url": "https://example.com/image.jpg"
}Response
{
"data": {
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-03-12T10:00:00.000Z",
"mode": "live"
}
}