---
title: "Check property decision job availability"
method: HEAD
path: "/api/property-update-jobs/{id}"
tags: ["real-estate", "property-research", "category:reports"]
---

# Check property decision job availability

`HEAD /api/property-update-jobs/{id}`

## Request

- Base URL: `https://api.locus.report`
- URL: `https://api.locus.report/api/property-update-jobs/{id}`
- Auth: one of:
  - API key in query parameter `token`
  - HTTP bearer

Token-gated status availability check. Returns the same status and cache headers as GET without a response body.

## Path parameters

- `id` string, required

## Query parameters

- `token` string

## Response `200`

Current durable job state. flyerReady true means the PDF handoff can be used before video completion.

- union
  - object
    - `kind` 'property_update_job', required
    - `jobId` string, required
    - `status` 'payment_pending' | 'queued' | 'processing' | 'ready' | 'partial' | 'failed', required
    - `stage` 'request_received' | 'locating_property' | 'checking_recent_records' | 'researching_supporting_context' | 'building_report' | 'rendering_pdf' | 'rendering_video' | 'ready', required
    - `statusUrl` string, uri, required
    - `expiresAt` string, required
    - `pollAfterSeconds` integer
    - `estimatedSecondsRemaining` object, required
      - `min` integer, required
      - `max` integer, required
    - `progressMessage` string, required
    - `deliverables` object, required
      - `report` 'pending' | 'ready', required
      - `pdf` 'pending' | 'ready', required
      - `video` 'pending' | 'rendering' | 'ready' | 'failed', required
    - `artifacts` object
      - `reportUrl` string, uri, required
      - `pdfUrl` string, uri
      - `videoUrl` string, uri
    - `videoScenes` object[]: Timestamp -> scene -> source map for the rendered MP4 (citable/scrubbable).
      - `startMs` integer, required
      - `endMs` integer, required
      - `kind` 'context' | 'subject' | 'finding' | 'handoff', required
      - `eyebrow` string, required
      - `title` string, required
      - `source` object, nullable, required
        - `sourceName` string, required
        - `sourceUrl` string, uri
        - `recordId` string
    - `errorCode` string
    - `videoRender` object, required
      - `status` 'pending' | 'rendering' | 'ready' | 'failed', required
      - `attempts` integer, required
      - `lastErrorCode` string
    - `createdAt` string, required
    - `updatedAt` string, required
    - `flyerReady` false, required
  - object
    - `kind` 'property_update_job', required
    - `jobId` string, required
    - `status` 'payment_pending' | 'queued' | 'processing' | 'ready' | 'partial' | 'failed', required
    - `stage` 'request_received' | 'locating_property' | 'checking_recent_records' | 'researching_supporting_context' | 'building_report' | 'rendering_pdf' | 'rendering_video' | 'ready', required
    - `statusUrl` string, uri, required
    - `expiresAt` string, required
    - `pollAfterSeconds` integer
    - `estimatedSecondsRemaining` object, required
      - `min` integer, required
      - `max` integer, required
    - `progressMessage` string, required
    - `deliverables` object, required
      - `report` 'pending' | 'ready', required
      - `pdf` 'pending' | 'ready', required
      - `video` 'pending' | 'rendering' | 'ready' | 'failed', required
    - `artifacts` object
      - `reportUrl` string, uri, required
      - `pdfUrl` string, uri
      - `videoUrl` string, uri
    - `videoScenes` object[]: Timestamp -> scene -> source map for the rendered MP4 (citable/scrubbable).
      - `startMs` integer, required
      - `endMs` integer, required
      - `kind` 'context' | 'subject' | 'finding' | 'handoff', required
      - `eyebrow` string, required
      - `title` string, required
      - `source` object, nullable, required
        - `sourceName` string, required
        - `sourceUrl` string, uri
        - `recordId` string
    - `errorCode` string
    - `videoRender` object, required
      - `status` 'pending' | 'rendering' | 'ready' | 'failed', required
      - `attempts` integer, required
      - `lastErrorCode` string
    - `createdAt` string, required
    - `updatedAt` string, required
    - `flyerReady` true, required
    - `flyerHandoffUrl` string, uri, required: Ready proof-gated PDF URL. Use the emitted URL; do not transform the private job token.
    - `flyerHandoff` object, required: Pass this object directly as reportHandoff to locus-property-flyer.
      - `pdfUrl` string, uri, required
      - `expiresAt` string, required

## Other responses

- `404`: Unknown job or missing/incorrect private token. These cases intentionally share the same response.
- `503`: Property-update persistence is unavailable.

---

[API](https://skmtc.dev/locus/apis/locus-api.md) · [All operations](https://skmtc.dev/locus/apis/locus-api/llms.txt) · [OpenAPI document](https://skmtc.dev/locus/apis/locus-api/revisions/ba7786b74adb?raw)
