Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.katalo.ai/llms.txt

Use this file to discover all available pages before exploring further.

The recommended flow is two-step ingest: create a reusable source asset, poll until it is ready, then create a generation from source_asset_id.

Source assets

EndpointPurpose
POST /api/v1/source-assetsSubmit one original image as multipart upload or source_url and reserve an ingest job.
GET /api/v1/source-assets/{ingest_id}Poll until the ingest job reaches ready and returns source_asset_id.
POST /api/v1/generationsCreate a generation job from the ready source_asset_id.
Inline file and source_url create requests are still accepted on POST /api/v1/generations, but they are compatibility mode. They can return status=ingesting until deferred source ingest finishes.

Lifecycle

StepEndpoint or mechanismWhat it does
1. IngestPOST /api/v1/source-assetsCreates a source ingest job and eventually yields a reusable source_asset_id.
2. CreatePOST /api/v1/generationsStarts a new generation job from source_asset_id and returns the public job_id immediately.
3. CompleteWebhook or GET /api/v1/generations/{job_id}Wait until the job reaches succeeded or failed.
4. RecoverGET /api/v1/generations/{job_id}Re-read final state if webhook delivery failed or a signed output URL expired.
5. IteratePOST /api/v1/generations/{job_id}/regenerateCreate a new job from the same source asset.

Create a generation

POST /api/v1/generations
Create a job from one source image. Use the returned job_id to poll status or correlate webhook delivery.
Exactly one of file, source_url, or source_asset_id is allowed in a single request.
curl https://app.katalo.ai/api/v1/generations \
  -X POST \
  -H "Authorization: Bearer $KATALO_API_KEY" \
  -H "Idempotency-Key: generation-listing-123-lr-1" \
  -H "Content-Type: application/json" \
  -d '{
    "source_asset_id": "src_01JXSRCABCDEFGHIJKL012345",
    "workflow": "staging",
    "capture_type": "photo",
    "mode": "refurnish",
    "room_types": ["Living Room", "Kitchen"],
    "style_preset": "modern",
    "include_alternates": true,
    "reference": "listing-123-lr-1",
    "metadata": {
      "listing_id": "listing-123",
      "partner": "acme"
    },
    "webhook": {
      "url": "https://partner.example.com/webhooks/katalo"
    }
  }'

Create request fields

FieldLocationNecessityNotes
AuthorizationheaderrequiredOrganization-scoped API key in Bearer <token> format.
Idempotency-KeyheaderrequiredReusing the same key with the same payload returns the original job.
filemultipartconditionalUpload one source image directly. Mutually exclusive with source_url and source_asset_id.
source_urlbodyconditionalHTTPS URL Katalo can fetch as the original image.
source_asset_idbodyconditionalExisting Katalo source asset id to reuse as the input image.
workflowbodyrequiredstaging or pro_capture.
capture_typebodyrequiredphoto, panorama360, or floorplan.
modebodyconditionalRequired for staging + photo, including clean. Not allowed for pro_capture, panorama360, or floorplan.
room_typesbodyconditionalRequired for staged photo jobs unless mode=clean. Must stay within one supported room family.
style_presetbodyconditionalRequired for staged panoramas. Optional for staged photos except mode=clean.
include_alternatesbodyoptionalReturns the primary approved output plus at most one approved alternate.
referencebodyoptionalYour stable identifier for the source image or listing context.
metadatabodyoptionalUp to 20 key-value properties echoed back in responses and webhooks.
webhook.urlbodyoptionalPer-request callback URL override. The signing secret is organization-level.

Get a generation

GET /api/v1/generations/{job_id}
Read job state by public id. Use this endpoint for polling, recovery, or fresh signed output URLs.
curl https://app.katalo.ai/api/v1/generations/job_01JXJOBABCDEFGHIJKL0123456 \
  -H "Authorization: Bearer $KATALO_API_KEY"
image_url values are signed and short-lived. Persist the asset in your own storage if your workflow needs longer retention.

Regenerate a generation

POST /api/v1/generations/{job_id}/regenerate
Create a new job from the same source asset as a previous job. Allowed overrides depend on the parent job’s workflow and capture type.
curl https://app.katalo.ai/api/v1/generations/job_01JXJOBABCDEFGHIJKL0123456/regenerate \
  -X POST \
  -H "Authorization: Bearer $KATALO_API_KEY" \
  -H "Idempotency-Key: regenerate-listing-123-lr-2" \
  -H "Content-Type: application/json" \
  -d '{
    "include_alternates": true,
    "reference": "listing-123-lr-2",
    "metadata": {
      "listing_id": "listing-123",
      "attempt": 2
    }
  }'

Response model

Create, get, and regenerate return the same job envelope.
FieldMeaning
job_idPublic id for the job.
parent_job_idParent job id when created via regenerate.
source_asset_idPublic source asset id tied to the original input image.
statusingesting, queued, running, succeeded, or failed.
workflowStored workflow in public API form.
capture_typeStored capture type in public API form.
modeReturned mode, or null when the workflow does not use one.
room_typesCanonical room labels stored for the job. Empty for clean jobs.
style_presetCanonical style preset, or null for clean jobs.
include_alternatesWhether the response can include one approved alternate output.
referenceYour original identifier echoed back unchanged.
metadataYour original metadata echoed back unchanged.
failureTerminal failure details with code, message, and retryable.
outputsPrimary approved output first, plus at most one approved alternate.
created_atJob creation timestamp.
completed_atCompletion timestamp when the job reaches a terminal state.
updated_atLast job update timestamp.

Shared workflow model

FieldValues
workflowstaging, pro_capture
capture_typephoto, panorama360, floorplan
modeOnly valid for staging + photo; panorama and floorplan derive mode from capture_type.

Room family rules

Multi-room staging requests must stay inside one supported family.
FamilyValues
Single roomAny canonical room value is valid on its own.
Open planLiving Room, Kitchen, Dining Room
Wet roomsBathroom, Shower, Toilet

Style presets

The public API accepts canonical preset ids: modern, scandi, boho, country, industrial, mediterranean, luxury, eclectic, and japandia.