Modulify

Change the AI media preferences

update_ai_preferences

Changes the AI media preferences of a site, from whether paid media is on to the image and video models it uses.

POST /v1/update_ai_preferencesScopesites:writeMakes changes

Only the fields you send change, and every open editor on the site updates straight away, teammates included. The settings belong to the site, not to a person, so they apply to every picture and clip anyone makes on it afterwards, whether through the editor chat or send_message.

Turning paid media on, picking a pricier model, or raising the image size, clip length or resolution makes every later picture or clip cost more. The tool tells the client to make such a change only when you asked for exactly that, and to tell you the new price, which the response carries in Summary.

Every setting can be changed while paid media is off, so a site can be configured first and switched on after. A value that is not accepted, such as a model that is not available right now, fails the whole call with the list of valid values and saves nothing. A call that sends nothing to change is refused too. get_ai_preferences shows the valid values and their prices. See Preferences.

Request

Call it with a POST to https://api.modulify.ai/v1/update_ai_preferences, sending the inputs below as a JSON object. The token needs the sites:write scope.

It makes changes, so send an Idempotency-Key header whenever you might retry it. A retry with the same key gets the first answer back instead of running again.

curl -X POST https://api.modulify.ai/v1/update_ai_preferences \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"PROJECT_ID"}'

Over MCP, the same method is the update_ai_preferences tool.

Inputs

Input Type Required Description
projectId string Yes The site id.
paidMediaEnabled boolean No True lets the site generate, edit and animate pictures, false turns all paid media off. Free stock photo search keeps working either way.
imageModel string No automatic, or the key of one of the image models get_ai_preferences lists. automatic follows whatever Modulify recommends.
imageMaxSize string No The largest picture size, 1k, 2k or 4k. Models that set their own size from the shape ignore it, and the ones that stop at 2k use 2k. get_ai_preferences lists what each model takes.
videoModel string No automatic, or the key of one of the video models get_ai_preferences lists. automatic follows whatever Modulify recommends.
videoResolution string No 720p or 1080p. Some models make 720p only, and on the Veo models 1080p always renders 8 second clips.
videoDuration integer No The longest clip in seconds, a length at least one of the models get_ai_preferences lists offers. A model that does not offer that length uses the longest one it offers below it, or its shortest when it has nothing shorter.
videoAudio boolean No True lets visitors unmute generated clips, false keeps them always muted. On a model that makes sound as an extra, sound doubles the price of a clip, and silent models ignore it. get_ai_preferences shows which is which.

Response

Every call answers with the JSON envelope of success, message, data, code and version. data holds the result described above, and on a method that returns a total, count carries it. The response headers carry the call's X-Request-Id and what is left of your per-minute budget in X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Errors explains every status code a call can answer with.