Form design config
Use the optional design object in your form config to set the form’s appearance. Design is part of the draft config, so you can save it with your form and publish it for respondents.
Properties
| Property | Type | Allowed values |
|---|---|---|
logo | Object | { url, is_rounded } |
logo_size | String | sm, md, lg |
cover_image | String | An image URL |
cover_image_brightness | Number | 40–140 |
cover_image_fit | String | cover, contain |
cover_image_position | Object | { x, y }, each from 0–100 |
cover_image_height | String | short, medium, tall |
font | String | A supported Google Font family name, with exact spelling |
theme | String | system, light, dark |
theme_preset | String | A preset ID, custom, or randomized |
background_color | String | Six-digit hex color, with or without # |
primary_color | String | Six-digit hex color, with or without # |
accent_color | String | Six-digit hex color, with or without # |
foreground_color | String | Six-digit hex color, with or without # |
primary_foreground_color | String | Six-digit hex color, with or without # |
border_radius | Integer | 0–32 |
question_alignment | String | left, center |
form_position | String | left, center |
form_width | String | narrow, default, wide |
custom_css | String | CSS text; applied on hosted and embedded pages when the form owner is on a paid plan |
All keys are optional, and unknown keys are kept. Image sources must be HTTPS URLs on a host Makeform accepts, or absolute paths starting with /. When you set primary_color for the first time without setting accent_color, Makeform copies the primary color to the accent color.
Embeds follow the visitor's system theme by default. Direct /f/ pages are light unless the form's design or ft says otherwise.
Add design to a form config
The config requires a pages array. This example includes one question page and a design:
{
"mode": "page",
"pages": [
{
"type": "form",
"id": "p1",
"ui": [
{
"type": "short_text_input",
"name": "full_name",
"label": "What is your name?",
"required": true
}
]
}
],
"design": {
"logo_size": "md",
"cover_image": "/images/cover.jpg",
"cover_image_brightness": 100,
"cover_image_fit": "cover",
"cover_image_position": {
"x": 50,
"y": 50
},
"cover_image_height": "medium",
"theme": "light",
"theme_preset": "custom",
"background_color": "#FFFFFF",
"primary_color": "#2F6FED",
"border_radius": 12,
"question_alignment": "left",
"form_position": "center",
"form_width": "default"
}
}Save and publish design changes
The form config is stored as a draft in preview_config. To update it through the REST API, send the complete config to PATCH /forms/{id}. The update replaces the whole draft and requires its current draft_hash (or the equivalent If-Match header). You can read the current config and hash with GET /forms/{id}. Publish the saved draft with POST /forms/{id}/publish to make it live.
Use managed images
You can upload a logo or cover image with POST https://api.makeform.ai/forms/{id}/image-assets. Send a multipart request with file and target; accepted formats are GIF, JPEG, PNG, and WebP. Logo and cover image uploads are limited to 4 MiB and are available on any plan. Attach the uploaded image to the form with the MCP tool update_form, using image_asset with the target and asset ID.