Create the preset

Embed
Preview of the card
<a href="https://forumulate.com/reference/forumulate-api-shape-applypreset"><img src="https://forumulate.com/reference/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/8042f004-e3d9-445f-b7a4-b6c1f86836e6/pages/883edb14-7cf2-4675-b4ca-87728dfa8d11/social-card.svg?v=3e7ae33eec8b" alt="Create the preset" width="600" height="315"></a>
POSThttps://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}

Applies a shipped shape patch — a set of slot, field and tab changes — on top of whatever this space has already customised, rather than replacing it. Idempotent, so a space that renamed a slot keeps the rename.

Requires token scope: write (the coarse method gate) for Atlas key (ak_), Personal Access Token (cft_) or OAuth (cfo_) auth — in addition to any catalog scope (GET /pats/scopes) the route’s capability needs. Session/cookie auth is governed by RBAC capabilities instead.

Parameters
orgIdstringpathrequired
spaceIdstringpathrequired
namestringpathrequired
Which page shape to apply. A shape adds named slots to what a piece of this space is made of; it is NOT the reader layout (that is PUT …/preset). how-to — One task, done. The goal, what you need first, the steps, and how to tell it worked. tutorial — Learning by building something end to end — for somebody who does not know the product yet. reference — What something is and exactly how it behaves — read in a hurry, by somebody who already knows why. explanation — Why something works the way it does — the page that stops the same question being asked forever. troubleshooting — One symptom, its cause, and the fix — written for somebody who is already annoyed. bug-report — What happened, what should have happened, and how to see it — the three things a fix needs. feature-request — The problem first, then the idea — so somebody can solve it a better way than you asked for. question — Asks for the context, what was already tried, and what was expected — the three things a good answer needs. landing — A wide opening statement, then the three things you want somebody to do next. comparison — Two things, side by side, and the honest sentence about when to pick each. release — What shipped, what it changes for a reader, and what to do if it broke something. keepachangelog — The standard changelog categories — Added, Changed, Fixed, and the rest — one list each. incident — What broke, who it hit, what you did, and what stops it happening again. role — The work, who it suits, what it pays, and how to apply. policy — A plain-English summary over the document itself, so somebody can read either. announcement — One thing, said properly: what it is, why now, and what a reader does about it. faq-answer — The answer first, then the reason, for the question you keep being asked.
how-to | tutorial | reference | explanation | troubleshooting | bug-report | feature-request | question | landing | comparison | release | keepachangelog | incident | role | policy | announcement | faq-answer
forumulate-versionstringheader
API version negotiation. Send forumulate-version: 2026-12-01 on every request from a new integration; it is optional only so that integrations written before versioning keep working. Each version includes everything before it:
Idempotency-Keystringheader
Makes this write safe to retry. Optional — send any unique string (a UUID is ideal) and the first request runs while its response is remembered under that key for 24 hours; an identical retry replays that same status and body instead of acting twice, so a timeout or a 5xx from the edge can be retried without creating a second row. A retry sent while the first request is still in flight is refused with 409. The key is scoped to the method and path, so the same key on a different endpoint is a different request. Error responses of 5xx are never cached — those retries re-run. A key is bound to the BODY it was first used with: reusing it with a different body is a 409 idempotency.key_reused, not a replay, because replaying would tell you a write landed that never ran. Generate one key per request, never per process or per session.
Code samples
cURL
curl -X POST "https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}" \
  -H "forumulate-version: <value>" \
  -H "Idempotency-Key: <value>"
TypeScript
const res = await fetch('https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}', {
  method: 'POST',
  headers: {
    'forumulate-version': '<value>',
    'Idempotency-Key': '<value>',
  },
});
const data = await res.json();
Python
import requests

res = requests.request(
    "POST",
    "https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}",
    headers={
    "forumulate-version": "<value>",
    "Idempotency-Key": "<value>",
    },
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}", nil)
	req.Header.Set("forumulate-version", "<value>")
	req.Header.Set("Idempotency-Key", "<value>")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['forumulate-version: <value>', 'Idempotency-Key: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}')
req = Net::HTTP::Post.new(uri)
req['forumulate-version'] = '<value>'
req['Idempotency-Key'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://forumulate.com/api/orgs/{orgId}/spaces/{spaceId}/shape/presets/{name}"))
    .header("forumulate-version", "<value>")
    .header("Idempotency-Key", "<value>")
    .method("POST", BodyPublishers.noBody())
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 Success.
Example
{
  "base": {
    "blockTypes": [
      {
        "description": "string",
        "fields": [
          null
        ],
        "group": "string",
        "icon": "string",
        "key": "string",
        "label": "string",
        "variants": [
          null
        ]
      }
    ],
    "params": [
      {
        "accept": [
          null
        ],
        "admin": {
          "collapsed": null,
          "collapsible": null,
          "row": null,
          "tab": null
        },
        "allowed": [
          null
        ],
        "allowedBlocks": [
          null
        ],
        "allowedGroups": [
          null
        ],
        "column": true,
        "condition": null,
        "default": {},
        "expr": null,
        "facet": true,
        "fields": [
          null
        ],
        "from": "string",
        "hasMany": true,
        "hint": "string",
        "indexed": true,
        "internal": true,
        "key": "string",
        "label": "string",
        "language": "string",
        "localized": true,
        "max": 0,
        "maxLength": 0,
        "meta": true,
        "min": 0,
        "minLength": 0,
        "options": [
          null
        ],
        "pattern": "string",
        "placeholder": "string",
        "relationSpaceId": "string",
        "required": true,
        "rowLabelField": "string",
        "schema": {},
        "schemaProperty": "string",
        "sortable": true,
        "to": [
          null
        ],
        "type": "array",
        "unique": true,
        "visibility": "internal"
      }
    ],
    "sections": [
      {
        "example": "string",
        "hint": "string",
        "key": "string",
        "kind": "list",
        "label": "string",
        "render": "labelled",
        "required": true,
        "role": "example",
        "schemaProperty": "string"
      }
    ],
    "settings": {
      "blockLibrary": true,
      "defaultSort": "string",
      "defaultVisibility": "internal",
      "group": "string",
      "icon": "string",
      "listColumns": [
        "string"
      ],
      "orderable": true,
      "previewUrl": "string",
      "routable": true,
      "searchableFields": [
        "string"
      ],
      "singleton": true,
      "slugField": "string",
      "strict": true,
      "titleField": "string",
      "versions": {
        "max": 0
      }
    },
    "space": {
      "index": "board",
      "nav": "categories",
      "order": "activity",
      "summary": [
        "string"
      ],
      "whoCreates": "anyone"
    },
    "unknown": [
      "string"
    ]
  },
  "defaultKind": "string",
  "jsonSchema": {},
  "override": {
    "blockTypes": {
      "add": [
        {
          "description": null,
          "fields": null,
          "group": null,
          "icon": null,
          "key": null,
          "label": null,
          "variants": null
        }
      ],
      "omit": [
        "string"
      ],
      "order": [
        "string"
      ],
      "set": {},
      "unset": {}
    },
    "params": {
      "add": [
        {
          "accept": null,
          "admin": null,
          "allowed": null,
          "allowedBlocks": null,
          "allowedGroups": null,
          "column": null,
          "condition": null,
          "default": null,
          "expr": null,
          "facet": null,
          "fields": null,
          "from": null,
          "hasMany": null,
          "hint": null,
          "indexed": null,
          "internal": null,
          "key": null,
          "label": null,
          "language": null,
          "localized": null,
          "max": null,
          "maxLength": null,
          "meta": null,
          "min": null,
          "minLength": null,
          "options": null,
          "pattern": null,
          "placeholder": null,
          "relationSpaceId": null,
          "required": null,
          "rowLabelField": null,
          "schema": null,
          "schemaProperty": null,
          "sortable": null,
          "to": null,
          "type": null,
          "unique": null,
          "visibility": null
        }
      ],
      "omit": [
        "string"
      ],
      "order": [
        "string"
      ],
      "set": {},
      "unset": {}
    },
    "sections": {
      "add": [
        {
          "example": null,
          "hint": null,
          "key": null,
          "kind": null,
          "label": null,
          "render": null,
          "required": null,
          "role": null,
          "schemaProperty": null
        }
      ],
      "omit": [
        "string"
      ],
      "order": [
        "string"
      ],
      "set": {},
      "unset": {}
    },
    "space": {
      "index": "board",
      "nav": "categories",
      "order": "activity",
      "summary": [
        "string"
      ],
      "whoCreates": "anyone"
    }
  },
  "presets": [
    {
      "description": "string",
      "label": "string",
      "layout": [
        null
      ],
      "name": "string",
      "own": true,
      "sections": [
        {
          "key": null,
          "kind": null,
          "label": null,
          "required": null,
          "role": null
        }
      ],
      "settings": {
        "blockLibrary": true,
        "defaultSort": "string",
        "defaultVisibility": "internal",
        "group": "string",
        "icon": "string",
        "listColumns": [
          null
        ],
        "orderable": true,
        "previewUrl": "string",
        "routable": true,
        "searchableFields": [
          null
        ],
        "singleton": true,
        "slugField": "string",
        "strict": true,
        "titleField": "string",
        "versions": {
          "max": null
        }
      }
    }
  ],
  "shape": {
    "blockTypes": [
      {
        "description": "string",
        "fields": [
          null
        ],
        "group": "string",
        "icon": "string",
        "key": "string",
        "label": "string",
        "variants": [
          null
        ]
      }
    ],
    "params": [
      {
        "accept": [
          null
        ],
        "admin": {
          "collapsed": null,
          "collapsible": null,
          "row": null,
          "tab": null
        },
        "allowed": [
          null
        ],
        "allowedBlocks": [
          null
        ],
        "allowedGroups": [
          null
        ],
        "column": true,
        "condition": null,
        "default": {},
        "expr": null,
        "facet": true,
        "fields": [
          null
        ],
        "from": "string",
        "hasMany": true,
        "hint": "string",
        "indexed": true,
        "internal": true,
        "key": "string",
        "label": "string",
        "language": "string",
        "localized": true,
        "max": 0,
        "maxLength": 0,
        "meta": true,
        "min": 0,
        "minLength": 0,
        "options": [
          null
        ],
        "pattern": "string",
        "placeholder": "string",
        "relationSpaceId": "string",
        "required": true,
        "rowLabelField": "string",
        "schema": {},
        "schemaProperty": "string",
        "sortable": true,
        "to": [
          null
        ],
        "type": "array",
        "unique": true,
        "visibility": "internal"
      }
    ],
    "sections": [
      {
        "example": "string",
        "hint": "string",
        "key": "string",
        "kind": "list",
        "label": "string",
        "render": "labelled",
        "required": true,
        "role": "example",
        "schemaProperty": "string"
      }
    ],
    "settings": {
      "blockLibrary": true,
      "defaultSort": "string",
      "defaultVisibility": "internal",
      "group": "string",
      "icon": "string",
      "listColumns": [
        "string"
      ],
      "orderable": true,
      "previewUrl": "string",
      "routable": true,
      "searchableFields": [
        "string"
      ],
      "singleton": true,
      "slugField": "string",
      "strict": true,
      "titleField": "string",
      "versions": {
        "max": 0
      }
    },
    "space": {
      "index": "board",
      "nav": "categories",
      "order": "activity",
      "summary": [
        "string"
      ],
      "whoCreates": "anyone"
    },
    "unknown": [
      "string"
    ]
  }
}
Schema
baseobjectrequired
Show child parameters
blockTypesBlockType[]required
Show child parameters
descriptionstring
fieldsSpaceTypeField[]required
groupstring
iconstring
keystringrequired
labelstringrequired
variantsBlockVariant[]
paramsSpaceTypeField[]required
Show child parameters
acceptstring[]
adminobject
allowedstring[]
allowedBlocksstring[]
allowedGroupsstring[]
columnboolean
conditionstring | number | boolean | string | number | boolean | object[] | object[] | object
defaultobject
exprstring | number | boolean | string | number | boolean | object[] | object[] | object
facetboolean
fieldsSpaceTypeField[]
fromstring
hasManyboolean
hintstring
indexedboolean
internalboolean
keystringrequired
labelstringrequired
languagestring
localizedboolean
maxnumber
maxLengthnumber
metaboolean
minnumber
minLengthnumber
optionsstring[]
patternstring
placeholderstring
relationSpaceIdstring
requiredboolean
rowLabelFieldstring
schemaobject
schemaPropertystring
sortableboolean
toReferenceTarget[]
typestringrequired
array | blocks | boolean | code | color | computed | date | datetime | email | file | form | group | hours | image | json | link | media | money | multiselect | number | place | reference | relation | richText | select | seo | slug | text | textarea | url
uniqueboolean
visibilitystring
internal | preview | public
sectionsSpaceTypeSection[]required
Show child parameters
examplestring
hintstring
keystringrequired
kindstringrequired
list | prose | steps | table
labelstringrequired
renderstring
labelled | lede | plain
requiredboolean
rolestring
example | prerequisite | reference | resolution | summary | symptom
schemaPropertystring
settingsobject
Show child parameters
blockLibraryboolean
defaultSortstring
defaultVisibilitystring
internal | preview | public
groupstring
iconstring
listColumnsstring[]
orderableboolean
previewUrlstring
routableboolean
searchableFieldsstring[]
singletonboolean
slugFieldstring
strictboolean
titleFieldstring
versionsobject
spaceobjectrequired
Show child parameters
indexstringrequired
board | landing | list | single
navstringrequired
categories | none | sections | tags | tree
orderstringrequired
activity | chronological | manual | status | votes
summarystring[]required
whoCreatesstringrequired
anyone | members | staff
unknownstring[]required
defaultKindstringrequired
jsonSchemaobjectrequired
overrideobjectrequired
Show child parameters
blockTypesobject
Show child parameters
addBlockType[]
omitstring[]
orderstring[]
setobject
unsetobject
paramsobject
Show child parameters
addSpaceTypeField[]
omitstring[]
orderstring[]
setobject
unsetobject
sectionsobject
Show child parameters
addSpaceTypeSection[]
omitstring[]
orderstring[]
setobject
unsetobject
spaceobject
Show child parameters
indexstring
board | landing | list | single
navstring
categories | none | sections | tags | tree
orderstring
activity | chronological | manual | status | votes
summarystring[]
whoCreatesstring
anyone | members | staff
presetsobject[]required
Show child parameters
descriptionstringrequired
labelstringrequired
layoutobject[]
namestringrequired
ownbooleanrequired
sectionsKindSlot[]required
Show child parameters
keystringrequired
kindstringrequired
list | prose | steps | table
labelstringrequired
requiredbooleanrequired
rolestring
example | prerequisite | reference | resolution | summary | symptom
settingsobject
Show child parameters
blockLibraryboolean
defaultSortstring
defaultVisibilitystring
internal | preview | public
groupstring
iconstring
listColumnsstring[]
orderableboolean
previewUrlstring
routableboolean
searchableFieldsstring[]
singletonboolean
slugFieldstring
strictboolean
titleFieldstring
versionsobject
shapeobjectrequired
Show child parameters
blockTypesBlockType[]required
Show child parameters
descriptionstring
fieldsSpaceTypeField[]required
groupstring
iconstring
keystringrequired
labelstringrequired
variantsBlockVariant[]
paramsSpaceTypeField[]required
Show child parameters
acceptstring[]
adminobject
allowedstring[]
allowedBlocksstring[]
allowedGroupsstring[]
columnboolean
conditionstring | number | boolean | string | number | boolean | object[] | object[] | object
defaultobject
exprstring | number | boolean | string | number | boolean | object[] | object[] | object
facetboolean
fieldsSpaceTypeField[]
fromstring
hasManyboolean
hintstring
indexedboolean
internalboolean
keystringrequired
labelstringrequired
languagestring
localizedboolean
maxnumber
maxLengthnumber
metaboolean
minnumber
minLengthnumber
optionsstring[]
patternstring
placeholderstring
relationSpaceIdstring
requiredboolean
rowLabelFieldstring
schemaobject
schemaPropertystring
sortableboolean
toReferenceTarget[]
typestringrequired
array | blocks | boolean | code | color | computed | date | datetime | email | file | form | group | hours | image | json | link | media | money | multiselect | number | place | reference | relation | richText | select | seo | slug | text | textarea | url
uniqueboolean
visibilitystring
internal | preview | public
sectionsSpaceTypeSection[]required
Show child parameters
examplestring
hintstring
keystringrequired
kindstringrequired
list | prose | steps | table
labelstringrequired
renderstring
labelled | lede | plain
requiredboolean
rolestring
example | prerequisite | reference | resolution | summary | symptom
schemaPropertystring
settingsobject
Show child parameters
blockLibraryboolean
defaultSortstring
defaultVisibilitystring
internal | preview | public
groupstring
iconstring
400 The request could not be understood — a malformed header, path or query value (request.malformed). A value that was understood but is not acceptable is a 422 validation.failed.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
401 No credential, or one that is expired or revoked (auth.required). Send a Bearer token or the session cookie.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
403 Authenticated, and not allowed — always rbac.forbidden, whether what is missing is the capability, the token scope, or a resource the token is pinned away from. The message names the capability and, for a scope refusal, the scopes that would grant it. A refusal because of the PLAN is a 402 with quota.exceeded, not this.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
404 No such thing — one of the ids in the path does not resolve, or resolves to something this caller may not see (*.not_found).
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
429 Rate limited — see the RateLimit-* headers.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
default Error — the stable { error: { code, message } } envelope.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
The Forumulate teamUpdated