AI listing video disclosure line: put it in the Sume output schema

Carry the AI disclosure and the original-photos link with each listing video: a typed output_schema field, what input does not carry, and a check.

4 min readSume
All posts

To keep the AI disclosure attached to a listing video, ask the Format run for it as a field of the typed result. Bind an output_schema with a video file and a disclosure string, and store the whole object next to the listing. The video then never reaches your database without its disclosure line.

This matches the test in HousingWire's June 2026 article (read 2026-10-06): its fourth question asks whether the buyer will actually see the disclosure, and its fifth asks whether the agent can show what was real and what was changed. A required schema field helps with the fourth, not with the fifth. It cites California AB 723, effective 2026-01-01.

What does the run return, and what does it not?

The structured-output page says input and output_schema are different things. input is caller data that goes in; output_schema is the contract for what comes out. Sume builds output from what the run made and said, so a value you sent, such as a listing id or an MLS number, does not come back unless the run repeats it. Keep your identifiers on your side, keyed by the run id or your Idempotency-Key.

So the disclosure text has to be produced by the run. Give the wording in instruction, and ask for it in the schema.

Fields for a listing result, from the Sume Formats docs, read 2026-10-06.
FieldTypeWho fills it
videoSumeMediaFile#The run, from the generated clip
disclosurestringThe run, repeating your wording
listing_idstringNot returned; keep it in your own table by run id

Request body

The shape is the one in Create a run: instruction, input, output_schema, primary_output_key, a cap, and Idempotency-Key. Replace acme/listing-tour with a Format you own; the catalog has no listing Format.

curl -sS -X POST "https://api.sume.com/v1/formats/acme/listing-tour/runs" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: listing-1042-v1" \
  -d '{
    "instruction": "Make a 20 second tour from the attached photos. Set disclosure to exactly: Video was created from listing photos using AI. Camera movement is simulated.",
    "input": { "photos": ["https://cdn.example.com/1042/kitchen.jpg"] },
    "output_schema": {
      "name": "acme/listing-tour/v1", "strict": true,
      "schema": { "type": "object", "additionalProperties": false,
        "required": ["video", "disclosure"],
        "properties": { "video": { "$ref": "SumeMediaFile#" }, "disclosure": { "type": "string" } } }
    },
    "primary_output_key": "video",
    "generation_spend_cap_usd": 10
  }'

How do you check it?

A completed run can still carry output_error when the projection did not match your schema, so read output_error before output. Then compare output.disclosure with your wording in code and refuse to publish on a mismatch. The model wrote that string; your code should not assume it copied it exactly.

Use the listing id and a version as the Idempotency-Key, as in listing-1042-v1. The docs say the same key with the same body returns the original run with idempotency_hit: true and no second charge, and that you should bump the version only when you want a re-run. A time-based key would make every retry a new paid run.

The schema does not make the video lawful or accurate. It makes the disclosure a required field, which is the part software can enforce.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume