curl -X POST https://api.bouncy.ai/v1/websites/drafts \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "y2k-card",
"semantic": {
"profile": { "name": "Amy Rose", "handle": "@amyrose", "bio": "Photographer and traveller" },
"links": [
{ "type": "simple", "title": "My portfolio", "subtitle": "", "text": "", "url": "https://amyrose.com", "style": "pink", "colors": { "background": "", "text": "" }, "animation": "none", "platform": "youtube" }
],
"socials": [{ "platform": "instagram", "handle": "amyrose" }],
"seo": { "pageTitle": "Amy Rose", "metaDescription": "Photographer and traveller" }
}
}'
const response = await fetch('https://api.bouncy.ai/v1/websites/drafts', {
method: 'POST',
headers: {
'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
templateId: 'y2k-card',
semantic: {
profile: { name: 'Amy Rose', handle: '@amyrose', bio: 'Photographer and traveller' },
socials: [{ platform: 'instagram', handle: 'amyrose' }]
}
})
});
const { data } = await response.json();
console.log('Finish it here:', data.editorUrl);
{
"success": true,
"data": {
"id": "Xk2q9ZpL0aBcD3eF4gHi",
"templateId": "y2k-card",
"name": "Amy Rose",
"editorUrl": "https://app.bouncy.ai/create-website/editor/y2k-card?draft=Xk2q9ZpL0aBcD3eF4gHi"
}
}
{
"error": "Bad Request",
"message": "templateId must be one of: y2k-card, cover-stack, ...",
"field": "templateId"
}
Websites
Create Website Draft
Save a link-in-bio page as a draft and get a link to finish it in the editor
POST
/
v1
/
websites
/
drafts
curl -X POST https://api.bouncy.ai/v1/websites/drafts \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "y2k-card",
"semantic": {
"profile": { "name": "Amy Rose", "handle": "@amyrose", "bio": "Photographer and traveller" },
"links": [
{ "type": "simple", "title": "My portfolio", "subtitle": "", "text": "", "url": "https://amyrose.com", "style": "pink", "colors": { "background": "", "text": "" }, "animation": "none", "platform": "youtube" }
],
"socials": [{ "platform": "instagram", "handle": "amyrose" }],
"seo": { "pageTitle": "Amy Rose", "metaDescription": "Photographer and traveller" }
}
}'
const response = await fetch('https://api.bouncy.ai/v1/websites/drafts', {
method: 'POST',
headers: {
'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
templateId: 'y2k-card',
semantic: {
profile: { name: 'Amy Rose', handle: '@amyrose', bio: 'Photographer and traveller' },
socials: [{ platform: 'instagram', handle: 'amyrose' }]
}
})
});
const { data } = await response.json();
console.log('Finish it here:', data.editorUrl);
{
"success": true,
"data": {
"id": "Xk2q9ZpL0aBcD3eF4gHi",
"templateId": "y2k-card",
"name": "Amy Rose",
"editorUrl": "https://app.bouncy.ai/create-website/editor/y2k-card?draft=Xk2q9ZpL0aBcD3eF4gHi"
}
}
{
"error": "Bad Request",
"message": "templateId must be one of: y2k-card, cover-stack, ...",
"field": "templateId"
}
Send a short page config (the same shape Bouncy’s AI website builder produces) and get back
editorUrl. Opening it shows the page in the Bouncy editor, fully built, where it can be reviewed and published. Nothing goes live until it is published from the editor, and the draft does not count toward link limits.
Drafts that are never opened expire after 30 days. Once a draft is edited in the editor it is kept like any other draft.
Request
Headers
string
required
Must be
application/jsonBody
string
The design. One of:
y2k-card, cover-stack, simple-stack-v2, modern-card-v2, minimal-card-v2, spotlight-card-v2, professional-link-bio-v2, bento-grid, neo-brutalist, music-release, music-sleeve, music-onyx, root-terminal, bonbon-card, portrait-card, scene-card, noir-publisher. May be given as semantic.templateId instead; when both are sent, this one wins.object
required
The page config (max 64 KB as JSON). The editor fills anything left out with the design’s defaults.
Show properties
Show properties
object
name, handle (e.g. @amy) and bioobject
type (letter or emoji) and valueobject
background (type: preset, gradient or solid, plus preset, gradient or solid), page and typography (nameStyle, nameColor, handleColor, bioColor)array
Blocks in order. Each has
type (simple, featured, header, text, divider or media), title, subtitle, text, url, style, colors (background, text), animation and, for media blocks, platformarray
{ "platform": "instagram", "handle": "amy" } items (a handle or a full profile URL)object
pageTitle and metaDescriptionobject
spotlight-card-v2 only: enabled, text, durationMinutesstring
Draft name shown in the dashboard’s Drafts list (max 120 characters). Defaults to
semantic.profile.name, then semantic.seo.pageTitle.Response
boolean
Whether the draft was saved
object
curl -X POST https://api.bouncy.ai/v1/websites/drafts \
-H "Authorization: Bearer bcy_live_pk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "y2k-card",
"semantic": {
"profile": { "name": "Amy Rose", "handle": "@amyrose", "bio": "Photographer and traveller" },
"links": [
{ "type": "simple", "title": "My portfolio", "subtitle": "", "text": "", "url": "https://amyrose.com", "style": "pink", "colors": { "background": "", "text": "" }, "animation": "none", "platform": "youtube" }
],
"socials": [{ "platform": "instagram", "handle": "amyrose" }],
"seo": { "pageTitle": "Amy Rose", "metaDescription": "Photographer and traveller" }
}
}'
const response = await fetch('https://api.bouncy.ai/v1/websites/drafts', {
method: 'POST',
headers: {
'Authorization': 'Bearer bcy_live_pk_YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
templateId: 'y2k-card',
semantic: {
profile: { name: 'Amy Rose', handle: '@amyrose', bio: 'Photographer and traveller' },
socials: [{ platform: 'instagram', handle: 'amyrose' }]
}
})
});
const { data } = await response.json();
console.log('Finish it here:', data.editorUrl);
{
"success": true,
"data": {
"id": "Xk2q9ZpL0aBcD3eF4gHi",
"templateId": "y2k-card",
"name": "Amy Rose",
"editorUrl": "https://app.bouncy.ai/create-website/editor/y2k-card?draft=Xk2q9ZpL0aBcD3eF4gHi"
}
}
{
"error": "Bad Request",
"message": "templateId must be one of: y2k-card, cover-stack, ...",
"field": "templateId"
}