API Reference

Complete endpoint documentation for the DomeAgent Enterprise API.

Base URL

https://staging-api.domeagent.com.au/v1

All requests require an X-API-Key header. See Authentication. Switch environments using the toggle in the top nav.

Jobs

GET/v1/jobs200

List all jobs for your organization with optional filters and pagination.

Query Parameters

ParameterTypeRequiredDescription
limitinteger (1-100)NoResults per page. Default: 50
offsetinteger (≥0)NoPagination offset. Default: 0
statusstringNoFilter by status: queued, running, awaiting_input, completed, failed
job_typestringNoFilter by job type

Response

{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "job_type": "drone_footage",
      "status": "completed",
      "input": { "address": "123 Collins St, Melbourne" },
      "output": { "video_url": "https://..." },
      "created_at": "2026-02-09T10:00:00.000Z",
      "updated_at": "2026-02-09T10:02:30.000Z",
      "completed_at": "2026-02-09T10:02:30.000Z"
    }
  ],
  "pagination": {
    "total": 42,
    "limit": 50,
    "offset": 0,
    "has_more": false
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T12:00:00.000Z"
  }
}
GET/v1/jobs/{jobId}200

Retrieve a specific job by ID. Use this to poll for async job completion.

Path Parameters

ParameterTypeRequiredDescription
jobIdstring (UUID)YesThe job ID returned when the job was created

Response

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "job_type": "drone_footage",
    "status": "completed",
    "input": { "address": "123 Collins St, Melbourne" },
    "output": {
      "video_url": "https://...",
      "thumbnail_url": "https://...",
      "duration": 12.5
    },
    "created_at": "2026-02-09T10:00:00.000Z",
    "updated_at": "2026-02-09T10:02:30.000Z",
    "completed_at": "2026-02-09T10:02:30.000Z"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T12:00:00.000Z"
  }
}

Content Generation

POST/v1/drone-footage/generate202

Generate aerial drone footage for a property address. Returns a job ID for async polling.

Request Body

ParameterTypeRequiredDescription
addressstringYesFull property address
options.directionstringNoCamera direction: original, north, south, east, west, topdown_zoomout, topdown_zoomin

Request Example

{
  "address": "123 Collins Street, Melbourne VIC 3000",
  "options": {
    "direction": "north"
  }
}

Response

{
  "data": {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:00:00.000Z"
  }
}
POST/v1/image-enhance/generate202

Enhance a property image using AI. The image URL must be publicly accessible.

Request Body

ParameterTypeRequiredDescription
image_urlstring (URL)YesPublicly accessible HTTP(S) image URL
options.promptstringNoCustom enhancement prompt

Request Example

{
  "image_url": "https://example.com/property-photo.jpg",
  "options": {
    "prompt": "Brighten the sky and enhance lawn color"
  }
}

Response

{
  "data": {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:00:00.000Z"
  }
}
POST/v1/virtual-staging/generate202

Virtually stage an empty room with furniture and decor.

Request Body

ParameterTypeRequiredDescription
image_urlstring (URL)YesPublicly accessible HTTP(S) image of empty room
room_typestringYesRoom type (e.g., living_room, bedroom, kitchen, bathroom, dining_room)
options.style_promptstringNoCustom style prompt (e.g., 'modern minimalist')

Request Example

{
  "image_url": "https://example.com/empty-room.jpg",
  "room_type": "living_room",
  "options": {
    "style_prompt": "Modern Scandinavian with warm wood tones"
  }
}

Response

{
  "data": {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:00:00.000Z"
  }
}
POST/v1/video-clip/generate202

Generate a cinematic video clip from a single property image.

Request Body

ParameterTypeRequiredDescription
image_urlstring (URL)YesPublicly accessible HTTP(S) image URL
options.promptstringNoMotion/style prompt for the video
options.creativity_levelstringNolow, medium, or high. Default: medium
options.frame_modestringNofirst (image is first frame) or last (image is last frame). Default: first
options.durationinteger (3-10)NoVideo duration in seconds. Default: 5

Request Example

{
  "image_url": "https://example.com/property-front.jpg",
  "options": {
    "prompt": "Slow cinematic pan across the facade",
    "creativity_level": "medium",
    "duration": 5
  }
}

Response

{
  "data": {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:00:00.000Z"
  }
}

Markup Generation (Multi-Step)

Markup generation is a multi-step workflow. See the Markup Guide for a full walkthrough.

POST/v1/markup/generate202

Step 1: Start a markup generation job for a property address.

Request Body

ParameterTypeRequiredDescription
addressstringYesFull property address
optionsobjectNoAdditional generation options

Response

{
  "data": {
    "job_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:00:00.000Z"
  }
}
GET/v1/markup/jobs/{jobId}200

Step 2: Poll until status is awaiting_input, then retrieve orientation variants.

Path Parameters

ParameterTypeRequiredDescription
jobIdstring (UUID)YesThe markup job ID

Response (when awaiting_input)

{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "job_type": "markup",
    "status": "awaiting_input",
    "input": { "address": "123 Collins St, Melbourne" },
    "output": {
      "orientation_variants": [
        {
          "key": "bottom",
          "preview_url": "https://...",
          "enhanced_url": "https://..."
        },
        {
          "key": "left",
          "preview_url": "https://...",
          "enhanced_url": "https://..."
        }
      ]
    },
    "created_at": "2026-02-09T10:00:00.000Z",
    "updated_at": "2026-02-09T10:01:15.000Z",
    "completed_at": null
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:01:20.000Z"
  }
}
POST/v1/markup/jobs/{jobId}/select200

Step 3: Select a preferred orientation from the variants.

Request Body

ParameterTypeRequiredDescription
orientationstringYesOrientation key from the variants (e.g., 'bottom', 'left')

Response

{
  "data": {
    "status": "selected",
    "selected_url": "https://..."
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:02:00.000Z"
  }
}
POST/v1/markup/jobs/{jobId}/annotate200

Step 4: Submit boundary annotation with annotated and clean images.

Request Body

ParameterTypeRequiredDescription
annotated_image_urlstring (URL)YesURL of the annotated boundary image
clean_image_urlstring (URL)YesURL of the clean (unannotated) image

Response

{
  "data": {
    "status": "completed"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:03:00.000Z"
  }
}
POST/v1/markup/jobs/{jobId}/video202

Step 5 (optional): Generate a cinematic video from the completed markup.

Request Body

ParameterTypeRequiredDescription
optionsobjectNoAdditional video generation options

Response

{
  "data": {
    "job_id": "661f9500-f30c-52e5-b827-557766551111",
    "status": "queued"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:04:00.000Z"
  }
}

Usage & Billing

GET/v1/usage200

View your usage events and cost summary for a given date range.

Query Parameters

ParameterTypeRequiredDescription
fromstring (YYYY-MM-DD)NoStart date. Default: first day of current month
tostring (YYYY-MM-DD)NoEnd date. Default: today

Response

{
  "data": {
    "events": [
      {
        "id": "evt_abc123",
        "event_type": "drone_footage.generate",
        "unit_price_cents": 250,
        "status": "completed",
        "created_at": "2026-02-09T10:00:00.000Z"
      }
    ],
    "summary": {
      "total_events": 156,
      "total_cost_cents": 39000,
      "from": "2026-02-01",
      "to": "2026-02-09"
    }
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T12:00:00.000Z"
  }
}

Error Responses

All endpoints return errors in a consistent format. See Error Codes for the full list.

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "address is required"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-02-09T10:00:00.000Z"
  }
}
StatusCodeDescription
400VALIDATION_ERRORInvalid request body or parameters
400INVALID_URLProvided URL is not accessible
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENInsufficient permissions
403FEATURE_DISABLEDEndpoint not enabled for your org
403INSUFFICIENT_QUOTAUsage quota exceeded
404JOB_NOT_FOUNDJob ID does not exist
409JOB_IN_PROGRESSA job for this resource is already running
429RATE_LIMITEDToo many requests
500INTERNAL_ERRORUnexpected server error