curl --request POST \
--url https://api.magicpatterns.com/api/v2/pattern \
--header 'Content-Type: multipart/form-data' \
--header 'x-mp-api-key: <api-key>' \
--form 'prompt=Create a login page' \
--form mode=fast \
--form designSystemId=ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75 \
--form modelSelector=auto \
--form 'images=<string>' \
--form images.items='@example-file'import requests
url = "https://api.magicpatterns.com/api/v2/pattern"
files = { "images.items": ("example-file", open("example-file", "rb")) }
payload = {
"prompt": "Create a login page",
"mode": "fast",
"designSystemId": "ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75",
"modelSelector": "auto",
"images": "<string>"
}
headers = {"x-mp-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('prompt', 'Create a login page');
form.append('mode', 'fast');
form.append('designSystemId', 'ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75');
form.append('modelSelector', 'auto');
form.append('images', '<string>');
form.append('images.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'x-mp-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.magicpatterns.com/api/v2/pattern', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.magicpatterns.com/api/v2/pattern",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-mp-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.magicpatterns.com/api/v2/pattern"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-mp-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.magicpatterns.com/api/v2/pattern")
.header("x-mp-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.magicpatterns.com/api/v2/pattern")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-mp-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": "abc123",
"sourceFiles": [
{
"id": "<string>",
"name": "<string>",
"code": "<string>"
}
],
"compiledFiles": [
{
"id": "<string>",
"fileName": "<string>",
"hostedUrl": "<string>"
}
],
"editorUrl": "https://www.magicpatterns.com/c/abc123",
"previewUrl": "https://abc123-preview.magicpatterns.app",
"chatMessages": [
{
"role": "assistant",
"content": "I will create a login page with a centered layout."
}
]
}{
"message": "Invalid API key."
}{
"message": "Invalid API key."
}{
"message": "Invalid API key."
}{
"message": "Invalid API key."
}Create a new design (V2)
Deprecated — use POST /v3/designs instead.
Creates a new design based on the provided prompt and optional images. This version supports custom design systems. v2 remains online for backwards compatibility with existing integrations and will be removed in a future release. The same API key works against both v2 and v3.
curl --request POST \
--url https://api.magicpatterns.com/api/v2/pattern \
--header 'Content-Type: multipart/form-data' \
--header 'x-mp-api-key: <api-key>' \
--form 'prompt=Create a login page' \
--form mode=fast \
--form designSystemId=ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75 \
--form modelSelector=auto \
--form 'images=<string>' \
--form images.items='@example-file'import requests
url = "https://api.magicpatterns.com/api/v2/pattern"
files = { "images.items": ("example-file", open("example-file", "rb")) }
payload = {
"prompt": "Create a login page",
"mode": "fast",
"designSystemId": "ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75",
"modelSelector": "auto",
"images": "<string>"
}
headers = {"x-mp-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('prompt', 'Create a login page');
form.append('mode', 'fast');
form.append('designSystemId', 'ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75');
form.append('modelSelector', 'auto');
form.append('images', '<string>');
form.append('images.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'x-mp-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.magicpatterns.com/api/v2/pattern', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.magicpatterns.com/api/v2/pattern",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-mp-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.magicpatterns.com/api/v2/pattern"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-mp-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.magicpatterns.com/api/v2/pattern")
.header("x-mp-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.magicpatterns.com/api/v2/pattern")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-mp-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"prompt\"\r\n\r\nCreate a login page\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"mode\"\r\n\r\nfast\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"designSystemId\"\r\n\r\nds-9b80b54e-92b3-4b2f-8265-afe466ee8b75\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"modelSelector\"\r\n\r\nauto\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"images.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"id": "abc123",
"sourceFiles": [
{
"id": "<string>",
"name": "<string>",
"code": "<string>"
}
],
"compiledFiles": [
{
"id": "<string>",
"fileName": "<string>",
"hostedUrl": "<string>"
}
],
"editorUrl": "https://www.magicpatterns.com/c/abc123",
"previewUrl": "https://abc123-preview.magicpatterns.app",
"chatMessages": [
{
"role": "assistant",
"content": "I will create a login page with a centered layout."
}
]
}{
"message": "Invalid API key."
}{
"message": "Invalid API key."
}{
"message": "Invalid API key."
}{
"message": "Invalid API key."
}Authorizations
Body
The prompt for the new design.
"Create a login page"
The mode to use for the new design, either 'fast' for quicker generation or 'best' for higher quality. Defaults to 'fast'.
fast, best "fast"
UUID of the design system to use. If nothing is provided, our base design system will be used. Otherwise you can use this to specify your own design system ID.
"ds-9b80b54e-92b3-4b2f-8265-afe466ee8b75"
The model to use for generation. Defaults to 'auto'.
auto, claude_sonnet, gemini "auto"
Optional images to inspire or guide the design creation. Maximum file size is 5MB per image.
Response
Successfully created a new design.
The unique ID of the created design.
"abc123"
The source files for the design.
Show child attributes
Show child attributes
The compiled/processed files for the design.
Show child attributes
Show child attributes
URL to access the editor interface.
"https://www.magicpatterns.com/c/abc123"
URL to preview the generated design.
"https://abc123-preview.magicpatterns.app"
The conversation history for this design.
Show child attributes
Show child attributes
Was this page helpful?