Ad creatives

A full ad campaign from one listing.

Pass a listing and your brand kit. Get every placement — feed, square, link, YouTube thumbnail and print flyer — sized, on-brand, with your headshot, broker attribution and the Equal Housing Opportunity mark.

POST/v1/studio/creatives/generateasync · ~5s
Just listed ad, 4:5 feed placement, for a sample listing at $649,000
Open house ad, 1:1 square placement
Just listed ad, 16:9 YouTube thumbnail placement
  • just_listed
  • open_house
  • price_improved
  • just_sold
Use cases

Every trigger, every placement

01

Just listed & open house

Launch creatives the moment a listing goes live, and again before the open house.

02

Price improved & just sold

Keep the campaign going through the listing’s whole lifecycle.

03

Compliance checks

Broker attribution, legal lines and the Equal Housing Opportunity logo in every result.

creatives

Every placement for one listing.

Sample listing, agent and brokerage are fictional; the headshot is AI-generated. Ads are real Studio API output.

Just listed ad, 4:5 feed placement, for a sample listing at $649,000
feed_portrait · 4:5
Just listed ad, 16:9 YouTube thumbnail placement
youtube · 16:9
Just listed print flyer placement
flyer · 8.5×11
Open house ad, 1:1 square placement
square · 1:1
Open house ad, link placement
link · 1.91:1
API

One request. That’s the integration.

Authenticate with x-api-key or Authorization: Bearer — the same key as the Listings API.

POST/v1/studio/creatives/generateAsync · ~5s
01POST an MLS ID (or a photo and details), a trigger and your brand kit. You get a job_id right away.
02Poll GET /v1/studio/jobs/:job_id or wait for your webhook.
03Download every placement and the print flyer — then publish them.
Body parameters11
mls_idstring
Pull photos and details from a listing. Or pass photo_url and property_details.
photo_urlstring
Hero photo, when not using mls_id.
property_detailsobject
address, price, beds, baths, sqft — anything left out is left off the ad.
triggerenum
just_listed · open_house · price_improved · just_sold
directionenum
magazine · bold · warm
placementsenum[]
feed_portrait · square · link · youtube · flyer
include_carouselboolean
Also return the rendered placements as an ordered carousel pack.
brand_kitobject
agent_name, brokerage_name, phone, license_number, agent_headshot_url, brand colors. Only what you pass appears on the ad.
open_house{ day, time }
Shown on open house creatives.
highlightsstring[]
Selling points to feature.
webhook_urlstring
Called with the finished job when processing completes.
terminal
curl -X POST https://mlsapi.dev/v1/studio/creatives/generate \
-H "x-api-key: $MLSAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"photo_url": "https://cdn.example.com/listings/1420-coral-mist/exterior-twilight.jpg",
"property_details": {
"address": "1420 Coral Mist Lane, Sunhaven, FL",
"price": 649000,
"beds": 4,
"baths": 3,
"sqft": 2180
},
"trigger": "just_listed",
"direction": "magazine",
"placements": [
"feed_portrait",
"youtube",
"flyer"
],
"brand_kit": {
"agent_name": "Maya Linwood",
"brokerage_name": "Tidewater & Pine Realty",
"phone": "(555) 010-0147",
"license_number": "Lic. #SAMPLE-0000",
"agent_headshot_url": "https://cdn.example.com/agents/maya-linwood.jpg",
"primary_brand_color": "#1A365D",
"accent_brand_color": "#D4AF37"
}
}'
202 Accepted
POST /v1/studio/creatives/generate
{
"job_id": "job_studio_01JA0XQ4M9ZK7T",
"type": "ad_creatives",
"status": "processing",
"progress_percentage": 10,
"current_step": "initializing_pipeline",
"estimated_completion_seconds": 5,
"created_at": "2026-09-29T14:02:11.000Z",
"status_url": "/v1/studio/jobs/job_studio_01JA0XQ4M9ZK7T"
}

Try Branded Ad Creatives in Studio.

Sign up or log in at studio.mlsapi.dev to run it on your own photos — then call the same endpoint from your code.