Endpoint
This endpoint creates the initial generation job for a tent.
POST /v1/tents is an async trigger, not a synchronous HTML response. The immediate response only confirms the request was accepted.
Request Body
Field Type Required Notes namestringYes Human-readable tent name promptstringYes The generation prompt user_idstringNo Optional external identifier to attribute the request include_brandbooleanNo Pulls brand context from the workspace before generation auto_publishbooleanNo Automatically publishes after successful generation custom_page_aliasstringNo Only valid when auto_publish is true tent_iduuidNo Use this when you uploaded assets first and want to generate into that idle tent asset_idsstring[]No Up to 5 asset IDs. Requires tent_id
Request Examples
Minimal Request
curl --request POST \
--url https://api.tented.ai/v1/tents \
--header "Authorization: Bearer $TENTED_API_KEY " \
--header "Content-Type: application/json" \
--data '{
"name": "Acme launch page",
"prompt": "Create a launch page for Acme Analytics with a hero, feature sections, customer logos, pricing, and a lead capture form"
}'
With Uploaded Assets
If you uploaded files first, provide the returned tent and asset IDs:
curl --request POST \
--url https://api.tented.ai/v1/tents \
--header "Authorization: Bearer $TENTED_API_KEY " \
--header "Content-Type: application/json" \
--data '{
"name": "Partner landing page",
"prompt": "Use the uploaded brief and logo to build a partner-specific campaign page",
"tent_id": "f11ef3cf-8664-4fe5-a261-c5b4d647b7d1",
"asset_ids": ["01JPAEWP9PY5SCX1V6X03XK9M2"]
}'
Response Example
202 Accepted
{
"id" : "f11ef3cf-8664-4fe5-a261-c5b4d647b7d1" ,
"status" : "pending" ,
"created_at" : "2026-03-13T15:40:00.000Z"
}
asset_ids can only be used with a tent_id. If you send asset IDs without a tent ID, the API returns 400 Bad Request.
Include Workspace Branding
Set include_brand to true when you want Tented to enrich the prompt with workspace brand context such as:
Brand logo
Brand icon
Primary color
Workspace or company name
Company domain
Company description
Brand guidelines
Example:
{
"name" : "Branded page" ,
"prompt" : "Build a product marketing page for our latest release" ,
"include_brand" : true
}
Auto-Publish After Generation
Set auto_publish to true if you want Tented to publish the finished tent automatically.
{
"name" : "Launch page" ,
"prompt" : "Create a launch page for our new feature release" ,
"auto_publish" : true
}
When auto-publish is enabled:
Generation still completes asynchronously
The create response is still 202 Accepted
Publication details appear later in GET /v1/tents/{tentId}
Requesting a custom page alias
You can optionally request a custom published path:
{
"name" : "Spring launch" ,
"prompt" : "Create a campaign page for our spring launch" ,
"auto_publish" : true ,
"custom_page_alias" : "spring-launch"
}
Alias rules:
Maximum 100 characters
Lowercase letters, numbers, hyphens, underscores, and dots only
Must start with a letter or number
Must not be a UUID
Must not use reserved words such as api, admin, submit, or assets
Use / to publish at the domain root
custom_page_alias requires auto_publish: true. Sending an alias without auto-publish returns 400 Bad Request.
Important Behavior
One initial generation per tent
If you supply tent_id, that tent must not already have a generation. Otherwise Tented returns:
{
"error" : "Tent already has a generation"
}
with 409 Conflict.
Prompt validation
Tented validates that your prompt is actually asking for web content. Requests that do not look like a landing page, form, registration page, or related web experience can be rejected with:
{
"error" : "Invalid request" ,
"message" : "Please enter a prompt that describes the web content you'd like to create (e.g., landing page, form, registration page)." ,
"code" : "INVALID_PROMPT_INTENT"
}
Credit limits
If the workspace does not have enough credits to start generation, the API returns 429 Too Many Requests.
User attribution
If you provide user_id, Tented stores it as the request’s creator identity for that tent’s first chat message and generation trigger. It does not change authentication or workspace scope.
Common Errors
Status Cause 400 Bad RequestInvalid JSON body 400 Bad RequestRequest body is missing 400 Bad RequestMissing required fields like name or prompt 400 Bad Requestasset_ids sent without tent_id400 Bad RequestInvalid custom_page_alias 400 Bad RequestPrompt fails web-content intent validation 401 UnauthorizedMissing or invalid bearer token 404 Not Foundtent_id does not exist404 Not FoundOne of the supplied asset_ids does not exist 409 ConflictThe supplied tent_id already has a generation 429 Too Many RequestsCredit limit exceeded
Next: Retrieve Tent Status Poll for generation progress and read publication results.