{"openapi":"3.1.0","info":{"title":"REB Developer API","version":"1.0.0","description":"The engine behind REB Studio, as an API: a multi-engine AI arsenal plus real-estate recipes (listing enhance, aerial lot trace, cinematic reels). Async by design — submit a job, poll the task, fetch the result. Metered USD billing; first $5 free.","contact":{"name":"REB Developer Support","email":"erik@reelestateboss.com","url":"https://www.reelestateboss.com/developers"}},"servers":[{"url":"https://www.reelestateboss.com","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Generate","description":"Run any live engine directly."},{"name":"Tasks","description":"Poll async jobs for their result."},{"name":"Recipes","description":"Higher-level real-estate endpoints."}],"paths":{"/v1/generate":{"post":{"tags":["Generate"],"summary":"Run an engine","description":"Submit a generation on any live engine. Returns a task id + poll URL. Billed on success only.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"}}}},"responses":{"202":{"description":"Job queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueued"}}}},"400":{"description":"Unknown/unavailable model or bad input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Spend cap reached, or free trial exhausted with no card on file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Provider submit failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tasks/{id}":{"get":{"tags":["Tasks"],"summary":"Get a task","description":"Poll a job by id. When succeeded, returns the output URLs and the billed cost.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Task id from a submit call"}],"responses":{"200":{"description":"Task state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Task not found for this key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"POST /v1/recipes/listing-enhance":{"post":{"tags":["Recipes"],"summary":"Listing Enhance","description":"Raw interior/exterior/drone photo → MLS-grade edit, tuned to the REB look.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeRequest"}}}},"responses":{"202":{"description":"Job queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueued"}}}},"400":{"description":"Bad request — missing or invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Spend cap reached, or free trial exhausted with no card on file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"POST /v1/recipes/lot-trace":{"post":{"tags":["Recipes"],"summary":"Lot Trace","description":"Aerial photo + boundary points → parcel isolation with an acreage callout.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeRequest"}}}},"responses":{"202":{"description":"Job queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueued"}}}},"400":{"description":"Bad request — missing or invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Spend cap reached, or free trial exhausted with no card on file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"POST /v1/recipes/reel":{"post":{"tags":["Recipes"],"summary":"Cinematic Reel","description":"Listing photos or raw clips → a post-ready cinematic reel with captions.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeRequest"}}}},"responses":{"202":{"description":"Job queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueued"}}}},"400":{"description":"Bad request — missing or invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Spend cap reached, or free trial exhausted with no card on file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"POST /v1/recipes/listing-kit":{"post":{"tags":["Recipes"],"summary":"Listing Kit","description":"Listing details + photos → flyer, social, story, captions — brand-locked.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeRequest"}}}},"responses":{"202":{"description":"Job queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueued"}}}},"400":{"description":"Bad request — missing or invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Spend cap reached, or free trial exhausted with no card on file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"POST /v1/generate":{"post":{"tags":["Recipes"],"summary":"Engine passthrough","description":"Call any engine in the arsenal directly by id — the raw multi-engine passthrough.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecipeRequest"}}}},"responses":{"202":{"description":"Job queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueued"}}}},"400":{"description":"Bad request — missing or invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Spend cap reached, or free trial exhausted with no card on file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"reb_live_…","description":"Your API key as a Bearer token. Create one in the Developer Console."}},"schemas":{"GenerateRequest":{"type":"object","required":["model"],"properties":{"model":{"type":"string","description":"Engine id (see /v1 live models).","enum":["flux-ultra","gemini-image","gpt-image","seedream-4","flux-schnell","flux-dev","recraft-v3","kontext","kontext-max","seedream-edit","gemini-edit","gpt-image-edit","inpaint","bg-remove","upscale-clarity","upscale-recraft","seedance-lite-i2v","kling-i2v","seedance-pro-i2v","hailuo-i2v","wan-i2v","veo3-i2v","veo3-t2v","veo3-fast","kling-t2v","seedance-t2v","ltx-video","video-upscale","lipsync","tts","runway-gen45","runway-aleph","hf-veo31","hf-kling3","hf-gemini-omni","hf-nano-pro","hf-seedream5","hf-gpt-image2","sora2-t2v","flux2","lyria2"]},"prompt":{"type":"string","description":"Text prompt, when the engine takes one."},"image_url":{"type":"string","format":"uri","description":"Input image, for image→image / image→video engines."},"video_url":{"type":"string","format":"uri","description":"Input video, for video→video engines."},"audio_url":{"type":"string","format":"uri","description":"Input audio, where applicable."},"params":{"type":"object","additionalProperties":true,"description":"Engine-specific parameters."}}},"RecipeRequest":{"type":"object","description":"Recipe inputs — most take an image_url and/or prompt; see each recipe.","properties":{"prompt":{"type":"string"},"image_url":{"type":"string","format":"uri"},"params":{"type":"object","additionalProperties":true}}},"TaskQueued":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","example":"queued"},"price_usd":{"type":"string","example":"0.18","description":"Published price for this job."},"poll_url":{"type":"string","format":"uri"}}},"Task":{"type":"object","properties":{"status":{"type":"string","enum":["queued","running","succeeded","failed"]},"output":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"type":{"type":"string"}}}},"cost_usd":{"type":"string","example":"0.18"},"error":{"type":"string"}}},"Error":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message."}}}}}}